|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|


1576, 1/79 |
![]() |
![]() |
![]() |
![]() |
|
SmileBedge | ||||||
|
쉘코드 세그먼트오류;; | ||||||
|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1509 [복사]
Hit : 4054 Date : 2011/07/29 10:21
|
|||||||
| ![]() |
| |
| 늅늅 | \00때문에 그런거 아닐까요 \00이 상당히 많이 들어가네요 | 2011/07/29 | |
| W.H. | \x00 이 쉘코드에 있으면 제대로 실행 않되요 | 2011/07/30 | |
| ㄴ NULL이 필요한코드에 NULL을 없애면 실행자체가 안되요 ~ 디스어셈블해보니 Hello World를 출력하시려던거같으신데 FTZ기준으로 첫번째 쉘코드의 시작부분이 이상하네요 0x08049440 <code+0>: call 0x8049422 <data_start+2> // 요기이상 0x08049445 <code+5>: dec %eax // "Hello World" 0x08049446 <code+6>: gs // "Hello World" 0x08049447 <code+7>: insb (%dx),%es:(%edi)// "Hello World" 0x08049448 <code+8>: insb (%dx),%es:(%edi)// "Hello World" 0x08049449 <code+9>: outsl %ds:(%esi),(%dx)// "Hello World" 0x0804944a <code+10>: and %dl,0x6f(%edi)// "Hello World" 0x0804944d <code+13>: jb 0x80494bb <_DYNAMIC+67>// "Hello World" 0x0804944f <code+15>: add %dl,%fs:0x56e58955(%eax)// "Hello World" 0x08049456 <code+22>: mov $0xb,%edx // 11글자 0x0804945b <code+27>: pop %ecx // "Hello World" 뽑아내기 0x0804945c <code+28>: mov $0x1,%ebx // stdout 0x08049461 <code+33>: mov $0x4,%eax // write 0x08049466 <code+38>: int $0x80 // 0x80 inturrupt 0x08049468 <code+40>: mov $0x1,%eax // exit 0x0804946d <code+45>: mov $0x0,%ebx // 0 0x08049472 <code+50>: int $0x80 // 0x80 inturrupt 디스어셈블한 코드중 code+0부분의 바이트코드가 \xe8\xdd\xff\xff\xff인데 , code+5와 code+22의 offset은 0x11이에요. (code + 5 ~ code + 21은 "Hello World") 그래서 \xe8\x11\x00\x00\x00 로 바꿔주시면 잘됩니다 :) 인증샷 [guest@ftz guest]$ cat pwn3r.c http://www.hackerschool.org/HS_Boards/skin/guta_green/cw_write.gif char code2[] = "\xe8\x11\x00\x00\x00\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x00\x90\x55\x89\xe5\x56" "\xba\x0b\x00\x00\x00\x59\xbb\x01\x00\x00\x00\xb8\x04\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80"; int main() { int *run; run = (int *)&run+2; (*run) = (int) code2; return 0; } [guest@ftz guest]$ ./pwn3r Hello World[guest@ftz guest]$ |
2011/07/30 | |
|
|