iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Security

從0開始的打Pwn教學系列 第 22

【Day-22】Pwntools 介紹

  • 分享至 

  • xImage
  •  

這次來介紹一個打Pwn很常用的Python套件【pwntools】,當然,首先就是要載好Python XD
再來就是要把Python的pip功能也載好,然後就讓pip去install就好,我印象中以前的pip沒有辦法直接install,不過現在方便多了~
https://ithelp.ithome.com.tw/upload/images/20241006/20169016DgxLXkNhmc.jpg

安裝好後可以用import pwn導入套件。
https://ithelp.ithome.com.tw/upload/images/20241006/20169016IgfHtUzfzk.jpg

接下來就介紹一些與這次實作相關和比較常用到的模組,這邊我用NC把一個小程式架起來。
https://ithelp.ithome.com.tw/upload/images/20241006/201690165OSY8SSLnO.png
https://ithelp.ithome.com.tw/upload/images/20241006/20169016mD0RzSPICV.png

第一個是CTF比賽當中最常用到的「remote」,顧名思義就是連到目標主機的IP和port。
https://ithelp.ithome.com.tw/upload/images/20241006/20169016F1krZysEjJ.jpg

如果是Local端就用process將檔案直接開啟。
https://ithelp.ithome.com.tw/upload/images/20241006/201690164Q42sCseTo.png

再來是recv、recvline、recvlines和recvuntil,這些都是接收response訊息的,差別在recv()可以設定接收指定的Bytes數量、recvline是只接收一行、recvlines()可以設定要接收多少行而recvuntil是接收到指定的值為止。
https://ithelp.ithome.com.tw/upload/images/20241006/20169016ygcdzIpMeP.png
https://ithelp.ithome.com.tw/upload/images/20241006/20169016bVNGpvo2Vk.png
https://ithelp.ithome.com.tw/upload/images/20241006/201690167eCNTets2n.png
https://ithelp.ithome.com.tw/upload/images/20241006/20169016kk2FZn4wVA.png

接下來是send、sendline和sendlineafter,差異在於sendline最後會加入"\n",sendlineafter就是偵測到指定的字串後再送出資料。
https://ithelp.ithome.com.tw/upload/images/20241006/20169016KnyAwKcGaN.jpg

再來是我們會用到的,生成一個x86或x86-64的Address格式。
https://ithelp.ithome.com.tw/upload/images/20241006/20169016SU7GHxrGzC.png

而我們通常前面會先塞東西,把東西塞到RIP前,然後再放Return addres,這時候就需要flat,flat的參數可以把前面和後面接起來,而a前面的b是指Bytes格式,可以讓程式吃進去。
https://ithelp.ithome.com.tw/upload/images/20241006/20169016yEaN36zPpD.png

如果想要直接接管程式,可以直接用interactive(),這個通常會用在得到Shell權限後的Command控制。
https://ithelp.ithome.com.tw/upload/images/20241006/20169016MCyvdITWcB.png

上面說到要取得Shell權限,而簡單的CTF通常會設計一個Function裡面的內容是設計一個sh來讓我們操控,但如果程式沒有設計sh的話,我們可以利用pwntools裡的shellcraft來製造一個開啟Shell的程式碼,這支程式有用到int 0x80,這個部分是System call我們後續也會介紹到。
https://ithelp.ithome.com.tw/upload/images/20241006/20169016vHNh9GtsED.jpg

最後一個就是cyclic,這是計算前面要塞多少的好用小東東,它會生成以4個為一組的不重複Bytes出來,之後再去找到哪個地方是RIP讀取的,就可以直接控制了。
https://ithelp.ithome.com.tw/upload/images/20241006/20169016RO05BI946c.png
https://ithelp.ithome.com.tw/upload/images/20241006/20169016a6yN6RYMKz.png

以上這些是這次會用到的和簡單的Pwn會用到的模組,pwntools還有很多功能,比如說context用來輸入更多的資訊、asm用來將組合語言轉成Bytes格式、ELF除了程式以外還可以用來分析libc.so和未來在做ROP時會有的一些方便功能等,如果對Pwn有興趣,很推薦深入學習pwntools的使用。


上一篇
【Day-21】控制程式走向
下一篇
【Day-23】Return to function
系列文
從0開始的打Pwn教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言