1.实验内容
本周学习了缓冲区溢出的相关知识点,介绍了包括汇编语言、进程内存管理、函数调用过程等相关知识点。
1.1实践目标
1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
3.注入一个自己制作的shellcode并运行这段shellcode。
1.2基础知识
1.熟悉Linux基本操作
2.能看懂常用指令,如管道(|),输入、输出重定向(>)等。
3.理解Bof的原理。
4.能看得懂汇编、机器指令、EIP、指令地址。
5.会使用gdb,vi。
2.实验过程
2.1手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数
2.1.1.下载目标文件pwn1
(1)通过在kali上的浏览器打开学习通,在学习通上下载文件pwn1然后改名为pwn120222425;
2.1.2.手工修改可执行文件
(1)使用“objdump -d pwn1 | more”命令,反汇编并找到函数调用的相关指令。
(2)按照以下步骤修改文件:
root@KaliYL:~# cp pwn120222425 pwn220222425
root@KaliYL:~# vi pwn220222425
以下操作是在vi内
1.按ESC键
2.输入如下,将显示模式切换为16进制模式
:%!xxd
3.查找要修改的内容
/e8d7
4.找到后前后的内容和反汇编的对比下,确认是地方是正确的
5.修改d7为c3
6.转换16进制为原格式
:%!xxd -r
7.存盘退出vi
:wq
8.反汇编查看call指令是否正确调用getShell objdump -d pwn220222425| more
9.运行下改后的代码,会得到shell提示符#./pwn220222425
结果如图:
证明成功调用getshell。
2.2利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
2.2.1安装gdb
2.2.2反汇编,了解程序的基本功能
输入objdump -d pwn1 | more
2.2.3确认输入字符串哪几个字符会覆盖到返回地址
如果输入字符串1111111122222222333333334444444412345678,那 1234 那四个数最终会覆盖到堆栈上的返回地址,进而CPU会尝试运行这个位置的代码。那只要把这四个字符替换为 getShell 的内存地址,输给pwn120222425,pwn120222425就会运行getShell。
2.2.4确认用什么值来覆盖返回地址
getShell的内存地址,通过反汇编时可以看到,即0804847d。
2.2.5构造输入字符串然后将input的输入,通过管道符“|”,作为pwn120222425的输入。
2.3注入一个自己制作的shellcode并运行这段shellcode。
2.3.1准备工作
关闭地址随机化,0表示关闭成功
2.3.1构造要注入的payload。
采用anything+retaddr+nops+shellcode。的方法
打开一个终端注入这段攻击buf
再开另外一个终端,用gdb来调试pwn1这个进程
1.先用ps -ef | grep pwn120222425来找到进程号;
2.启动gdb调试这个进程,用attach+进程号调试;
3.通过设置断点,来查看注入buf的内存地址
4.改变返回地址并进行注入
3.问题及解决方案
问题一:在kali和本地建立共享文件夹后pwn1传输不过去。
解决方案:在kali上直接通过网站下载pwn1
问题二:kali虚拟机上有时候鼠标光标会消失
解决方案:将系统设置内的显示中的缩放调节到0.9及以下
问题三:刚开始下载exestack软件包的时候下载不成功
解决方案:原因是发现我安装的虚拟机是32位,而网上大部分软件包是64位,所以只需要下载32位的软件包即可。
问题四:kali系统于某些下载的软件冲突,导致桌面显示出现bug,标签栏消失且无法拖动窗口。
解决方案:sudo metacity --replace (如果找 不到这个命令,先安装: Debian下是:apt-get install metacity)
注销,登录,即可
4.学习感悟,思考等
本次实验是第一次做网络攻防实验,实验要求的环境配置等都是一步一步慢慢装上去的,在实验过程中很多次感受到实验到了无解的程度,但当问题解决后发现只是一个小问题,所以,做网络攻防实验需要细心更需要耐心;网络攻防实验是一个验证性实验,并不需要自己创造一些什么,但想要实现实验结果,还是需要我们通读实验指导书,了解实验的整个流程,对实验的一些基本原理和基本知识也要有一定的掌握。通过这次试验中的三个方法,我切实见证了并自己实现了缓冲区攻击。这种方法让我在实验过后受益匪浅,并且让我感受到了这门课程的乐趣。