Author: 堇姬Naup
找libc offset
libc_leak-libc_base(vmmap)=offset
libc offset:
https://libc.blukat.me/
https://github.com/scwuaptx/Pwngdb
version:
Ubuntu 16.04: Glibc 2.23
Ubuntu 18.04: Glibc 2.27
Ubuntu 20.04: Glibc 2.31
Ubuntu 22.04: Glibc 2.35
通常開頭7f
,結尾e80
他說他Dockerfile裡面用Ubuntu 22.04
所以libc版本是2.35
首先因為有ASLR,所以要找出libc base
這裡有oob(簡單來說就是沒有對index檢查,arr[i] (int)
= *(arr + i *sizeof(int)),輸入不在範圍的可以leak 任何記憶體)
嘗試輸入幾次後可以發現15會leak一個libc adress
接著用libc base扣掉他找offset
libc leak:
libc base:
找出offset
找libc裡面的/bin/sh
接下來要堆ROP(用libc裡面的,全部都要+libc base)
目標 | 地址 |
---|---|
pop rdi ; ret | 0x2a3e5 |
/bin/sh | 0x1d8678 |
ret | 0x2a3e5+0x1 |
system | 0x50d70 |
stack
感謝國外隊友Tomer大老幫我釐清問題
順便附上他的解法
https://hackmd.io/@u1f383/S1CNu-1SO
https://www.ired.team/offensive-security/code-injection-process-injection/binary-exploitation/return-to-libc-ret2libc