从文件写入sql语句到getshell
Werqy3 漏洞分析 257浏览 · 2025-03-25 06:45

环境搭建

源码下载地址:https://github.com/rainrocka/xinhu 下载后解压到本地网站根目录下,配置好数据库,然后安装即可
图片加载失败
图片加载失败
默认密码是admin/123456,登录进去得更改一次密码

路由分析

这里用get方式会接收m,d,a,ajaxbool参数

rock->jm->gettoken获取。当ajaxbool为false时,是对xxxAction.php的内容访问,当ajaxbool为true时,是对xxxAjax.php的内容进行访问

a, $d:分别代表php文件名(不含Action)、动作名(action)、目录名(webadmin下的子目录),默认值分别为index,default、空字符串。

举例:index.php?a=deluser&m=imgroup&ajaxbool=true&gid=38&sid=1

$m:user,表示请求的是webadmin下的imgroup 目录。

$a:list,表示请求的方法是 deluser。

ajaxbool:true,表示这是一个 AJAX 请求
图片加载失败


漏洞分析

这里找到webmain/main/flow/flowAction.php文件

createtxt函数是一个文件写入方法

图片加载失败


漏洞点在这

图片加载失败


发现这里调用会写入 php 中

要是我们能控制 $modenum 或是 $rs['name'] 的内容就可以 getshell,不过 $modenum 同时也控制了文件名所以我们只能通过控制 $rs['name'] 来 getshell

跟进一下$rs数组

图片加载失败


这里发现$rs 数组是由 flow_set 数据库获取到的

图片加载失败


如果我们可以控制name,然后把前面和后面注释掉,不就可以写马了吗?

常规思路我们只要寻找有插入 flow_set 表的方法即可

在webmain/main/flowview/flowviewAction.php文件里面的createmodeAction方法就存在

但是xssrepstr方法对特殊字符做了处理 ,所以不行,那我们只能再找找有没有可以执行 SQL 语句且传参会不进行过滤的点



在webmain/system/beifen/beifenAction.php文件下的huifdatanewAjax方法中存在sql查询

在该方法中通过处理传入的 sid,获取 table 名,如果 table 名不在数据库所有表名中时,会获取某个目录下 $sid 名的文件内容作为数组并取得 createsql 的内容进行 sql 语句执行。

那么就是说如果 sid 可控文件内容,同时 sid 不在表内那么我们就能构造修改 flow_set 数据的 sql,而且目录 folder 也是可控的,我们找找有没有方法可以写入文件。

在用上面方法寻找文件写入的方法是我们发现好多文件名都是带了随机数,这不太好控制其位置,所以我们要找一个文件名不带随机数的写入点

这里有webmain/flow/flowopt/flowoptAction.php文件中的savetopdfAjax方法

首先是根据 imgbase64 上传一个 abc.png 文件,其次是一个 pdf 文件,因为默认没这个插件所以实际发包会报错,但不影响 abc.png 上传操作的执行。

于是构造文件内容的 poc 为

第一层数组的键为文件名,为得是符合上面方法中 $dataarr= $data[$tab] 获取到我们后面数组 $tab 其实就是传入的文件名参数。第二层数组就是实际执行的 SQL 语句,其实 id 值是默认数据库中最后一行数据的 id 值。

此方法上传的文件位置为 upload/logs/2025-03/abc.png

漏洞复现

复现流程:

1 savetopdfAjax 上传内容为恶意 sql 语句的图片。

2请求接口触发图片内容中的恶意 SQL 语句

3将更新数据表后带有 payload 的 name 值写入到 php 文件中,成功实现 getshell。

首先上传一个带sql语句的图片

图片加载失败


访问发现上传成功

图片加载失败


新插入一条数据才能生成恶意的 php 文件,我们用之前找到的插入 flow_set 数据的接口进行插入

图片加载失败


通过数据表可以看到成功插入



根据 id 值重新生成 abc.png 的内容,然后进行恶意 sql 更新

图片加载失败


可以看到已经成功修改了数据表中的内容



我们需要触发 php 文件的写入

找到webmain/flow/input/mode_zzf08rneAction.php文件,发现成功写入

图片加载失败


访问即可命令执行

图片加载失败


0 条评论
某人
表情
可输入 255

没有评论