引言
在前不久结束的 2021 DASCTF July X CBCTF 4th 比赛中,有一道名为 cybercms 的 web 题目。
预期解是从后台登录处进行 SQL 注入写入一句话木马,然而咱在做题的时候尝试了另一种思路,用的是后台登录绕过 & 木马上传的打法。
由于比赛的时候半天打不通就十分难受,赛后还是想不明白就来稍微深入探究了一下,经过曲折最后终于成功打通了。
这篇就来记录一下做这道题时候的心路历程吧……
题目初探
cybercms
赛博CMS,只为安全而生
Hint: 信息搜集是一个web手必备的技能
很好,是 BEESCMS,head 里的 description 没改,正文里其实也没改完。
从官网找到了 官方 V4.0 源码下载
(不过貌似没啥用 后来发现还是有用的
后台登录绕过 & 上传
参考 【代码审计】 beescms 变量覆盖漏洞导致后台登陆绕过分析,$_SESSION 可以被任意覆盖。
POST /
_SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=99999999999
然后直接可以访问后台了。
http://xxxxxxxxxxx/admin/admin.php
参考 代码审计就该这么来3 beescms getshell
按照文中的思路,上传一个后缀为 .php 的一句话木马,并修改 Content-Type: image/png 来通过后端对文件类型的校验。
【网安资料】
然而发现他文件目录没权限上传啊,随便上传一个正常的图片也是如此……
源码泄露
麻了,做到一半才发现有 源码泄露,/www.zip…
diff 大法好啊,看来官方源码还是有用的 2333。
多了个 hackable/ 目录,看起来只有这个目录可写的样子。(虽然最后发现也不行
登录还过滤了一下 SQL 注入。
注意的是还把 /* * 的过滤给去掉了。
上传点源码审计
再来看上传部分的源码。
审了一波源码,发现其实可以 构造目录穿越。
$up_file_name2 由 $pic_alt 而来,这个是可控的,只需要构造个目录穿越到 hackable 目录下就完事了。
【网安资料】
为了进到这里,上传的时候记得再把 Content-Type: image/png 改好, is_alt 设为 1。
然而还是没打通,报错和上面的类似,也是 PHP 执行的时候文件目录没权限,只不过可以注意到文件名是 .php 了。
(咱也不知道为啥他 $pic_alt 没传进来,留空的话也不是随机数,一脸懵逼
另一个上传点审计
于是么得办法,再挖了另一个文件上传的点,考虑通过 修改已上传图片的接口 来进行上传。
相应源码如下。
这里的 $pic_path 和 $pic_name 都是可控的,任意改一个就完事了。当然这是 PHP/5.6.40,%00 截断不可行 2333.
然而还是打不通……
绝绝子,挖了两条上传的路,试着绕到 hackable 目录也打不通……
看来还是文件目录的限制吧。
心态炸了啊啊啊啊啊。
SQL 注入写马(预期解)
害,赛后看了看大佬的 wp,么得办法,还是得走 SQL 注入写入文件呗。(佛了
再来看上面 diff 出来的关于 SQL 注入的语句。
function fl_value($str){
if(empty($str)){
return;}
return preg_replace('/select|insert | update | and | in | on | left | joins | delete |\%|\=|\.\.\/|\.\/|