20145335郝昊《网络对抗》逆向及Bof基础实践
2017-03-01 17:18
603 查看
20145335郝昊《网络对抗》逆向及Bof基础实践
1.实践说明
本次实践是对一个名为pwn1的可执行Linux文件进行操作。程序的执行流程是:主函数
main调用
foo函数,
foo将函数其功能简单回显任何用户输入的字符串。
程序包含另一个代码片段,
getshell,会返回一个可用
shell。
使用两种方法进行修改文件
pwn1的代码:
利用
foo函数的
Bof漏洞构造一个攻击输入字符串,覆盖返回地址,出发
getShell函数。
手工修改可执行文件,改变程序执行流程,直接跳转到
getShell函数。
2.实践过程
直接修改程序机器指令第一:首先确定文件
pwn1是可以执行的。
第二:用vi打开
pwn1文件,会发现是乱码,使用命令
%!xxd将乱码格式修改为16进制进行表示。
第三:使用命令
/e8 d7查找到要修改的内容,使用
i为键入模式,将
d7修改为
c3
第四:使用命令
%!xxd -r还原为原格式,并使用命令
:wq保存退出vi
实践结果会得到:
通过构造输入参数,造成BOF攻击,改变程序执行流。
法现该可执行文件正常运行是调用如下函数
foo,这个函数有
Buffer overflow漏洞。
080484af <main>: 80484af: 55 push %ebp 80484b0: 89 e5 mov %esp,%ebp 80484b2: 83 e4 f0 and $0xfffffff0,%esp 80484b5: e8 d7 ff ff ff call 8048491 <foo>
上面的call调用foo,同时在堆栈上压上返回地址:80484ba
确认输入字符串哪几个字符会覆盖到返回地址
为了确定使用多少个字节才会使缓冲区溢出,这里使用暴力破解法,及一个一个字符添加直到出现
Segmentation fault字样。
使用GDB调试
确认用什么值来覆盖返回地址
getShell的内存地址是0804847d。
接下来要确认下字节序(这里是低字节放在高位的大端法),简单说是输入20145335201453352014533520145335\x7d\x84\x04\x08。(前面32字节可以任意输入)
构造书输入字符串
然后将input的输入,通过管道符“|”,作为的输入。
相关文章推荐
- 20145312《网络对抗》 逆向及Bof基础实践
- 20145211《网络对抗》逆向及BOF基础实践
- 20145240《网络对抗》逆向及Bof基础实践
- 20145201李子璇《网络对抗》逆向及Bof基础实践
- 20145238-荆玉茗 《网络对抗》-逆向及Bof基础实践
- 20145204《网络对抗》逆向及bof基础实践
- 20145320《网络对抗》逆向及Bof基础实践
- 20145330 《网络对抗》逆向及BOF基础实践
- 20145225 《网络对抗》逆向及Bof基础实践
- 20145334赵文豪《网络对抗》-逆向及Bof基础实践
- 《网络对抗》 逆向及Bof基础实践
- 《网络对抗》——逆向及Bof基础实践
- 20145208蔡野 《网络对抗》逆向及BOF基础实践
- 20145335郝昊《网络攻防》Bof逆向基础——ShellCode注入与执行
- 20145303 刘俊谦《网络对抗》逆向及BOF基础实践
- 20145209刘一阳 《网络对抗》逆向及BOF基础实践
- 20145327 《网络对抗》逆向及BOF基础实践
- 20145239《网络对抗》- 逆向及Bof基础实践
- 20145308 《网络对抗》 逆向及BOF基础实践 学习总结
- 20145305 《网络对抗》逆向及Bof基础实践