伪协议
伪协议常常用于文件包含漏洞之中。在php中能够造成文件包含的函数有include、require、include_once、require_once、highlight_file、show_source、file_get_contents、fopen、file、readfile
bukug 文件包含
点开click me?no
被过滤了,直接构造伪协议, 试了明文读取不行
试一下编码读取
base64解码
bugku 备份是个好习惯
只有一串字符,各种解码解不出来,试一下扫后台 扫出来了这些东西
不知道为什么我没有扫出来/index.php.bak 这个文件,后来直接试了在url
打开后看到
从代码中可以看到,原先输出为空的一串密文,是因为key1和key2没有赋值
$str = str_replace('key','',$str);
这条语句又限制了key的输入,str_replace函数会对key进行过滤,但可以采取双写绕过的形式,即 kkeyey1,kkeyey2
1,md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。
.因为md5()函数加密不能处理数组,则key1和key2的返回值为空,即可获得flag
2,利用==比较漏洞
如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。
下列的字符串的MD5值都是0e开头的:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
?kkeyey1[]=s878926199a&kekeyy2[]=s155964671a
MD5函数绕过
bugku 源代码
提示看源代码,在源代码中看到不认识的函数去查一下
还是解一下p1和p2
var p1 = 'function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b'; var p2 = 'aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").οnsubmit=checkSubmit;
源码中有提示
eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));
%35%34%61%61%32 解码得:54aa2
将 67d709b2b54aa2aa648cf6e87a7114f1 提交到Submit 得到flag