seacmsv11.5代码审计
三月 25, 2022
seacmsv11.5后台任意文件写入
admin/admin_config.php
在140行有文件写入的地方,查看这两个参数是否可控:
$configfile参数为PHP文件:
$configstr参数由post参数得来,
1 | else |
参数可控,可写入,导致代码执行。
因此当我们构造传入post数据,变量名是以edit__开头,在值中传入我们构造的恶意代码,即可触发代码执行。
再往上看:
需要满足这个if语句中的条件,代码才能往下执行。
因此构造传入:
1 | edit___cfg_df_style=1&edit___cfg_df_html=1&edit___cfg_ads_dir=1&edit___cfg_upload_dir=1&edit___cfg_backup_dir=1 |
任意构造发现是可以写入的:
构造闭合:
1 | POST /uam7rw/admin_config.php/?dopost=save |
访问data/config.cache.inc.php,触发代码:
uam7rw/admin_files.php—任意文件删除
当$action为del时,发现一个unlink函数,追溯$filedir看看参数是否可控:
1 | if(substr(strtolower($filedir),0,$dirlen)!=$dirTemplate) |
$dirTemplate:
但是这里可以尝试使用../进行路径穿越,因此可以造成任意文件的读取和删除:
路径穿越:
利用路径穿越造成文件的删除:
uam7rw/admin_files.php
include文件包含,通过前面的路径穿越可以修改文件,修改admin下的/templets/admin_files.htm文件:
达到命令执行:
在admin_notify.php等文件中存在多处文件写入的地方,都是参数未进行过滤,构造闭合写入即可。
admin/admin_safe.php—任意文件读取
$file参数不存在过滤,可以使用前面的路径穿越进行任意文件的读取,通过file_get_contents函数进行读取:
1 | payload: |
200状态码执行成功。
查看评论