Pwnable - libc brute forcing in local (p.libcs())

  • 로컬에서 원하는 립시 주소 실행할 때까지 특정 바이트 브루트 포싱하기
    • p.libcs() 이용
  • 상황
    • 8바이트 중 상위 5바이트는 알고 있고, 하위 1.5바이트는 오프셋으로 알고 있는 상황. 하지만 중간 1.5바이트를 모르기 때문에 해당 부분 브루트 포싱이 필요함 -> 0x7fb877 ??? b01
  • 장점
    • 정답인 주소만을 이용하여 페이로드를 전송하기 때문에 디버깅 시 유리함 (빠름)

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
while True:
try:
p = process('./chall')

print(repr(p.libs())) # print base
print(hex(p.libs()['/home/jir4vvit/ctf/idek/sprinter/libc.so.6'] + 0xe3b01))

aslr = hex(p.libs()['/home/jir4vvit/ctf/idek/sprinter/libc.so.6'] + 0xe3b01)[-6:-3] # 0x7fb877 210 b01 -> only get '210'

if aslr != 'fff':
p.close()
continue

# exploit code here !!
# break
except Exception as e:
print(e)
  • 출력 결과
1
2
{'/home/jir4vvit/ctf/idek/sprinter/vuln': 4190208, '/home/jir4vvit/ctf/idek/sprinter/libc.so.6': 140430248431616, '/home/jir4vvit/ctf/idek/sprinter/ld-2.31.so': 140430250479616}
0x7fb877210b01