20145214《网络攻防》逆向及Bof基础实践

实践说明

  • 本次实践的对象是一个名为pwn1的linux可执行文件。
  • 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
  • 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。
  • 方法一手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
  • 方法二利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

基础知识

  • NOP指令即“空指令”,在执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令
  • JNE是条件转移指令,如果不相等则跳转
  • JE是条件转移指令,如果相等则跳转
  • JMP是无条件转移指令,包含段内直接短转Jmp short、段内直接近转移Jmp near、段内间接转移Jmp word、段间直接转移Jmp far
  • CMP是比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果

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

  • 将目标文件反汇编后,我们知道要让程序执行getShell,要通过将call指令的目标地址由d7ffffff变为c3ffffff
  • vi进入文件可看到如下“乱码”

  • 输入:%!xxd切换为16进制显示模式,找到需要修改的内容,进行修改如下

  • 输入:%!xxd -r转换为原格式,输入:wq保存并退出
  • 运行下改后的代码,会得到shell提示符

  • 之后可用exit退出

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

1、反汇编,了解程序的基本功能

  • objdump -d 20145214pwn | more语句来实现反汇编,管道|的作用是将前半段的输出作为后半段的输入,从而输出出来。
  • 通过反汇编,我们发现foo函数有Buffer overflow漏洞

2、确认输入字符串哪几个字符会覆盖到返回地址

  • 构造数据填充缓冲区直到覆盖ebp和返回地址的数据。第一次构造时字符串长度不够,看图中ebp覆盖了两个字节的数据35(5的ascii码),eip没有变化

  • 第二次构造数据时增加长度,使得eip值改变为:0x363636(6的ascii)码

  • 输入数据111111222222333333444444555555123456确定返回地址被覆盖的位置

  • 可以发现时“3456”覆盖了新的eip,所以我们要将getShell的内存地址替换这4个字符,以达到将程序定向到grtShell函数的目的

3、构造输入字符串

  • getShell的内存地址,在未启用ALSR的主机上是固定不变的,通过反汇编时可以看到,即0804847d。确认需要输入的是11111122222233333344444455555512\x7d\x84\x04\x08
  • 构造字符串,perl -e 'print "11111122222233333344444455555512\x7d\x84\x04\x08\x0a"' > input,使用输出重定向“>”将perl生成的字符串存储到文件input中,\x0a表示回车
  • 可以使用16进制查看指令xxd查看input文件的内容是否如预期

  • 将input的输入,通过管道符“|”,作为20145214pwn的输入。获取shell后输入ls指令结果如下

20145214《网络攻防》逆向及Bof基础实践的更多相关文章

  1. 20155235 《网络攻防》 实验一 逆向及Bof基础实践说明

    20155235 <网络攻防> 实验一 逆向及Bof基础实践说明 实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  2. 网络对抗实验一 逆向及Bof基础实践

    网络对抗实验一 逆向及Bof基础实践 一.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ...

  3. 20145308 《网络对抗》 逆向及BOF基础实践 学习总结

    20145308 <网络对抗> 逆向及BOF基础实践 学习总结 实践目的 通过两种方法,实现程序能够运行原本并不会被运行的代码 实践原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串 ...

  4. 2017-2018-2 20155229《网络对抗技术》Exp1:逆向及Bof基础实践

    逆向及Bof基础实践 实践基础知识 管道命令: 能够将一个命令的执行结果经过筛选,只保留需要的信息. cut:选取指定列. 按指定字符分隔:只显示第n 列的数据 cut -d '分隔符' -f n 选 ...

  5. 20145206邹京儒《网络对抗》逆向及Bof基础实践

    20145206邹京儒<网络对抗>逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:ma ...

  6. 20145216《网络对抗》逆向及BOF基础实践

    20145216<网络对抗>逆向及BOF基础实践 1 逆向及Bof基础实践说明 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函 ...

  7. 20145327 《网络对抗》逆向及BOF基础实践

    20145327 <网络对抗>逆向及BOF基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...

  8. 20145204《网络对抗》逆向及bof基础实践

    20145204<网络对抗>逆向及bof基础实践 实践目的说明 实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何 ...

  9. 20145208蔡野 《网络对抗》逆向及BOF基础实践

    20145208蔡野 <网络对抗>逆向及BOF基础实践 逆向及Bof基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函 ...

随机推荐

  1. Ext4文件系统架构分析(三) ——目录哈希、扩展属性与日志

    struct dx_root Htree的内部节点: struct dx_node Htree 树根和节点中都存在的 Hash map: struct dx_entry 1.20 扩展属性EA 扩展属 ...

  2. java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字

    ### Error updating database. Cause: java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字 ### The error ...

  3. ARM汇编语言

    ---恢复内容开始--- arm汇编语言 汇编语言是一种程序设计语言,arm处理器是一种16/32位的嵌入式RISC微处理器.一开始我把这混为一谈了.ARM汇编的特点:汇编语言,又叫助记符语言. 1) ...

  4. VIM - tab 相关的简单配置

    1. 概述 vim 是强大的文本编辑器 使用 vim 前, 需要做些简单配置, 来让 vim 更符合自己的操作习惯 想看配置项的, 直接到最后 2. 准备 安装 vim 略 配置文件 位置 /etc/ ...

  5. Facebook如何管理150亿张照片

    Facebook 的照片分享很受欢迎,迄今,Facebook 用户已经上传了150亿张照片,加上缩略图,总容量超过1.5PB,而每周新增的照片为2亿2000万张,约25TB,高峰期,Facebook ...

  6. win10操作系统vs2010编译osg3.4.0问题解决记录

    参考博客:OSG3.4.0+VS2010+WIN10编译及二次开发环境搭建 链接:https://blog.csdn.net/hsc1239653453/article/details/7827856 ...

  7. 如何启动 EDB*Plus

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页     回到顶级页面:PostgreSQL索引页 由于EnterpriseDB公司的网站上讲的 ...

  8. 洛咕 P2403 [SDOI2010]所驼门王的宝藏

    简单tarjan. 一行的横天门如果暴力连边会被卡成平方,所以只要相邻两个横天门连双向边,再随便选一个横天门向整行连边即可.纵寰门同理.ziyou门直接map暴力连边. 然后tarjan直接dp. / ...

  9. restful_framework之APIView

    一.安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面安装 方式三:pycharm命令行下安装(装在 ...

  10. SSIS 容器

    容器(Container)是控制流的特殊的任务(Task),它为一个或多个Task提供逻辑组合,可以实现工作流的重复执行和顺序执行,还可以把变量和事件处理程序的作用域缩小到容器中.不能在容器内的Tas ...