[ACTF2020 新生赛]BackupFile 1 [极客大挑战 2019]BuyFlag 1 [护网杯 2018]easy_tornado 1

ops/2024/9/25 5:53:33/

目录

[ACTF2020 新生赛]BackupFile 1

1.打开页面,叫我们去找源文件

2.想到用disearch扫描,发现源文件index.php.bak

3.访问这个文件,下载一个文件,用记事本打开

4.翻译php代码

5.构造payload url+/?key=123,得到flag

[极客大挑战 2019]BuyFlag 1

1.进入PAYFLAG,提示我们如果想要买到flag,你必须是一个来自CUIT的学生而且你必须答出正确的密码

2.先查看源代码,发现一串代码,翻译这串代码。 

3.看到指定的名字,会不由的想到用抓包,来修改cookie,将user的0改为1,对名字进行了绕过,然后它提示要输入password

4.输入password,并对is_numeric()函数进行绕过,绕过成功之后,需要支付买flag的钱

5.输入所需的钱,提示说长度太长,想到strcmp()函数漏洞

6.绕过所有函数之后,得到flag

tornado%201-toc" style="margin-left:0px;">[护网杯 2018]easy_tornado 1

1.通过观察三个文件的内容

tornado%E9%87%8C%E7%9A%84%E5%87%BD%E6%95%B0%EF%BC%8C%E5%8F%AF%E4%BB%A5%E7%94%9F%E6%88%90html%E6%A8%A1%E6%9D%BF%E3%80%82%E6%98%AF%E4%B8%80%E4%B8%AA%E6%B8%B2%E6%9F%93%E5%87%BD%E6%95%B0%20%EF%BC%8C%E5%B0%B1%E6%98%AF%E4%B8%80%E4%B8%AA%E5%85%AC%E5%BC%8F%EF%BC%8C%E8%83%BD%E8%BE%93%E5%87%BA%E5%89%8D%E7%AB%AF%E9%A1%B5%E9%9D%A2%E7%9A%84%E5%85%AC%E5%BC%8F%E3%80%82-toc" style="margin-left:80px;">2.cookie_secret在welcome.txt中有提示

3.进行初次尝试,构造payload:url+/file?filename=/fllllllllllllag&filehash={{1}}。

 4.构造payload:error?msg={{handler.settings}},找到cookie_secret​

5.用python脚本跑一下,得到flag


[ACTF2020 新生赛]BackupFile 1

信息搜集常见的后缀名:

“.git”、“.svn”、“ .swp”、 “.~”、“.bak”、“.bash_history”、“.bkf”

1.打开页面,叫我们去找源文件

2.想到用disearch扫描,发现源文件index.php.bak

3.访问这个文件,下载一个文件,用记事本打开

4.翻译php代码,并在网站进行操作,对代码翻译后,大致操作就是传一个"key",它必须是数字而且是整数,如果它等于定义的字符串$str,就会输出flag

翻译代码为:
<?php
include_once "flag.php"; //这一行使用 include_once 函数来包含(或插入)另一个 PHP 文件 "flag.php" 的内容。include_once 确保文件只被包含一次,即使它在多个地方被调用。这意味着 "flag.php" 文件中定义的任何变量或函数都将在当前文件中可用。if(isset($_GET['key']))  //这一行检查 GET 请求中是否存在名为 'key' 的参数。$_GET 是一个 PHP 超全局变量,用于收集表单数据(HTML 表单)在 URL(地址栏)中发送的变量。isset() 函数检查变量是否设置且不为 NULL。
{$key = $_GET['key'];  //如果 'key' 参数存在,这行代码将其值赋给 $key 变量。if(!is_numeric($key)) {exit("Just num!");  //这两行代码检查 $key 是否为数字。如果不是数字,is_numeric() 函 数返回 false,然后 exit("Just num!") 将终止脚本执行并输出 "Just num!"。}$key = intval($key);   //这行代码使用 intval() 函数将 $key 转换为整数。如果 $key 是数字 或数字字符串,intval() 将返回该数字的整数形式。$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";  //这行代码定义了一个字符串 $str,它包含数字和字符的组合。if($key == $str) {echo $flag;  //这两行代码检查 $key 是否等于 $str。如果相等,它将输出 $flag 的值。由 于 $str 是一个包含非数字字符的字符串,这意味着只有在 $key 也是一个包含 相同字符的字符串时,这个条件才会为真。}
}
else 
{echo "Try to find out source file!";   //如果 GET 请求中没有 'key' 参数,这个 else 块将 执行,输出 "Try to find out source file!"。
}

