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

目录

[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.mfbz.cn/a/582865.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《与 Apollo 共创生态:我和 Apollo 7周年大会的心路历程》

目录 前言7周年大会开放协同写在最后 前言 Apollo开放平台的企业生态计划是一个激动人心的举措&#xff0c;它展现了Apollo团队长期以来的努力和成就。通过与全球开发者和合作伙伴的紧密合作&#xff0c;Apollo开放平台已经成为一个创新和技术交流的重要平台。企业生态计划的推…

LeetCode 104.二叉树的最大深度

题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,null,…

优化大型语言模型交互:提升查询和提示效果的26条原则

推荐下arxiv挂的一个提示词教程&#xff1a; https://github.com/VILA-Lab/ATLAS https://arxiv.org/abs/2312.16171 它提出了一套26条指导原则&#xff0c;改善和优化与大型语言模型&#xff08;LLMs&#xff09;的交互过程。通过这些原则&#xff0c;旨在简化对LLMs的查询和…

【软考高项】二十八、进度管理基础内容

一、管理基础 小型项目中&#xff0c;定义活动、排列活动顺序、估算活动持续时间及制定进度模型形成进度计划等过程的联系非常密切&#xff0c;可以视为一个过程&#xff0c;可以由一个人在较短时间内完成管理新实践 具有未完成项的迭代型进度计划:适应型生命周期的滚动式…

信息系统管理

目录 一、信息系统管理范围 1、规划和组织 2、设计和实施 ①、信息系统架构 Ⅰ、集中式架构 Ⅱ、分布式架构 Ⅲ、SOA&#xff08;面向服务的系统架构&#xff09; 3、运维和服务 ①、运行管理和控制 ②、IT服务管理 ③、运行与监控 Ⅰ、运行监控 Ⅱ、安全监控 4、…

Docker本地部署overleaf后,挖掘用户加密逻辑

overleaf的用户信息&#xff0c;保存在mongo数据库的users集合中。 用户密码则存在hashedPassword字段中 从开源的代码services\web\app\src\Features\Authentication\AuthenticationManager.js第303行可以找到密码加密逻辑。 本地可以通过下面的代码生成overleaf用户密码信息…

JAVA实现easyExcel批量导入

注解类型描述ExcelProperty导入指定当前字段对应excel中的那一列。可以根据名字或者Index去匹配。当然也可以不写&#xff0c;默认第一个字段就是index0&#xff0c;以此类推。千万注意&#xff0c;要么全部不写&#xff0c;要么全部用index&#xff0c;要么全部用名字去匹配。…

投资蓄能之际,九安医疗如何进一步稳固主业“压舱石”?

体外诊断行业的消费环境变化&#xff0c;正从相关企业的发展中体现。 据梳理&#xff0c;随着疫情检测需求回落&#xff0c;2023年以来&#xff0c;菲鹏生物、雅睿生物、中翰生物等体外诊断公司&#xff0c;陆续主动撤回上市申请。 而已上市公司也正处于周期性调整阶段。4月2…

MobileNetV4 论文学习

论文地址&#xff1a;https://arxiv.org/abs/2404.10518 代码地址&#xff1a;https://github.com/tensorflow/models/blob/master/official/vision/modeling/backbones/mobilenet.py 解决了什么问题&#xff1f; 边端设备的高效神经网络不仅能带来实时交互的体验&#xff0c…

(学习日记)2024.05.10:UCOSIII第六十四节:常用的结构体(os.h文件)第三部分

之前的章节都是针对某个或某些知识点进行的专项讲解&#xff0c;重点在功能和代码解释。 回到最初开始学μC/OS-III系统时&#xff0c;当时就定下了一个目标&#xff0c;不仅要读懂&#xff0c;还要读透&#xff0c;改造成更适合中国宝宝体质的使用方式。在学完野火的教程后&a…

设计模式——保护性暂停

同步模式之保护性暂停 文章目录 同步模式之保护性暂停定义实现应用带超时版 GuardedObject扩展——原理之join扩展——多任务版 GuardedObject 定义 即 Guarded Suspension&#xff0c;用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程&…

【逆向百例】百度翻译js逆向

关注它&#xff0c;不迷路。 本文章中所有内容仅供学习交流&#xff0c;不可用于任何商业用途和非法用途&#xff0c;否则后果自负&#xff01; 前言 目标 分析某度翻译接口&#xff0c;使用python获取翻译结果&#xff0c;并用pyinstaller打包成单文件可执行程序。 工具 ch…

python自定义交叉熵损失,再和pytorch api对比

背景 我们知道&#xff0c;交叉熵本质上是两个概率分布之间差异的度量&#xff0c;公式如下 其中概率分布P是基准&#xff0c;我们知道H(P,Q)>0&#xff0c;那么H(P,Q)越小&#xff0c;说明Q约接近P。 损失函数本质上也是为了度量模型和完美模型的差异&#xff0c;因此可以…

理解红黑树结构

红黑树的特性 节点是红色或黑色根是黑色叶子节点&#xff08;外部节点&#xff0c;空节点&#xff09;都是黑色&#xff0c;这里的叶子节点指的是最底层的空节点&#xff08;外部节点&#xff09;&#xff0c;下图中的那些null节点才是叶子节点&#xff0c;null节点的父节点在…

偏微分方程算法之五点菱形差分法

目录 一、研究目标 二、理论推导 三、算例实现 四、结论 一、研究目标 上个专栏我们介绍了双曲型偏微分方程的主要算法及实现。从今天开始&#xff0c;我们在新的专栏介绍另一种形式偏微分方程-椭圆型的解法。 研究目标选取经典的二维椭圆型方程&#xff08;也称泊松Poisso…

选对伪原创改写软件,文章写作不犯难!

文章写作在当下火热的自媒体的行业中是一项非常重要的技能&#xff0c;只要是参与做自媒体的朋友&#xff0c;想要在内容输出方面不出现困难的情况&#xff0c;那么文章写作的技能基本要具备&#xff0c;但是我们依然能看到有很多不擅长写作的朋友也做起了自媒体&#xff0c;并…

高扬程水泵的性能与应用领域 /恒峰智慧科技

在现代社会中&#xff0c;科技的发展为我们的生活带来了无数便利和可能性。其中&#xff0c;高扬程水泵作为一种高效能的水泵&#xff0c;其独特的设计使其在各个领域都有着广泛的应用&#xff0c;尤其是在森林消防中。 一、高扬程水泵的性能 1. 高扬程&#xff1a;高扬程水泵…

SpringCloud-Seata分布式事务的环境搭建搭建

目录 一、版本说明 二、建立Seata Server数据库&#xff08;TC-带头大哥的数据库&#xff09; 三、业务库建表 四、安装Seata-Server 4.1 虚拟机里新建一个/opt/seate/seata-server文件夹&#xff0c;在seate文件夹下新建一个docker-compose.yml 文件 4.2 运行容器 4.3 在na…

vue为遍历生成的表单设置ref属性

最近在写表单重置的时候出现了问题&#xff0c;在this.$refs[formName].resetFields();的时候卡了很久。 经过网上的搜索终于解决的问题&#xff01; 对于不需要遍历的表单 这是vue代码&#xff1a; <el-dialog title"段落描述" :visible.sync"dialogFormV…

从零开始的Dify大模型应用开发指南

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径&#xff1a;AI代理工作流大模型应用开发实用开源项目汇总大模…