20202402 2022-2023-2 《网络与系统攻防技术》实验一实验报告

本文详细介绍了如何通过手工修改可执行文件和利用缓冲区溢出漏洞来触发未正常执行的getShell函数,以及如何注入并运行自定义shellcode。过程中涉及汇编指令、反汇编工具的使用以及堆栈可执行性和地址随机化的控制。
摘要由CSDN通过智能技术生成

1.实验内容

1.1 实验目标

本次实践的对象是一个名为pwn1的linux可执行文件。

该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。

该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

三个实践内容如下:

1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

3.注入一个自己制作的shellcode并运行这段shellcode。

1.2 基础知识

1.通过结合计算机组成原理以及查阅相关资料,我们知道了NOP, JNE, JE, JMP, CMP等常用汇编指令的机器码:

NOP:一个空指令,什么都不做,让cpu等待一段时间,并且该指令会自动对齐寻址。机器码为0x90;

JNE:一个条件转移指令,当零标志z=0时跳转至标号,z=1时顺序执行下一条指令。机器码为0x75;

JE:一个条件转移指令,当零标志z=1时跳转至标号,z=0时顺序执行下一条指令。机器码为0x74;

JMP:无条件转移指令。段内直接近转移Jmp near,机器码为0xe9; 段内间接转移Jmp word,机器码为0xff;段内直接短转Jmp short,机器码为0xeb; 段间直接(远)转移Jmp far,机器码为0xea;

CMP:比较指令,执行减法操作但不保存运算结果。

2.掌握反汇编与十六进制编程器

通过查阅资料我们可以知道:

objdump反汇编命令:

objdump -f test //显示test的文件头信息

objdump -d test //反汇编test中的需要执行指令的那些section

objdump -D test //与-d类似,但反汇编test中的所有section

objdump -h test //显示test的Section Header信息

objdump -x test //显示test的全部Header信息

objdump -s test //除了显示test的全部Header信息,还显示他们对应的十六进制文件代码

2.实验过程

2.1 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数

设置共享文件夹将pwn1文件导入主目录后并修改文件名pwn2402,输入:objdump -d pwn2402得到反汇编代码:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值