20145336张子扬 《网络对抗》逆向及bof基础

20145336张子扬 《网络对抗》逆向及bof基础

学习知识点

缓冲区溢出

缓冲区溢出

一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

缓冲区溢出原理

通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

实践内容

实践背景

本次实践的对象是一个名为pwn1的linux可执行文件。该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。

实践一

  • 首先我们需要了解这个文件,所以我们对pwn1进行反汇编操作
  • 上图主要有三列内容,首先第一列是指代码段在内存中的地址,第二列指的是及其指令,第三列是指汇编指令。我们主要阅读第三列来了解这段代码是有何作用。第一张图主函数右下角的"call 8048491 ",这是一条汇编指令,是说这条指令将调用位于地址8048491处的foo函数,我们此次实验的主要目的就是将这里调用的foo函数的地址用缓冲区溢出的方法将地址改为get shell函数的地址从而进行攻击。
  • 然后我们用vim文本编辑器打开文件,之后将会显示一大堆乱码,这是显示的ASCII码。想要查看内容输入“:%!xxd”,将显示模式显示为16进制模式。
  • 查看需要修改内容的地方,这里我们需要更改e8d7的位置,然后输入“/e8 d7”,查找要修改的内容,注意中间有空格,不然会出错。将d7改为c3。
  • 用“:%!xxd -r”将16进制转换为原格式,再用“:wq”存盘退出vim。
  • 最后一步验证一下这个代码。用反汇编再看看这个及其指令是否发生变化。下面两张图很清楚的显示了call返回地址的变化。
  • 运行一下,查看结果。

实践二

  • 首先和实践一相同,反汇编了解程序的基本功能。
  • 然后我们需要确定那几位缓冲区溢出的字符会覆盖返回地址。之后使用gdb调试来测试程序,我选择使用1111122222333334444455555666667777788888来进行测试。
  • 观察寄存器eip的值,后面显示0x38373737,这里显示的ASCII码转换为数字就是7778,很容易就能找到这几位字符所在的位置。
  • 然后构造输入字符传,我们需要生成包括一个字符串的文件来让系统输入\x7d\x84\x04\x08这样的16进制值,如下图。
  • 这样我们使用管道符“|”作为pwn1的输入。下面是实验结果。
时间: 2024-12-31 03:12:09

20145336张子扬 《网络对抗》逆向及bof基础的相关文章

20145301赵嘉鑫《网络对抗》逆向及Bof基础

20145301赵嘉鑫<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段. 本次实践主要是学习两种方法: 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 手工修改可执

20145311王亦徐《网络对抗技术》MAL_逆向与Bof基础

20145311王亦徐<网络对抗技术>MAL_逆向与Bof基础 实践目标 运行一个可执行文件,通过逆向或者Bof技术执行原本不应该执行的代码片段采用的两种方法: 1.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 2.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 3.注入一个自己制作的shellcode并运行这段shellcode等等 这几种思路,基本代表现实情况中的攻击目标(1)运行原本不可访问的代码片段(2)强行修改程

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

20155201 李卓雯 <网络对抗技术>实验一 逆向及Bof基础 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode. 三个实践内容如下: 手工修改可执行文

20155311高梓云《网络对抗》逆向及Bof基础

20155311高梓云<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段. 本次实践主要是学习两种方法: 1.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 2.手工

20165101刘天野 2018-2019-2《网络对抗技术》Exp1 逆向与Bof基础

20165101刘天野 2018-2019-2<网络对抗技术>Exp1 逆向与Bof基础 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何

20145339顿珠达杰 《网络对抗技术》 逆向与Bof基础

目的 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用: 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行.却本不应该执行的代码部分首地址(这需要我们有一定的权限修改可执行文件) 通过缓冲区溢出:输入数据,使其超出缓冲区大小,并覆盖住返回地址(新的返回地址为另一部分我们希望执行.却本不应该执行的代码部分首地址) ...... 基础知识 objdump -d test :反汇编test more : more命令和cat的功能一样都是查看文件里的内容,但

20145336张子扬 《信息安全系统设计基础》期中总结

20145336张子扬 <信息安全系统设计基础>期中总结 教材学习内容总结 学习目标 复习 Linux常用命令 复习 教材1-7章 man命令 在 Linux 环境中,如果你遇到困难,可以使用man 命令,它是Manual page的缩写.要查看相应区段的内容,就在 man 后面加上相应区段的数字即可. -a:在所有man帮助手册中搜索 -k xxx(所查找内容) |grep x(标号) -f:关键字精确搜索,显示给定关键字的简短描述信息 -p:指定内容时使用分页程序 -M:指定man手册搜索

20145336张子扬 《信息安全系统设计基础》第5周学习总结

20145336张子扬 <信息安全系统设计基础>第5周学习总结(一) 教材学习内容总结 学习目标 理解逆向的概念 掌握X86汇编基础,能够阅读(反)汇编代码 了解ISA(指令集体系结构) 理解函数调用栈帧的概念,并能用GDB进行调试 学习内容 ISA:定义了处理器状态,指令的格式,每条指令对状态的影响. gcc -O1 -S text.c 使用gcc产生一个汇编文件code.s,可以使用vim查看 gcc -O1 -c text.c 使用gcc产生目标代码文件.从中可知及其实际执行的程序只是对

20145336张子扬 《信息安全系统设计基础》第7周学习总结

20145336张子扬 <信息安全系统设计基础>第1周学习总结 教材学习内容总结 学习目标: 了解常见的存储技术(RAM.ROM.磁盘.固态硬盘等) 理解局部性原理 理解缓存思想 理解局部性原理和缓存思想在存储层次结构中的应用 高速缓存的原理和应用 三种常见存储技术:RAM.ROM和磁盘 随机访问存储器RAM分为静态RAM(SRAM)和动态RAM(DRAM) SRAM 用来作为高速缓存储存器,SRAM将每个位存储在一个双稳态的存储器单元里,每个单元是用一个六晶体管电路来实现的.它可以无限制地保