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

20145217《信网络对抗》逆向与BOF基础实践

2017-02-28 21:05 197 查看

20145217《信网络对抗》逆向与BOF基础实践

内容:

一、简单机器指令,汇编语言

1.'objdump -d xxx|more'反汇编命令查看机器代码,'cat'显示文件内容,'xxd'16进制显示,'cp'复制文件,'mkdir'新建文件夹等等

2.栈用于实现函数或过程调用,相关寄存器'BP、FP、SP',相关操作'PUSH'压栈、'POP'弹栈

3.函数调用过程的三个步骤:'prologue'保存当前的栈基址(ebp);'call': 调用参数和返回地址('eip')压栈,跳转到函数入口;'return': 恢复调用者原有栈

4.部分指令机器码

①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指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

二、缓冲区溢出攻击

当调用函数时,'Call'指令会将返回地址('Call'指令下一条指令地址)压入栈,'Ret'指令会把压栈的返回地址弹给EIP

栈溢出攻击的原理

通过缓冲区溢出修改栈中的返回地址,当函数调用返回,EIP获得被修改后的返回地址,并执行'Shellcode'

三、两个实验

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

(1)反汇编查看'pwn1'的机器代码



(2)'main'函数,注意'call'指令行



(3)'getshell'函数的地址



(4)计算偏移量



(5)'vim'编辑器打开



(6)转成16进制



(7)查找命令段



(8)修改,insert可以切换输入模式





(9)改好了以后编码模式再还原回去



(10)运行下结果如下图



2.'Linux'栈溢出/'Shellcode'

(1)gdb调试pwn2,测试溢出长度







(2)用脚本语言建立一个文件,用'cat'显示文件内容,效果如下



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