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

news2024/11/26 14:34:47

目录

[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

[护网杯 2018]easy_tornado 1

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

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

[护网杯 2018]easy_tornado 1

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

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.coloradmin.cn/o/1632157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【哈希】Leetcode 面试题 01.02. 判定是否互为字符重排

题目讲解 面试题 01.02. 判定是否互为字符重排 算法讲解 直观的想法&#xff1a;我们找到一个字符串的全排列&#xff0c;然后对比当前的排列是否等于另一个字符串。如果两个字符串如果互为排列&#xff0c;所以我们知道两个字符串对应的字符出现的个数相同&#xff0c;那么…

Windows 容器镜像踩坑记录

为什么研究windows容器&#xff1f;emm&#xff0c;公司需要&#xff0c;不想多说。 dotnet后端 问题描述&#xff1a; 基于mcr.microsoft.com/dotnet/aspnet:6.0镜像撰写dockerfile编译.net core后端项目后运行容器出现类库不存在问题&#xff1a; 程序中使用了fastreport&a…

编写你的第一个 golang 的应用程序

进行你的第一个golang的程序 当你把程序都安装好以后 环境变量配置 好 vscode 插件下载好以后 1. 创建一个test.go 的文件 //主包&#xff0c;可执行文件所在包 package main//导入包 import "fmt"//主函数&#xff0c;入口函数 func main() { }2.解释 需要导入包 …

Linux PTP学习

前言 本文是对Linux PTP的学习记录&#xff0c;不足之处请指出。Linux PTP用于在Linux系统的精确时钟同步&#xff0c;支持IEEE 1588 Precision Time Protocol&#xff08;PTP&#xff09;标准&#xff0c;目的是实现在网络中&#xff0c;设备之间的高精度时间同步。它是一个工…

Meta分析在生态环境领域里的应用教程

原文链接&#xff1a;Meta分析在生态环境领域里的应用教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247602936&idx4&sn50c2b3141baaa8635905fc405767d6ed&chksmfa82131fcdf59a09b57750e50657b2a06706f3b46806fc7ef5341d16701b99a14d4f7d82d3b9&am…

【算法】搜索插入位置

本题来源---《搜索插入位置》 题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1…

02.Kafka部署安装

1 Linux 安装 Kafka 1.1 安装前的环境准备 由于 Kafka 是用 Scala 语言开发的&#xff0c;运行在 JVM 上&#xff0c;因此在安装Kafka之前需要先安装JDK。 yum install java-1.8.0-openjdk* -y kafka 依赖 zookeeper&#xff0c;所以需要先安装 zookeeper。 wget https://ar…

2024深圳杯(东北三省)数学建模C题完整论文讲解(含完整python代码及所有残骸音爆位置求解结果)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2024深圳杯&#xff08;东北三省数学建模联赛&#xff09;A题多个火箭残骸的准确定位完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊…

Redis哈希槽和一致性哈希

前言 单点的Redis有一定的局限&#xff1a; 单点发生故障&#xff0c;数据丢失&#xff0c;影响整体服务应用自身资源有限&#xff0c;无法承载更多资源分配并发访问&#xff0c;给服务器主机带来压力&#xff0c;性能瓶颈 我们想提升系统的容量、性能和可靠性&#xff0c;就…

HTML 学习笔记

html 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;是一种用于创建网页的标准标记语言。 1.HTML文档的后缀名 (1) .html (2) .htm 这里更推荐使用 ".html "&#xff0c;命名应该遵从含义清…

人脸识别系统架构

目录 1. 系统架构 1.1 采集子系统 1.2 解析子系统 1.3 存储子系统 1.4 比对子系统 1.5 决策子系统 1.6 管理子系统 1.7 应用开放接口 2. 业务流程 2.1 人脸注册 2.2 人脸验证 2.2.1 作用 2.2.2 特点 2.2.3 应用场景 2.3 人脸辨识 2.3.1 作用 2.3.2 特点 2.3.3…

常用算法代码模板 (3) :搜索与图论

AcWing算法基础课笔记与常用算法模板 (3) ——搜索与图论 常用算法代码模板 (1) &#xff1a;基础算法 常用算法代码模板 (2) &#xff1a;数据结构 常用算法代码模板 (3) &#xff1a;搜索与图论 常用算法代码模板 (4) &#xff1a;数学知识 文章目录 0 搜索技巧1 树与图的存…

网络编程——TCP

socket socket类型 流式套接字(SOCK_STREAM) TCP 提供了一个面向连接、可靠的数据传输服务&#xff0c;数据无差错、无重复、无丢失、无失序的发送且按发送顺序接收。内设置流量控制&#xff0c;避免数据流淹没慢的接收方。数据被看作是字节流&#xff0c;无长度限制。 数据报…

学习STM32第二十天

低功耗编程 一、修改主频 STM32F4xx系列主频为168MHz&#xff0c;当板载8MHz晶振时&#xff0c;系统时钟HCLK满足公式 H C L K H S E P L L N P L L M P L L P HCLK \frac{HSE \times PLLN}{PLLM \times PLLP} HCLKPLLMPLLPHSEPLLN​&#xff0c;在文件stm32f4xx.h中可修…

寝室快修|基于SprinBoot+vue的贵工程寝室快修小程序(源码+数据库+文档)

贵工程寝室快修目录 目录 基于SprinBootvue的贵工程寝室快修小程序 一、前言 二、系统设计 三、系统功能设计 1学生信息管理 2 在线报修管理 3公告信息管理 4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&a…

基于SpringBoot+Vue校园竞赛管理系统的设计与实现

项目介绍&#xff1a; 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;竞赛信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行…

Android 学习 鸿蒙HarmonyOS 4.0 第二天(项目结构认识)

项目结构认识 和 了解&#xff1a; 工程目录下的结构如下&#xff1a; 首先能看到有两个.开头的文件&#xff0c;分别是.hvigor 和 .idea。这两个文件夹都是与构建有关系的&#xff0c; 如果你开发过安卓app&#xff0c;构建完会生成一个apk安装包&#xff0c;鸿蒙则是生成hap…

IDEA新版本创建Spring项目只能勾选17和21却无法使用Java8的完美解决方案

想创建一个springboot的项目&#xff0c;使用Spring Initializr创建项目时&#xff0c;发现版本只有17&#xff5e;21&#xff0c;无法选择Java8。 我们知道IDEA页面创建Spring项目&#xff0c;其实是访问spring initializr去创建项目。我们可以通过阿里云国服间接创建Spring项…

MATLAB 运算符

MATLAB 运算符 运算符是一个符号&#xff0c;告诉编译器执行特定的数学或逻辑操作。MATLAB设计为主要在整个矩阵和数组上运行。因此&#xff0c;MATLAB中的运算符既可以处理标量数据&#xff0c;也可以处理非标量数据。MATLAB允许以下类型的基本运算- 算术运算符 关系运算符…

拥抱数字化转型:电子招标系统平台的革新之路

随着信息技术的飞速发展&#xff0c;传统的采购和招标方式正逐渐被数字化解决方案所取代。电子招标系统平台作为这一转型的关键工具&#xff0c;正在全球范围内被越来越多的企业和政府机构所采纳。本文给大家简单介绍下电子招标系统平台的概念、优势以及如何选择一个合适的平台…