5.构造payload url+/?key=123,得到flag

[极客大挑战 2019]BuyFlag 1

1.进入PAYFLAG,提示我们如果想要买到flag,你必须是一个来自CUIT的学生而且你必须答出正确的密码

2.先查看源代码,发现一串代码,翻译这串代码。 

is_numeric() 函数用于检测变量是否为数字或数字字符串。

大致可翻译为检查你是否用post传了一个‘password’的参数,并将把它赋值给变量$password,传参之后,看password是否是数字,若是数字,则输出"password can't be number",elseif它检查$password是否严格等于数字404,若等于404,就输出“Password Right!” 

3.看到指定的名字,会不由的想到用抓包,来修改cookie,将user的0改为1,对名字进行了绕过,然后它提示要输入password

注意:抓包是抓hackbar,post传参之后的包,不然没有回显的结果

4.输入password,并对is_numeric()函数进行绕过,绕过成功之后,需要支付买flag的钱

is_numberic()函数漏洞:is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。

5.输入所需的钱,提示说长度太长,想到strcmp()函数漏洞

strcmp(str1,str2)函数,当str1>str2返回值大于0,否则返回值小于0,等于则返回值为0。由于strcmp()函数传入参数为字符串,如果传入其他类型的变量会报错但是此时返回值为0,所以我们一般传入一个数组进行绕过。

6.绕过所有函数之后,得到flag

tornado%201">[护网杯 2018]easy_tornado 1

1.通过观察三个文件的内容,可以得到三个页面都有filename和filehash这两个参数,flag在ffllllllllllllag中,推测这里flag应该是在filename=/ffllllllllllllag&filehash=md5(cookie_secret+md5(filename))中

tornado%E9%87%8C%E7%9A%84%E5%87%BD%E6%95%B0%EF%BC%8C%E5%8F%AF%E4%BB%A5%E7%94%9F%E6%88%90html%E6%A8%A1%E6%9D%BF%E3%80%82%E6%98%AF%E4%B8%80%E4%B8%AA%E6%B8%B2%E6%9F%93%E5%87%BD%E6%95%B0%20%EF%BC%8C%E5%B0%B1%E6%98%AF%E4%B8%80%E4%B8%AA%E5%85%AC%E5%BC%8F%EF%BC%8C%E8%83%BD%E8%BE%93%E5%87%BA%E5%89%8D%E7%AB%AF%E9%A1%B5%E9%9D%A2%E7%9A%84%E5%85%AC%E5%BC%8F%E3%80%82" style="background-color:transparent;">2.cookie_secret在welcome.txt中有提示,render()函数进行服务器端渲染,render()是tornado里的函数,可以生成html模板。是一个渲染函数 ,就是一个公式,能输出前端页面的公式。

扩展: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 django,php的smarty twig,java的jade
velocity。当这些框架对运用渲染函数生成html的时候会出现SSTI的问题

参考:SSTI完全学习-CSDN博客

对render()函数的介绍:

参考:【前端基础知识】最基础的render渲染函数知识,一看就会_前端render-CSDN博客

render 函数模板(template) 都是用来创建 html 模板的,Vue 推荐在绝大多数情况下使用模板(template)来创建你的 HTML。然而在一些场景中,你真的需要 JavaScript 的完全编程的能力。这时你可以用渲染函数,它比模板更接近编译器。

函数template与render函数的对比: 

3.进行初次尝试,构造payload:url+/file?filename=/fllllllllllllag&filehash={{1}},由welcome.txt的render也能得知,render是python的一个渲染函数,服务端在响应 http 请求的时候,去向模板中渲染数据,可以把视图响应给客户端,验证了SSTI的猜测。

