easytornado
https://www.cnblogs.com/fdxsec/p/17793743.html
打开环境,看到三个页面,挨个访问
flag.txt
提示了flag in /fllllllllllllag
welcome.txt
题目提示了Tornado 框架,tornado render是一个python的渲染函数;也就是一种模板,通过调用的参数不同,生成不同的网页,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式
hints.txt
md5(cookie_secret+md5(filename))
是filename的MD5值加上cookie再进行MD5加密,我们去哪儿找cookie呢
再仔细观察url
http://61.147.171.105:53565/file?filename=/hints.txt&filehash=4cd924b42368b5aa48e112f9a7d67cab
由文件名和文件的hash值可查询对应文件内容,现在我们就差个cookie_secret不知道,去哪儿找呢
查了资料发现可以使用{{handler.settings}}获取服务器的配置文件信息,构造
/file?filename={{handler.settings}}
出现了报错,可能是构造方式不对,但是这儿我们发现,页面返回内容与msg参数内容一样
尝试一下
/error?msg=6
/error?msg={{6*6}}
这儿显示orz,不知道什么意思了,但是发现显示内容不一样了
那我们就可以在这儿构造了
/error?msg={{handler.settings}}
发现了我们需要的cookie
074f6033-44d6-4dc1-acb2-9136564642e0
下一步我们对/fllllllllllllag进行MD5加密得到
3bf9f6cf685a6dd8defadabfb41a03a1
再将cookie与3bf9f6cf685a6dd8defadabfb41a03a1连在一起进行MD5加密
b338d0edfaba29f6f5d12b11083f33d0
然后我们构造得到flag
/file?filename=/fllllllllllllag&filehash=b338d0edfaba29f6f5d12b11083f33d0
知识点
Tornado 框架
1、概念:
Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,被Facebook收购以后框架在2009年9月以开源软件形式开放给大众。
2、特点:
1、作为Web框架,是一个轻量级的Web框架,类似于另一个Python web框架Web.py,其拥有异步非阻塞IO的处理方式。2、作为Web服务器,Tornado有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它Python web应用框架进行对比,结果最大浏览量超过第二名近40%。
3、性能:
1、Tornado有着优异的性能。它试图解决C10k问题,即处理大于或等于一万的并发2、Tornado框架和服务器一起组成一个WSGI的全栈替代品。单独在WSGI容器中也可以使用
3、tornado网络框架或者tornaod http服务器,有一定的局限性,为了最大化的利用
tornado render
tornado render是一个python的渲染函数;也就是一种模板,通过调用的参数不同,生成不同的网页,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式
{{handler.settings}}获取服务器的配置文件信息
ezbypass-cat
华夏ERP漏洞之授权绕过漏洞+后台命令执行漏洞=未授权命令执行 | CN-SEC 中文网
打开环境后是一个登录界面
使用网站目录爆破一下,发现了flag.html,尝试访问一下发现又跳转回了login.html,抓包看一下
发现了302重定向,查看源代码,在js中发现华夏erp
华夏ERP漏洞之授权绕过漏洞+后台命令执行漏洞=未授权命令执行 | CN-SEC 中文网
查看资料发现华夏erp是有漏洞的,即白名单目录穿透
我们接着构造
/login.html/../flag.html
因为会发生重定向,所以我们需要抓包查看
知识点
白名单目录穿透漏洞
白名单目录穿透漏洞指的是攻击者通过特定的技术手段,绕过应用程序的访问控制,直接访问应用程序中未被授权的目录或文件。
所以之前的做题思路就是:观察URL栏:显示login.html,以login开头的登录界面一般是白名单,故思路为:访问白名单目录login.html,然后通过…/回到正常目录下,再访问flag.html即可进入到flag页面。
302跳转
302跳转是用户浏览器或搜索引擎蜘蛛向网站务器发出访问网址A的请求时,服务器返回的头信息中状态码的一种,也称为302重定向,302跳转是暂时的跳转,服务器返回302代码,搜索引擎认为新的网址只是暂时的。
301重定向是永久的重定向,比较常用于场景是使用域名跳转。搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址
重定向
重定向就是原本的网址因为web服务器变化导致原本的网址不能使用,这时可以在搜索引擎中进行配置,设置访问该失效网站时会收到需要跳转到的URL,以此跳转到新的网址,也就是访问网址A跳转到网址B,这就是重定向。
题目名称-文件包含
题目给了提示文件包含
尝试用 php://filter 加 convert.base64-encode 文件读取 flag.php
?filename=php://filter/convert.base64-encode/resource=flag.php
do not hack! ,猜测是黑名单,被过滤了,尝试一下过滤了哪些东西
?filename=base64
?filename=convert
convert没被过滤,到了这一步,感觉可以更换一下过滤器进行绕过
?filename=php://filter/string.rot13/resource=flag.php
尝试了几个常见的过滤器(string.toupper和string.tolower、string.strip_tags)后,发现都被过滤了 ,我们知道convert没被过滤,找一找含有convert的过滤器
convert.iconv.将数据流的内容按照「指定字符编码」来转换,使用格式有两种:
格式一:.分隔
convert.iconv.<input-encoding>.<output-encoding>
格式二:/分隔
convert.iconv.<input-encoding>/<output-encoding>
比如,convert.iconv.utf-8*.utf-16* 的意思就是把文件的字符编码从 utf-8* 转换为 utf-16*
支持的字符编码有:
UCS-4*
UCS-4BE
UCS-4LE*
UCS-2
UCS-2BE
UCS-2LE
UTF-32*
UTF-32BE*
UTF-32LE*
UTF-16*
UTF-16BE*
UTF-16LE*
UTF-7
UTF7-IMAP
UTF-8*
ASCII*
EUC-JP*
SJIS*
eucJP-win*
SJIS-win*
ISO-2022-JP
ISO-2022-JP-MS
CP932
CP51932
SJIS-mac (alias: MacJapanese)
SJIS-Mobile#DOCOMO (alias: SJIS-DOCOMO)
SJIS-Mobile#KDDI (alias: SJIS-KDDI)
SJIS-Mobile#SOFTBANK (alias: SJIS-SOFTBANK)
UTF-8-Mobile#DOCOMO (alias: UTF-8-DOCOMO)
UTF-8-Mobile#KDDI-A
UTF-8-Mobile#KDDI-B (alias: UTF-8-KDDI)
UTF-8-Mobile#SOFTBANK (alias: UTF-8-SOFTBANK)
ISO-2022-JP-MOBILE#KDDI (alias: ISO-2022-JP-KDDI)
JIS
JIS-ms
CP50220
CP50220raw
CP50221
CP50222
ISO-8859-1*
ISO-8859-2*
ISO-8859-3*
ISO-8859-4*
ISO-8859-5*
ISO-8859-6*
ISO-8859-7*
ISO-8859-8*
ISO-8859-9*
ISO-8859-10*
ISO-8859-13*
ISO-8859-14*
ISO-8859-15*
ISO-8859-16*
byte2be
byte2le
byte4be
byte4le
BASE64
HTML-ENTITIES (alias: HTML)
7bit
8bit
EUC-CN*
CP936
GB18030
HZ
EUC-TW*
CP950
BIG-5*
EUC-KR*
UHC (alias: CP949)
ISO-2022-KR
Windows-1251 (alias: CP1251)
Windows-1252 (alias: CP1252)
CP866 (alias: IBM866)
KOI8-R*
KOI8-U*
ArmSCII-8 (alias: ArmSCII8)
convert.iconv是转换数据的字符集,也就是说只转换数据的表现形式,我们拿到数据之后,再把它的字符集转回来就行
我们尝试构造
/?filename=php://filter/convert.iconv.utf8.utf16/resource=flag.php
发现还是不行,我们尝试其他字符集,直接抓包去爆破,看哪个字符集能够使用
使用集束炸弹进行爆破,把上面所有的 16 个字符集格式做一个笛卡尔积,生成 256(16 *16)个请求。得到
构造得到flag
/?filename=php://filter/convert.iconv.UTF-7.UCS-4*/resource=flag.php
知识点
文件包含
文件包含漏洞也是一种注入型漏洞,与SQL注入等攻击方式一样,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。
例如:通过PHP函数引入文件时,传入的文件名没有经过合理的验证,从而操作了预想之外的文件,就可能导致意外的文件泄漏甚至恶意代码注入。
条件
allow_url_fopen=On(默认为On) 规定是否允许从远程服务器或者网站检索数据
allow_url_include=On(php5.2之后默认为Off) 规定是否允许include/require远程文件
常见过滤器
1、convert.base64-encode
对数据流进行ba64编码,相当于base64_encode()函数,输出后再进行base64解码,就可以得到我们想要的内容
2、string.rot13
PHP4.3.0及以后版本,对数据流的内容进行rot13编码,等于用str_rot13()函数编码
3、string.toupper和string.tolower
string.toupper,PHP5.0.0及以后版本,将数据流转换成大写,类似于strupper() 函数。
string.tolowerHP5.0.0及以后版本,将数据流转换成小写,类似strtolower() 函数。
4、string.strip_tags
string.strip_tags用来处理掉读入的所有标签,例如XML的等等。在绕过死亡exit大有用处。