一、ssrf
信息收集了一波,发现home.php这个hint以及admin.php,访问
随后用伪协议读取system.php的源码和
<?php
error_reporting(0);
if (!isset($_COOKIE['y1ng']) || $_COOKIE['y1ng'] !== sha1(md5('y1ng'))){
echo "<script>alert('why you are here!');alert('fxck your scanner');alert('fxck you! get out!');</script>";
header("Refresh:0.1;url=index.php");
die;
}
$str2 = ' Error: url invalid<br>~$ ';
$str3 = ' Error: damn hacker!<br>~$ ';
$str4 = ' Error: request method error<br>~$ ';
?>
<?php
$filter1 = '/^http:\/\/127\.0\.0\.1\//i';
$filter2 = '/.?f.?l.?a.?g.?/i';
if (isset($_POST['q1']) && isset($_POST['q2']) && isset($_POST['q3']) ) {
$url = $_POST['q2'].".y1ng.txt";
$method = $_POST['q3'];
$str1 = "~$ python fuck.py -u \"".$url ."\" -M $method -U y1ng -P admin123123 --neglect-negative --debug --hint=xiangdemei<br>";
echo $str1;
if (!preg_match($filter1, $url) ){
die($str2);
}
if (preg_match($filter2, $url)) {
die($str3);
}
if (!preg_match('/^GET/i', $method) && !preg_match('/^POST/i', $method)) {
die($str4);
}
$detect = @file_get_contents($url, false);
print(sprintf("$url method&content_size:$method%d", $detect));
}
?>
这里有两个点
1、q2参数会拼接.y1ng.txt,当时用的#绕过,发现师傅wp还可以用admin.php?a=
2、q3参数有个sprintf格式化漏洞采用%s%绕过,用了%s%后,会将要输出的内容用%s格式化输出在%s%的位置,而不是用%d格式化输出。
随后打到了admin.php的源码
二、逻辑洞
下面的随机数mt_rand只是生成了长度,后面用的函数无法进行随机数爆破。
这里将phpsessid删除,访问就可以了。删除后访问,$data值将是空,这样就能计算aes加密的值了
带上加密的值,删除phpsessid访问。