模板注入必须通过传输型如{{xxx}}的执行命令。探测方式很简单,给一个参数赋值{{22*22}}返回484则必然存在模板注入。但是当我们输入error?msg={{1}}就可以得到回显,说明此处是存在SSTI注入漏洞的。

tornado的相关资料: 

tornado.web — RequestHandler 和 Application 类 — Tornado 4.3 文档

 4.构造payload:error?msg={{handler.settings}},找到cookie_secret

查找tornado,发现cookie_secret保存在settings里,handler是别名,指向RequestHandler而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了。

 5.用python脚本跑一下,得到flag


http://www.ppmy.cn/ops/31032.html

相关文章

数据结构:最小生成树(Prim算法和Kruskal算法)、图的最短路径(Dijkstra算法和Bellman-Ford算法)

什么是最小生成树&#xff1f;Prim算法和Kruskal算法是如何找到最小生成树的&#xff1f; 最小生成树是指在一个连通图中&#xff0c;通过连接所有节点并使得总权重最小的子图。 Prim算法和Kruskal算法是两种常用的算法&#xff0c;用于寻找最小生成树。 Prim算法的步骤如下&…

【大语言模型LLM】-基于ChatGPT搭建客服助手(1)

&#x1f525;博客主页&#xff1a;西瓜WiFi &#x1f3a5;系列专栏&#xff1a;《大语言模型》 很多非常有趣的模型&#xff0c;值得收藏&#xff0c;满足大家的收集癖&#xff01; 如果觉得有用&#xff0c;请三连&#x1f44d;⭐❤️&#xff0c;谢谢&#xff01; 长期不…

✔ ★Java项目——设计一个消息队列(五)【虚拟主机设计】

虚拟主机设计 创建 VirtualHost实现构造⽅法和 getter创建交换机删除交换机创建队列删除队列创建绑定删除绑定发布消息 ★路由规则1) 实现 route ⽅法2) 实现 checkRoutingKeyValid3) 实现 checkBindingKeyValid4) 实现 routeTopic5) 匹配规则测试⽤例6) 测试 Router 订阅消息1…

238 基于matlab的水平轰炸弹道的求解

基于matlab的水平轰炸弹道的求解&#xff0c;列出轰炸弹道方程组并利用龙格库塔法解算弹道方程。设计中包含了二维弹道与三维弹道的计算&#xff0c;并都绘制了弹道运动轨迹&#xff0c;最终还将整个题目集中在一个图形用户界面&#xff08;GUI&#xff09;上。程序已调通&…

深入浅出学习Pytorch—Pytorch简介与2024年最新安装(GPU)

深入浅出学习Pytorch—Pytorch简介 学习原因&#xff1a;Pytorch日益增长的发展速度与深度学习时代的迫切需要 Pytorch模型训练 pytorch实现模型训练包括以下的几个方面&#xff08;学习路线&#xff09; 数据&#xff1a;数据预处理与数据增强模型&#xff1a;如何构建模型模…

在HTML中使用JavaScript实时显示当前日期和时间(结尾完整例程)

在Web开发中&#xff0c;经常需要在网页上显示当前的日期和时间。HTML本身并不具备这样的动态功能&#xff0c;但我们可以借助JavaScript来实现。JavaScript是一种常用的前端脚本语言&#xff0c;它可以轻松地获取系统时间&#xff0c;并将其插入到HTML元素中。 下面是一个简单…

【云原生】Docker 实践(五):搭建私有镜像 Harbor

【Docker 实践】系列共包含以下几篇文章&#xff1a; Docker 实践&#xff08;一&#xff09;&#xff1a;在 Docker 中部署第一个应用Docker 实践&#xff08;二&#xff09;&#xff1a;什么是 Docker 的镜像Docker 实践&#xff08;三&#xff09;&#xff1a;使用 Dockerf…

jenkins 部署springboot 项目

文章目录 持续集成指定tag发布 基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成 基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署 持续集成 为了让程序代码可以自动推送到测试环境基于Docker服务运行…