20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础
2018-03-10 21:12
295 查看
20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础
一、实践目标
本次实践的对象是一个名为pwn1的linux可执行文件。该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。
三个实践内容如下:
手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
注入一个自己制作的shellcode并运行这段shellcode。
这几种思路,基本代表现实情况中的攻击目标:
运行原本不可访问的代码片段
强行修改程序执行流
以及注入运行任意代码。
二、基础知识
掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码。NOP指令即空指令,运行该指令时CPU什么也不做,但是会占用一个指令的时间,当指令间需要有延时,可以插入NOP指令。机器码90。
JNE xxx指令是一个条件转移指令,不相等时跳转,转到标号xxx处执行。机器码75。
JE xxx:当相等时跳转。机器码74
JMP :无条件跳转指令。无条件跳转指令可转到内存中任何程序段。转移地址可在指令中给出,也可以在寄存器中给出,或在储存器中指出。
CMP:是比较指令,功能相当于减法指令,只是不保存结果。机器码
掌握反汇编与十六进制编程器
反汇编:把目标代码转为汇编代码的过程,也可以说是把机器语言转换为汇编语言代码、低级转高级的意思。
实验中用到的反汇编命令
objdump -d 20155201 | more
objdump -d命令是将代码段反汇编,
|管道符号, ,它的功能是把管道
|前的命令执行的结果作为管道后面指令的输入传给下一个指令。
objdump -d name | more:该命令把
name代码段反汇编,并把输出送给
more命令作为输入,
more命令分页显示反汇编的结果,这样一条指令完成两个功能。
三、实验内容
正确修改机器指令改变程序执行流程反汇编教材文件,这里我copy一份,重命名为我的学号20155201,然后通过
objdump命令查看汇编代码,找到
main函数中汇编代码的
call 8048491 <foo>部分,可以看到
main函数调用了
foo函数,想要使
main函数调用
getshell函数,可以通过call指令后面的汇编代码部分来实现。只要把8048491这个
foo函数首地址修改成
getshell函数的首地址就804847d可以实现。
观察一下
call 8048491的机器码是
e8 d7 ff ff ff,了解到
call的机器码是e8,并且试想一下数据在机器中是小端法存储,所以d7应该是91部分,把91修改成7d,对应的也要修改成c3部分,把机器码变成
e8 c3 ff ff ff
1.按ESC键 2.输入如下,将显示模式切换为16进制模式 :%!xxd 3.查找要修改的内容 /e8 d7 4.找到后前后的内容和反汇编的对比下,确认是地方是正确的 5.修改d7为c3 6.转换16进制为原格式 :%!xxd -r 7.存盘退出vi :wq
反汇编一下,查看是否修改地址成功
运行程序,查看结果
缓冲区溢出攻击改变程序执行流程
调试未经修改汇编码的程序,观察输入第多少字节后发生缓冲区溢出现象,看到
rip寄存器中的值变成输入的数据
ascii码中,35=5,34=4,所以这里就是5555和4321
发现字节溢出后,只要把溢出的数据换成
getshell的内存地址输入,就会运行
getshell函数,同修改汇编代码后的程序结果一样。
把0804847d这样的十六进制地址数通过脚本输入到程序中
可以看到执行了
getshell函数
能正确构造payload进行bof攻击
先修改栈设置
准备shellcode
注入攻击后,用另一个终端调试进程
ps -ef | grep 20155201-payl查看进程号,gdb调试
看到01020304的地址在0xffffd25c
修改shellcode,改为0xffffd25c挨着的地址0xffffd260
perl -e 'print "A" x 32;print "\x60\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
成功攻击
相关文章推荐
- 20145314郑凯杰《网络对抗技术》实验1 逆向及Bof基础实践
- 20145329 《网络对抗技术》 逆向及Bof基础实验
- 20145321《网络对抗技术》逆向与Bof基础
- 20145338 《网络对抗》逆向及Bof基础实验
- 201555332—网络对抗实验1—逆向与bof基础
- 20145337《网络对抗技术》逆向及BOF基础
- 20145234黄斐《网络对抗技术》实验一,逆向及Bof基础实践
- 20145311王亦徐《网络对抗技术》MAL_逆向与Bof基础
- 20145216《网络对抗》逆向及BOF基础实践
- 20145209刘一阳 《网络对抗》逆向及BOF基础实践
- 20145206邹京儒《网络对抗》逆向及Bof基础实践
- 20145204《网络对抗》逆向及bof基础实践
- 20145210姚思羽《网络对抗技术》逆向及Bof基础实践
- 20145331魏澍琛《网络对抗》逆向及Bof基础
- 20145310《网络对抗》逆向及Bof基础
- 20145303 刘俊谦《网络对抗》逆向及BOF基础实践
- 20145309李昊《网络对抗技术》实验9 web安全基础实践
- 20145211《网络对抗》逆向及BOF基础实践
- 20144303石宇森《网络对抗》逆向及Bof基础
- 20145322何志威《网络对抗》逆向及Bof基础