看了suanve师傅的文章,找时间跟了一波phpok6.0
这个CMS主要的逻辑都在framework下
admin文件夹下都是和管理员相关的,通过入口文件admin.php文件访问,api则通过入口文件api.php
传入参数c
代表控制器,也就是带有_control
后缀的
传入参数f
代表方法,也就是带有_f
后缀的函数。
访问admin
下index_control.php
中的pendding_f
方法的路由如下
http://127.0.0.1/admin.php?c=index&f=pendding
下面说说具体的漏洞
前台反序列化
问题函数在admin
下login_control.php
中的update_f
方法
关键语句在318
行的decode操作(framework/libs/token.php),$quickcode
是一个base64
格式的加密字符串
解密的密钥则是317
行,可被我们控制。
$quickcode
解密后,直接进行了反序列化操作。
接下来则是寻找可利用的类,是5.3/5.4版本反序列化使用的cache
类,利用php伪协议破坏死亡exit()
EXP
1 |
|
前台任意文件上传
update_f
函数,调用了token的decode
函数,decode解密后,把id
的值直接拼接到SQL语句中,并将SQL执行到结果写入到php后缀的文件。 文件路径可控,文件内容可控,可以写shell
1 |
|
后台任意命令执行
update_control.php
中的unzip
方法调用的update_load
会include
update/run.php
EXP
本地新建run.php
并压缩成zip 上传
比较可惜没有找到任意文件读取的点,不然可以配合日志文件泄漏,登录后台形成完整的攻击链
安装后的log文件会记录管理员的密码hash,这个直接用hash来登录
传入32位的密码,直接比较hash
Cookie反序列化
这是一个尴尬的反序列化,cookie.php
存在反序列化,但是没有调用这个类。。。
传入 $name
解密后,传入_unpack
。
Test.php
1 |
|
成功反序列化