0x00 基本信息
基本信息
简介
城市分站管理,tp低版本的getshell不看
文件hash
必选项
- 1.0.6:
ad25486c672247f8afbabca646de3a32
- 1.1.6:
68c5483d4bdbdf06cb1c1956d3dc229a
- 2.0.4:
3b9ac883b97d510f03869f7239b332cb
- 2.3.0:
33560b77a3c8812a20c4cc7f3bf6ad7a
文件存储
必选项
- 1.0.6:
https://pan.baidu.com/s/1Z2o7Mge2SBmZiJOCAqnmXg
- 1.1.6:
https://pan.baidu.com/s/14WEl9hd50l7KoX_eXHBziw
- 2.0.4:
https://pan.baidu.com/s/1VQtHM5oMrQBCWIdgZGiinA
- 2.3.0:
https://pan.baidu.com/s/1zDJRrk2QVh0xDSem2w-lrQ
cms指纹
可选项,后期必选
body="index/css/yunu.css"
源码相关
从哪下载,可选项
http://www.yunucms.com/
cms名字
必选项,实际名字或者化名
- 云优城市分站管理系统
关联平台
类似第三方支付平台
0x01 v1.0.6版本整理
比较重要的一个漏洞
cnvd-2018-01952
可以看到的是这里是写配置,并且给了10.0分
代码执行(cnvd-2018-01952)
看了下所有关于文件写入的地方
只存在一处,那就是index/install/ste方法
很简单的代码,但是只是单纯的重装获取shell肯定不是10分
应该还存在一处前台任意文件删除
在一处七牛云的上传组件中
在后续的修复代码中先加入了
1 | $file = str_replace("\\", "/", $file); |
这次修复不完善
后面再次加入了
1 | if (in_array('..', $pathlist)) { |
调用方式如下
1 | /statics/ueditor/php/controller.php?action=remove |
0x02 v1.1.6版本整理
此时比较多的是注入问题和一处文件包含
SQL注入
order by注入
此时的SQL注入,主要是源自orderby参数,此时由于tp的版本问题,orderby参数在底层并未进行处理
比如
- master/api_list
- master/api_link
- master/api_banner
- v1/api_list
- v1/api_link
- v1/api_banner
复现
可以在日志中找到报错
拼接注入
同样的存在一处拼接注入
- api/v1/api_block
复现
1 | /index.php/api/v1/api_block?name=1') and updatexml(1,concat(0x7e,version()),1)%23 |
文件包含
其实在assign方法中存在三个完全可控的,分别是
- index/tag/index
- wap/search/index
- wap/tag/index
但是由于wap模块下的不存在对应的模板,所以无法利用
原因具体如下
利用也很简单,可以利用日志
0x03 v2.0.4 整理
这个版本主要就是两个漏洞文件包含和代码注入
文件包含
- index/index/buildHtml
利用也很渐渐但,可以通过日志,也可以通过上传
这里还是选择用日志的方法
代码注入
这里最下面关于tag标签的地方有提到
直接就代码执行了
0x04 最新版前台审计
最新版已经升级到了5.0.24,主要就是SQL注入了
SQL注入
依然是两个方向,拼接和表达式注入,以及insert中的key可控的问题
在最新版中,api模块下的appv2控制器使用如下方式作为接收参数的方式
这样就可以获取到任意表达式了
以api_banner为例,type参数
1 | POST /index.php?s=/api/appv2/api_banner HTTP/1.1 |
0x05 后台漏洞
后台漏洞基本也就两类,文件上传和文件写入(写配置),auth鉴权的代码执行
文件上传
上传的方法就是后台uploadfile方法,可以支持上传压缩文件
然后结合升级模块的升级
传入的file参数完全可控,可以实现目录穿越
文件写入
这个涉及到的方法比较多
所以在cnvd上被提交了很多这漏洞
admin/diyform/remind
admin/system/interapi
admin/system/listrows
admin/system/upload
admin/system/disablewords
admin/system/copy
admin/system/basic
admin/system/seo
admin/system/qiniu
admin/upgrade/tpluse
admin/url/index
admin/wap/index
index/install/ste
由于默认的过滤方法不存在转义
存在一处setConfigfile的定义
比如admin/upgrade/tpluse方法,就可以直接通过number参数获取webshell
1 | public function tpluse($number = '') |
比如admin/system/basic方法,虽然参数被转义,但是由于是接受的所有post参数,所以key可控
可以通过键值写入webshell
代码执行
同样的类库
0x06 end
关于thinkphp的tag标签问题
之前一直没太去关注过标签里面的问题,主要的关注点
- SQL注入
- XSS问题
- ssti模板解析(代码注入)
在这套cms里面定义了yunu的标签类
共定义了如下标签,以及所需要的参数
代码注入
比如在2.0.8版本的tagConfig方法中,在返回的解析后的代码中就存在完全可控的从uri中取的字符
最重要的是怎么调用呢类是yunu,方法是tagConfig,需要的name的值是pcurl
<yunu:config name='pcurl'>
在2.0.8版本没有找到
但是在1.1.16版本发现了调用
这个可以直接rce
SQL注入
在最新版的taglist标签中调用了getContentlist方法
跟进之后发现一处拼接的问题
目前在之前的某个版本中应该是存在SQL注入的问题的
这里已经被修复了