这里刚入门ctf小白一枚 如果有什么地方说错了或者有待改进的地方欢迎指出喔(-w-)
1.签到题
KEY在哪里?
在网页源码里~fn+F12查看网页源码收获flag一枚
2.签到2
打开题目我们看到题目让给我们输入口令:zhimakaimen
可是输入了之后依然报错呢F12看一下网页源代码
在maxlength处限制了我们输入字符的长度 我们将它改成11
重新输入 “zhimakaimen” 获取flag
3.md5 collision
题目中我们已经给出了源码
$md51 = md5('QNKCDZO');
$a = @$_GET['a'];
$md52 = @md5($a);
if(isset($a)){
if ($a != 'QNKCDZO' && $md51 == $md52) {
echo "nctf{*****************}";
} else {
echo "false!!!";
}}
else{
echo "please input a";}
1.变量md51的值是字符串“QNKCDZO"经MD5加密后的值
2.变量a以get方式传入
3.md52的值是变量a经md5加密后的密文
4.我们又看到第二个if判断:当a不等于’QNKCDZO’但是a加密后的值要和’QNKCDZO’加密后的值一样 我们才能拿到flag
这里就涉及到一个 php弱类型的题目
参考资料:php 弱类型总结
== 在进行比较的时候,会先将字符串类型转化成相同再比较
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行
我们利用在线加密 可以看到字符串经加密是0e开头的(想到科学计数法) 也就是说它在比较的时候会被转换成0
也就是说只要我们令变量a的值是一个经md5加密后的密文是0e开头的就好了(这样的值在上文给出的链接里面有很多)
4.bypass again
题目中已经给出提示 依旧是弱类型的题目
点开就可以看到页面的源码
if (isset($_GET['a']) and isset($_GET['b'])) {
if ($_GET['a'] != $_GET['b'])
if (md5($_GET['a']) == md5($_GET['b']))
die('Flag: '.$flag);
else
print 'Wrong.';
}
解法1:
同3一样,找两个经md5加密后都是0e开头的字符串
解法2:
利用fastcoll生成!
1)新建一个md5.txt文件 写入任意内容
2)在cmd中输入指令:fastcoll_v1.0.0.5.exe -p md5.txt -o md51.txt md52.txt
3)散列值生成中
4)
由于生成的是乱码 我们利用python:
from urllib import parse
result = parse.quote(open('md51.txt','rb').read())
print(result)
result2 = parse.quote(open('md52.txt','rb').read())
print(result2)
5.这题不是web
显然这是一道图片隐写题解法1:利用winhex查看文件被隐藏起来的数据
winhex下载链接
拉到最下面就可以看到我们的flag啦
解法2:直接用记事本打开题目的图片
拉到最下面也能看到flag
6.层层递进
F12查看页面源码 发现可疑路径 SO.html