20145308 《网络对抗》 逆向及BOF基础实践 学习总结
实践目的
-
通过两种方法,实现程序能够运行原本并不会被运行的代码
实践原理
- 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数
-
手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数
知识点学习总结
汇编、机器指令
-
汇编指令与机器指令一一对应
EIP、指令地址
%eip
存储指向下一条要执行的指令的地址%ebp
存储栈底指针,栈基址%esp
存储栈顶指针,始终指向栈顶-
ESP存储栈底地址,是由ESP在函数调用之前传递给EBP的。等到调用结束之后,EBP会把其地址再次传回给ESP。所以ESP再次指向了函数调用结束后,栈顶的指针
方法一
反汇编了解程序
- 使用
objdump -d 20145308 | more
命令查看目标文件20145308
的反汇编代码 - 可看到
main
函数在call 8048491
处调用执行foo
函数,对应机器码为e8 d7ffffff
-
想要使
main
函数在此处改为跳转执行getshell
函数,修改d7ffffff(EIP+d7ffffff=foo)
为c3ffffff(EIP+c3ffffff=getshell)
即可直接修改机器指令,改变程序执行流程
- 使用
vi
打开20145308
,将显示模式切换至16进制模式,并查找到e8 d7
方法二
反汇编了解函数
确认输入字符串哪几个字符会覆盖到返回地址
构造输入字符串
其他
- 本次实践使用两种方法实现了使程序执行了getshell,第一种方法为利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数;第二种方法为手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。通过这次实践复习加深了对上学期学习的Linux命令的理解,也对本次实践所要学习的知识有所掌握