Pwnable.tw-Dubblesort
Author: 堇姬Naup
libc
glibc all in one 中沒有 2.23-0ubuntu5
所以去網路上找libc
https://launchpad.net/ubuntu/xenial/i386/libc6/2.23-0ubuntu5
把i386載下來
1 | dpkg -X libc6_2.23-0ubuntu5_i386.deb . |
在libs裡面就有ld跟libc了
patchelf直接patch上去
1 | patchelf --set-interpreter ld-2.23.so dubblesort |
IDA分析
main
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
分析
看一下保護
1 | pwndbg> checksec |
一片綠
隨便亂試了一下,這邊印出name的地方有partial overwrite,可以用來leak stack上資料
1 | naup@naup-virtual-machine:~/Desktop/pwn/pwnable/doublesort$ ./dubblesort |
他可以輸入0x40大小的資料,蓋28可以leaklibc,offset老方法attach上去算(我遇到了一些蠻玄幻的問題,應該是本地跟遠端殘留的stack不一樣,亂try了好多次試出了好的padding)
1 | payload = b'a'*28 |
觀察一下他要你輸入你要排序的長度,卻沒有管控大小輸入,導致oob
檢查觸發了stack smashing
1 | naup@naup-virtual-machine:~/Desktop/pwn/pwnable/doublesort$ ./dubblesort |
現在問題就剩下stack canary了
隨便測了一下發現-
會跳過當前的,所以我可以遇到canary輸入-
跳過他,繼續往後寫
打ret2libc,這邊發現/bin/sh比較大,system比較小
所以說可以直接排
中間塞個system當padding就可以了
來看看整個stack
1 | **num_arr ebp - 0x7c |
基本上canary很少有機會比libc大,所以大部分情況可以work
exploit
1 | from pwn import * |