NSS 2025.7 Writeup
1.[SWPUCTF 2021 新生赛]gift_F12、[ LitCTF 2023]我Flag呢?
查看源代码,找flag
2.[SWPUCTF 2021 新生赛]easy_md5
PHP代码基本信息:
- 包含了flag2.php文件
- 判断是否有用户通过GET方法传递了name参数,以及通过POST方法传递了password参数
- 如果没有,就直接输出wrong!。
- 如果有,它就将这两个参数分别赋值给name和password变量,并进行以下判断:
- 如果name和password不相等,并且它们的MD5哈希值相等,就输出flag2.php文件中的内容。
- 这是一个逻辑漏洞,因为MD5哈希函数是不可逆的,但是存在碰撞的可能性,也就是说,不同的输入可能产生相同的输出。所以,如果用户能够找到两个不同的字符串,但是它们的MD5值相同,就可以通过这个判断。
- 否则,就输出wrong!。
关键漏洞点:MD5 弱比较
- PHP 中的
==是弱类型比较,不会严格校验数据类型。当比较两个字符串的 MD5 值时,如果 MD5 值以0e开头,PHP 会将其解释为科学计数法的 0,导致所有以0e开头的 MD5 值在弱比较下都相等。 ===会比较类型,这个时候可以用到PHP中md5()函数无法处理数组(会返回NULL)来实现绕过
方法:
1.0e碰撞:md5('QNKCDZO') 和 md5('240610708') 都以0e开头,尽管原值不同,但0e36276879和0e46209743在弱比较下都被视为 0,因此相等。
2.数组绕过:由于 $name 和 $password 是不同数组(内容不同或结构不同),$name != $password 条件成立。
name[]=1(数组[1])password[]=2(数组[2])
这两个数组值不相等(!= 成立),但它们的 MD5 哈希均为 NULL(== 成立)。
3.[LitCTF 2023]导弹迷踪
fn12查看源代码,子啊game.js里找flag
4.[LitCTF 2023]Follow me and hack me
使用hackbar,按要求该参数
5.[NSSCTF 2022 Spring Recruit]ezgame
查看源代码,在.js文件里找flag
6.[LitCTF 2023]1zjs
1.查看源代码,发现:“/.dist/index.umd.js”
2.bp拦截,找有dist/index.umd.js的响应中,有提示:/f@k3flag.php
3.浏览器访问(在原URL后加/f@k3flag.php),得到一堆jsfuck编码,复制粘贴到控制台,即可出现flag
7.[MoeCTF 2021]Web安全入门指北—小饼干
1.打开链接,提示
,查看源代码,啥也没有
2.bp拦截,提示Cookie
3.重放器,加Cookie:VIP=1,得flag
8.[MoeCTF 2022]ezhtml
查看源代码,在js文件里
9.[MoeCTF 2021]2048
1.bp抓包,根据玩完后提示,分数要查过50000
2.所以将分数改为大于50000的数,例如500000
10.[MoeCTF 2021]Web安全入门指北—GET
1.打开后得到PHP代码,意思是GET参数为moe=flag
2.hackbar加参数,得到flag
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Echoin 的博客!