環(huán)境準(zhǔn)備
1搂橙、下載ubuntu
https://cn.ubuntu.com/download/alternative-downloads
2端衰、安裝參考
https://blog.csdn.net/qq_54218833/article/details/125241618
2、安裝WMwareTool
https://blog.csdn.net/MR_lihaonan/article/details/125479384
4、安裝Oh-My-Zsh
https://blog.csdn.net/weixin_43658578/article/details/126802982
安裝工具
安裝pwntools
apt install python3-pip
sudo apt install python3-pwntools
安裝pwndbg(運(yùn)行g(shù)db下有pwndbg標(biāo)識(shí)即表示安裝成功)
git clone https://gitee.com/Z3R3F/pwndbg.git
cd pwndbg
./setup.sh
安裝checksec(運(yùn)行pwndbg時(shí)自動(dòng)檢測(cè))
git clone https://github.com/slimm609/checksec.sh.git
cd checksec.sh
sudo ln -s /xx/xx/checksec /usr/local/bin/checksec #絕對(duì)路徑
安裝LibcSearcher-ng(聯(lián)網(wǎng)可用)
git clone https://github.com/dev2ero/LibcSearcher.git
cd LibcSearcher
python3 setup.py develop
安裝LibcSearcher(推薦LibcSearcher-ng)
sudo apt install python3-capstone
git clone https://github.com/lieanu/LibcSearcher.git
cd LibcSearcher
python3 setup.py develop
安裝ropgadget
sudo apt install python3-ropgadget
使用:OPgadget --binary ./ciscn_2019_c_1 --only "pop|ret"
安裝one_gadget
sudo apt -y install ruby
sudo gem install one_gadget
使用:one_gadget libc.so.6
指定libc執(zhí)行:p= process(['./ld-2.23.so','./pwn'], env = {'LD_PRELOAD' : './libc-2.23.so'})
其它技巧
1西潘、ida
1. ida 查看反編譯成代碼 F5
2. ida 查看字符串Shift+F12
3. n:修改函數(shù)名
4. ctrl + s:查看各段地址
2、調(diào)試程序、查看內(nèi)存蒸绩、棧
EIP 下條指令執(zhí)行的位置
stack 50
x\16x 0x482054
x\s 0x482054
x \gx rsp
r或run:運(yùn)行程序。
n 或 next:?jiǎn)螚l執(zhí)行铃肯。
s或step:進(jìn)入函數(shù)調(diào)用
continue(或c):從當(dāng)前位置開始連續(xù)而非單步執(zhí)行程序
break(b) 行號(hào):在某一行設(shè)置斷點(diǎn)
info break :查看斷點(diǎn)信息患亿。
finish:執(zhí)行到當(dāng)前函數(shù)返回,然后挺下來等待命令
print(p):打印表達(dá)式的值押逼,通過表達(dá)式可以修改變量的值或者調(diào)用函數(shù)
p 變量:打印變量值
quit:退出gdb
pwn保護(hù)機(jī)制
1窍育、PIE隨機(jī)地址保護(hù)
解釋:
顧名思義,就是地址每次運(yùn)行時(shí)隨機(jī)的宴胧,因?yàn)槲覀兏采w返回地址漱抓,那你得知道我們要執(zhí)行的代碼要去哪對(duì)吧,所以你要知道shellcode的地址恕齐,那你開地址隨機(jī)化乞娄,你不就沒辦法知道了嗎。
繞過:
我們可以有兩個(gè)思路显歧,第一個(gè)就是我們一旦泄露出一個(gè)變量的地址仪或,那這不就稍微加減計(jì)算一下就可以得到所有的地址了嗎,第二個(gè)就是我們覆蓋地址只覆蓋2字節(jié)士骤,也就是4個(gè)數(shù)字范删,也就是說我們第4個(gè)數(shù)字不知道,1個(gè)數(shù)字那不就10種可能嘛拷肌,一個(gè)個(gè)試到旦,不過呢這個(gè)方法只適合小端序的程序
2、Canary保護(hù)
棧溢出保護(hù)是一種緩沖區(qū)溢出攻擊緩解手段巨缘,在ebp的上面添忘,會(huì)壓入一個(gè)Canary的值,在子函數(shù)驗(yàn)證完之后若锁,對(duì)比Canary的值搁骑,看看是否相等。不相等,代表程序被修改仲器,產(chǎn)生了異常
3煤率、NX保護(hù)機(jī)制
No-eXecute(不可執(zhí)行),基本原理是將數(shù)據(jù)所在內(nèi)存頁標(biāo)識(shí)為不可執(zhí)行,其實(shí)就是讓我們不能直接利用程序中的某一段代碼或者自己填寫代碼來獲得 shell