PHP SSTI(Twig)
学习文章
进入环境,左上角有flag,hint
都检查看看
![](https://img-blog.csdnimg.cn/00351872c1734b51906e606d150f7862.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)
flag页面显示ip,hint页面源代码有提示
![](https://img-blog.csdnimg.cn/325d854eeb0544e980cd56e24400dc14.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_12,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/da53290cdb3e449fad19584a0b17ea76.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_12,color_FFFFFF,t_70,g_se,x_16)
考虑XFF头或者referer头
![](https://img-blog.csdnimg.cn/52be60ab8b13480b820dd66243cb1761.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)
测试一下
![](https://img-blog.csdnimg.cn/d1b88020543e4585849efd2ac81d52fc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)
注:这里不用加上“;”
![](https://img-blog.csdnimg.cn/1e00d2c752e4454bb1ea1be45b7b056d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)
出来了
![](https://img-blog.csdnimg.cn/6fb7cd62ea9c48ec9738e9722a0cb0ae.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)
python flask ssti
学习文章
原理:因为对输入的字符串控制不足,把输入的字符串当成命令执行。
漏洞产生主要原因:render_template渲染函数的问题
渲染函数在渲染的时候,往往对用户输入的变量不做渲染,
即:{undefined{}}在Jinja2中作为变量包裹标识符,Jinja2在渲染的时候会把{undefined{}}包裹的内容当做变量解析替换。比如{undefined{1+1}}会被解析成2。因此才有了现在的模板注入漏洞。往往变量我们使用{undefined{这里是内容}}
真因为{undefined{}}包裹的东西会被解析,因此我们就可以实现类似于SQL注入的漏洞
像文件包含,有一个include函数,sql注入,似乎都有些共同点,都是利用某个函数或者其他的东西,执行恶意的命令
因为我们需要执行一些命令,例如,file、read、open、ls等等
就需要去调用这些函数
这就需要用到这个魔术对象
__class__ :返回类型所属的对象
__mro__ :返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
__base__ "返回该对象所继承的基类
// __base__和__mro__都是用来寻找基类的
__subclasses__ 获取当前类的所有子类
__init__ 类的初始化方法
__globals__ 对包含(保存)函数全局变量的字典的引用
通过魔术对象调用我们需要的函数,例如
>>> [].__class__.__base__.__subclasses__()[2]
<class 'weakcallableproxy'>
>>> [].__class__.__base__.__subclasses__()[3]
<class 'weakproxy'>
>>> [].__class__.__base__.__subclasses__()[40]
<class 'wrapper_descriptor'>
Bugku Simple_SSTI_1
进入环境
![](https://img-blog.csdnimg.cn/d65ee5b6450f4608b2bbc14ea97d744d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_10,color_FFFFFF,t_70,g_se,x_16)
查看源代码
![](https://img-blog.csdnimg.cn/cb38f627c2f341068e5bdf039ae5196c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)
意思是我们需要传一个flag变量,并且提示我们有个secret_key
![](https://img-blog.csdnimg.cn/088fcfcefe854ac8be92e845113e5933.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_18,color_FFFFFF,t_70,g_se,x_16)
测试下有没有ssti
![](https://img-blog.csdnimg.cn/bc2b5cfdc55742e9b749a792b0077905.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_19,color_FFFFFF,t_70,g_se,x_16)
有的,我们去看看sectet_key
![](https://img-blog.csdnimg.cn/5184aca53cdb4254bf135f94b97ab7f0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)
这里是需要大写的
![](https://img-blog.csdnimg.cn/71e6f17eb9b945fcbe7837d9171e2306.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)
Bugku Simple_SSTI_2
进入环境
![](https://img-blog.csdnimg.cn/39f30ffc61ec4e6888789d38e990585a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_16,color_FFFFFF,t_70,g_se,x_16)
源代码并没有提示,只是让我们传一个pass变量
![](https://img-blog.csdnimg.cn/5bdcdf6c14f84941aa44fcf2731513af.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_19,color_FFFFFF,t_70,g_se,x_16)
这里证明有ssti那就看看目录
![](https://img-blog.csdnimg.cn/2b777b95fff34b849e2cbcd1187e409a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)
一个一个看下,先看app
![](https://img-blog.csdnimg.cn/8c10b4f089e046cca121a317d682a5c4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)
有flag目录
![](https://img-blog.csdnimg.cn/ba76ca8698f74e58bd26cb3b3cd692b0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)
Bugku Flask_FileUpload
进入环境
![](https://img-blog.csdnimg.cn/82c4fd20d2934485a1c32a3cb2666d9c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_11,color_FFFFFF,t_70,g_se,x_16)
源代码里有提示
![](https://img-blog.csdnimg.cn/f9bcdc3232904a2ab9dd225dface1ac0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)
上传文件,会用Python执行文件返回结果
先随便上传个文件试试
![](https://img-blog.csdnimg.cn/6702f046af5f44ef8630a3f77fdfe8a0.png)
发现只能上传jpg或者Png
![](https://img-blog.csdnimg.cn/7690fbe27f474f30b36deb76123f2860.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)
那就改下后缀继续上传
![](https://img-blog.csdnimg.cn/2fd1f1965dc14956b6bf899682adf064.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_15,color_FFFFFF,t_70,g_se,x_16)
会在源代码里返回执行的结果,那么可以试试命令执行
![](https://img-blog.csdnimg.cn/b3da6563341448bf99c08d6e61450bd0.png)
![](https://img-blog.csdnimg.cn/5c396a0a360e4dc9b1401ff08281edcf.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_10,color_FFFFFF,t_70,g_se,x_16)
抓flag
![](https://img-blog.csdnimg.cn/c5397f2ba22e4c3c91570e1619826710.png)
![](https://img-blog.csdnimg.cn/125fb7a4ae8248c680db47a15ef3cca9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95aGU5rKz5Yay5rWq5omL,size_20,color_FFFFFF,t_70,g_se,x_16)