✍内容

部署

ruoyi-wechat-mp下载

1
git clone https://gitee.com/zhangjqi2015/ruoyi-wechat-mp.git

ruoyi官网文档
https://doc.ruoyi.vip/ruoyi/document/hjbs.html#%E9%83%A8%E7%BD%B2%E7%B3%BB%E7%BB%9F

安装参考文档
https://blog.csdn.net/m0_67376124/article/details/127617498

修改数据库的连接配置

打开ruoyi-wechat-mp/ruoyi-admin/src/main/resources/application-druid.yml

1
2
3
4
5
6
7
j# 主库数据源  
master:
url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root

其中ry是我的数据库名

执行sql文件

我是用navicat新建了一个数据库,然后执行sql命令

1
将ruoyi-wechat-mp\sql中的所有sql文件执行即可

下载redis

https://github.com/tporadowski/redis/releases

下载便携版就行了

启动前端

1
2
3
4
打开ruoyi-wechat-mp/ruoyi-ui文件夹,在这里使用cmd命令

npm install

然后启动环境

1
npm run dev

这里遇到了一个问题

Error: error:0308010C:digital envelope routines::unsupported

bug解决

报错原因:
        主要是因为 nodeJs V17 版本发布了 OpenSSL3.0 对算法和秘钥大小增加了更为严格的限制,nodeJs v17 之前版本没影响,但 V17 和之后版本会出现这个错误。 我的node版本是v20+

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
在项目中 package.json 的 scripts 中新增 SET NODE_OPTIONS=--openssl-legacy-provider

添加前:

"scripts": {
"dev": "vue-cli-service serve",

"build:prod": "vue-cli-service build"

},
添加后:

"scripts": {
"dev": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",

"build:prod": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build"

},

参考:https://blog.csdn.net/scholar_man/article/details/134491200

测试环境

启动redis-server

启动mysql

启动后端
idea中直接运行就好了

启动前端
npm run dev

Ruoyi框架大致成功了

代码审计

线上实践项目地址:https://pazy.uzz.edu.cn/

使用CodeQL进行分析

  • 生成数据库
1
codeql database create D:/tools/CodeQL/databases/codeql_ruoyi-wechat-mp --language="java" --command="mvn clean install --file pom.xml" --source-root=D:\JavaProgram\ruoyi-wechat-mp\
  • 使用命令行运行扫描
    1
    2

    codeql database analyze D:\tools\CodeQL\databases\codeql_ruoyi-wechat-mp D:/tools/CodeQL/ql/java/ql/src/codeql-suites/java-security-extended.qls --format=csv --output=java-results.csv

或者是使用vscode查看

  • 导入数据库

  • 运行指定的文件或者文件夹

上传的文件地址
https://pazy.uzz.edu.cn/api/profile/avatar/2024/10/18/image/1729264045573.jpeg
小程序地址
https://pazy.uzz.edu.cn/visitorh5/#/pages/login

其中一个数据包的地址

1
2
3
4
5
6
7
8
9
10
11
12
GET /api/order/visitInfo/getVisitList?pageSize=1&pageNum=50 HTTP/1.1
Host: pazy.uzz.edu.cn
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImNlYTc2MWIzLTk4NjUtNDBhOS05NmI0LTU5OTZkZTZiNzQ4MCJ9.L79PKW0MDpzUzcOyOohEDCsLj3jQov2sCtl1CrnJsGRIE675O30qI1Mt0mxIMmoIGKW688LDKqxUA83zjWxYaQ
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090c11) XWEB/11437 Flue
Accept: */*
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://pazy.uzz.edu.cn/visitorh5/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive

文件上传地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
POST /api/order/visitUserInfo/file HTTP/1.1
Host: pazy.uzz.edu.cn
Content-Length: 4684
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImNlYTc2MWIzLTk4NjUtNDBhOS05NmI0LTU5OTZkZTZiNzQ4MCJ9.L79PKW0MDpzUzcOyOohEDCsLj3jQov2sCtl1CrnJsGRIE675O30qI1Mt0mxIMmoIGKW688LDKqxUA83zjWxYaQ
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090c11) XWEB/11437 Flue
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAe90lmWqn7uL2D4E
Accept: */*
Origin: https://pazy.uzz.edu.cn
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://pazy.uzz.edu.cn/visitorh5/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive

------WebKitFormBoundaryAe90lmWqn7uL2D4E
Content-Disposition: form-data; name="file"; filename="1729264045573.jpg"
Content-Type: image/jpeg

����

https://210.44.232.92/static/js/app.393c65f7.js
这个目录泄露了公私钥的地址

1
2
publickey:"MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\nnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=="
privatekey="MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\nPuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\nkM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\ncSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\nDQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\nYhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\nUP8iWi1Qw0Y="

最后发现登陆后存在sql注入漏洞,但是奈何没有用户账号,所以没有办法验证