在2019 XCTF FINALS,麦香师傅出了一个最新版 weiphp 漏洞挖掘,出题人表示漏洞太多了所以删了一部分代码orz,题目放出来貌似被日穿了orz(要日一个cms最好的办法感觉是放到CTF上)
默认应该是关闭了注册功能,正常情况下我们没有admin的密码是无法登录的。
前台sql注入
在/application/material/controller/Material 下material_lists方法,查询 title 处
1 | $title = I('title'); |
可以看到title没有任何过滤拼接到了sql语句里,这里因为只能影响 count 的值,后面显示的部分调用了模版函数来执行查询,所以考虑时间盲注。
1 | POST /weiphp5.0/public/index.php/Material/Material/material_lists?title=aa%27or%20sleep(5)%23 HTTP/1.1 |
这里必须是 post,get 请求应该是会渲染模版会跳转登录。
发现sleep成功,扔到sqlmap就可以了
不过数据库里admin的密码我们也是解不出来的,因为weiphp使用如下方法入库:
1 | function think_weiphp_md5($str, $key = '') |
当时比赛的时候,开了debug模式,导致 wp_user 表里login_password 字段记录了admin的密码,所以直接能登后台了。。。
免登录文件上传
首页源代码里:
访问upload_dialog_url,发现有可以上传,抓包得到上传包,发现要登录:
定位file控制器upload_picture方法,发现有鉴权:
1 | public function upload_picture() |
看到有个upload_root 方法没有鉴权,直接可以上传:
1 | public function upload_root() { |
这里用php5就可以绕过:
成功上传,文件路径/public/uploads/download/20191030/5db9681e2d701.php5
登录后台文件上传
登录后upload处随便传,同样用php5或者php7就行:
upload_picture处应该有后缀名白名单。
文件包含
出题人预期解是/application/common/controller/base.php
中的common_lists
方法,$templateFile可以通过参数绑定方式控制,用ua头把命令写日志里然后包含日志执行命令。
这个cms洞确实比较多,不登录也能传shell,也能sql注入… admin管理后台估计还有洞。