歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

Linux PWN從入門到熟練

來源:本站整理 作者:佚名 時間:2018-11-19 TAG: 我要投稿

最近在復習pwn的一些知識。主要涉及到當堆棧開啟了保護的時候,我們不能夠直接將shellcode覆蓋到堆棧中執行,而需要利用程序其他部分的可執行的小片段來連接成最終的shellcode。此小片段就是gadgets。本文主要通過練習題的方式講述如何尋找gadgets,如何利用現有的工具來加速自己的pwn的效率。Gadgets的類型和難度也逐步變化。下面帶來手把手教你linux pwn。讓你的pwn技術從入門到熟練。練習題的難度逐步加大。
第一關
第一關的gadgets較為簡單,包含了一個直接可以利用的,可返回shell的函數。我們只要計算好覆蓋的偏移,將可返回shell函數的地址覆蓋到相應的位置即可以。程序下載:Pwn1
我們首先來查看一下該程序的保護情況,發現開啟了堆棧保護。即NX enabled。且是32bit的程序。因此需要在32位的linux環境下測試。

這里涉及到一個工具,chechsec。該工具專門用來檢測程序中受保護的情況,我們可以根據程序受保護的情況來選擇對應的pwn策略。
下載以后,直接在命令行中建立符號鏈接就可以在terminal中直接使用了
sudo ln –sf checksec /usr/bin/checksec
接下來我們利用IDA查看一下程序的源代碼:


可以發現漏洞出現在gets里面,gets函數存在緩沖區溢出漏洞,我們可以通過超長的字符串來覆蓋緩沖區,從而修改ROP。為了達到這個目的,我們需要首先計算,輸入的&s的堆棧地址位置距離堆棧的底部ebp的位置。Ebp的下一個地址,就是記錄了返回地址的位置。在32位的程序中,就是ebp+4。其中,Esp是棧頂指針,ebp是棧底指針。Esp -> ebp, 地址從小到大。小地址棧頂,大地址棧底。
我們有兩種方法可以得到s距離返回地址的偏移:徒手計算和利用patternoffset產生字符串。
首先第一種方法,徒手計算。我們利用gdb的輔助工具gef來輔助查看esp地址。
注意,這里需要按照這個輔助工具,gef,該工具會提供更加豐富的調試信息。包括堆棧信息,寄存器信息等。按照完畢之后,使用gdb –q *.elf執行就可以。
啟動的程序之后,我們在上述get函數的位置下斷點,即0x080486AE


可以看到 esp 為 0xbfffeed0,ebp為0xbfffef58,同時 s 相對于 esp 的索引為[esp+80h-64h]= [esp+0x1c]。所以s的地址為 0xbfffeeec,所以 s 相對于 ebp 的偏移為 0x6C(108),所以相對于返回地址的偏移為 0x6c+4(112)。
另外一種方法是利用patternoffset執行來計算。借助到這個工具patternoffset。下載下來直接作為python腳本使用。利用下面的命令產生字符串到test的文件中:
python patternLocOffset.py -c -l 700 -f test
接著遠程IDA掛載調試,在程序的返回位置下斷點,即retn的位置。

它會在遠程的服務器端等待我的輸入
~/ $ ./linux_server
IDA Linux 32-bit remote debug server(ST) v1.22. Hex-Rays (c) 2004-2017
Listening on 0.0.0.0:23946...
=========================================================
[1] Accepting connection from 192.168.110.1...
There is something amazing here, do you know anything?
在這個位置,我就把產生的pattern計算字符串復制進去。(注意,如果這里始終沒有讓程序停下來讓你輸入對應的字符串進去的話,就斷開ubuntu的server,然后重新連接一下,就會停下來等待我們的字符串輸入)
接著,查看程序覆蓋的寄存器ebp的內容為0x41366441

再利用offset的腳本計算一下輸入的緩沖區地址距離ESP相差多少的字節,相差的是108個字節。ESP之后,存儲的就是返回的地址,所以要加上108+4=112字節的偏移。

得到的結果和上面是一致的。
接下來,我們需要找到可以利用的系統調用函數。在IDA中搜索(alt+T)可以利用來的系統sh調用函數:

最后,將需要覆蓋的地址0x0804863A填入指定的位置覆蓋,在利用pwntools來驗證攻擊。這里利用到了一個pwntools工具。推薦使用基于源代碼的安裝方式,可以更為方便。
安裝方式為:
cd ~
git clone https://github.com/aquynh/capstone
cd capstone
make
make install
cd ~
git clone https://github.com/Gallopsled/pwntools
cd pwntools
python setup.py install

[1] [2] [3]  下一頁

【聲明】:黑吧安全網(http://www.gkrbnd.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        福彩原副主任