web刷题记录(2)

[鹤城杯 2021]EasyP

就是php的代码审计

从中可以看出来,就是对四个if语句的绕过,然后过滤了一些语句

代码分析:

        通过include 'utils.php';导入了一个叫做"utils.php"的文件,这意味着在该文件中可能定义了一些与本代码相关的函数和变量。

        然后,代码检查了是否有通过POST请求发送的"guess"参数。如果有的话,它将把该参数的值转换成字符串,并存储在变量$guess中。

        代码用条件判断语句检查用户猜测的guess是否等于一个名为secret的变量。如果相等,说明用户猜对了密码,就将一个包含flag的消息赋值给message变量。否则,说明用户猜错了密码,就将一个"Wrong. Try Again"的消息赋值给message变量。

        代码的下一部分用正则表达式检查了当前PHP脚本文件的路径名是否以"utils.php"后面紧跟着零或多个斜杠(/)结尾。如果是的话,代码会退出并显示"hacker :)"。

        紧接着,代码通过正则表达式检查了当前请求的URL(即$_SERVER['REQUEST_URI'])中是否包含"show_source"字符串。如果是的话,代码也会退出并显示"hacker :)"。

        然后,代码检查了是否有通过GET请求发送的"show_source"参数。如果有的话,它会使用highlight_file函数来显示当前PHP脚本文件(通过basename($_SERVER['PHP_SELF'])获取)的源代码,并退出。

        最后,如果前面的条件都不满足,代码将通过show_source函数显示当前PHP脚本文件的源代码,即__FILE__的内容。

        这里比较迷惑的一个点就是,好像可以通过对第一个if判断语句的绕过就可以直接得到flag,但是它这里要爆破密码,因为要使两个变量值相等,这里就是第一个思路,但是这样的话,后面的各种正则就没什么用了,所以我估计这个密码大概率是爆破不出来的,但是作为思路还是先试一试。

        试了两个字典,没有用,估计应该是爆破不出来

        换思路,再仔细的对后面几个正则再次理解,进行绕过。

        关于正则的话:

        表达式/\/utils\.php\/?$/i可以用来匹配以/utils.php结尾的URL路径,解释一下各个部分:

    /:正则表达式的开始标记。
    \/:匹配斜杠字符/。由于斜杠在正则表达式中有特殊含义,需要使用反斜杠进行转义。
    utils\.php:匹配字符串utils.php。由于.在正则表达式中有特殊含义,需要使用反斜杠进行转义。
    \/?:匹配可选的斜杠字符/。?表示前面的字符或组是可选的。
    $:匹配字符串的结尾。
    /i:正则表达式的结束标记,表示不区分大小写。

        看了好久,这里主要就是对两个知识点的运用:

一.['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 与 $_SERVER['REQUEST_URI']

1.$_SERVER['PHP_SELF']:获取当前执行脚本的文件名(相对于网站根目录的路径及 PHP 程序名称。)

2.$_SERVER['SCRIPT_NAME']:获取相对于网站根目录的路径及 PHP 程序文件名称。

3.$_SERVER['REQUEST_URI']:获取当前URL的 路径地址。

举个栗子:(方便理解)

http://www.baidu.com/php/flag.php/flag?a=11111

        执行$_SERVER['PHP_SELF'] 得到:/php/flag.php/flag

        执行$_SERVER['SCRIPT_NAME'] 得到:/php/flag.php

        执行$_SERVER['REQUEST_URI'] 得到:/php/flag.php/flag?a=11111

如果以本题为例子的话,实际上,这里用到这些函数的作用,是给了我们一个路径 ,大概让我们知道,跟flag有关的信息应该在哪个位置,要怎么找,这里涉及了解题的第一步,就是对路径的构造。

二.basename()

php basename()函数语法

作用:返回路径中的文件名部分。

语法:basename(path,suffix)

参数:

path 必需。规定要检查的路径。

suffix 可选。规定文件扩展名。如果文件有 suffix,则不会输出这个扩展名。

说明:

返回路径中的文件名部分。

举个栗子:

<?php

$file = "/phpstudy/WWW/index.php";

echo basename($file);//带有文件扩展名

echo "
";

echo basename($file,'.php'); //去除文件扩展名

?>

输出:index.php

           index

        简单而言,bashname命令用于获取路径中的文件名或路径名。有一个师姐说的也是挺经典(basename():删除从最后一个斜杠之前的所有内容 ),简单粗暴。

然后这个函数得漏洞所在就是,basename()无法处理非ascii字符,如果传入的参数中出现了非ascii字符则会把它给丢弃。

        然后呢,这里还涉及了一个魔术常量的问题,这里一并介绍吧。

        __FILE__是一个魔术常量,它包含当前脚本的完整路径和文件名。

最后呢,就还有一个过滤没有处理,就是GTE传参的show_source

 这里要考虑绕过一个正则,作为补充知识点:

[ ,(空格) ,+ , . 这四个都可以被处理为_

构造payload

/utils.php/朱?show.source=1

出不来,考虑是不是路径出问题了,加个index.php试试 解出了flag(吐槽一下,这个位数的密码,要爆破怕至少两个星期,勾石)

[LitCTF 2023]Vim yyds

既然题目说,和vim泄露有关,那么按我的思路是,先用dirsearch扫一下看看(因为源代码里面没有什么有用的信息,就一个图片引用的超链接)

扫到一个可能有用的文件

访问一下看看

王德发??????(跟火绒斗智斗勇以后,我决定还是先关掉它)

虽然用记事本好像大概也能看,但是,还是正式点看看吧

 这里就涉及知识点了,

vim信息泄露知识点:

vim 交换文件名

在使用vim时会创建临时缓存文件,关闭vim时缓存文件则会被删除,当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容
以 index.php 为例:第一次产生的交换文件名为 .index.php.swp
再次意外退出后,将会产生名为 .index.php.swo 的交换文件
第三次产生的交换文件则为 .index.php.swn

         在kali里面可以恢复这个文件

vim -r index.php.swp

这里恢复以后会另外存储

然后再访问就可以查看文件内容了(这里只截取有用的部分)

         这里大概的意思就是有两个绕过,一个base64,一个OS命令执行,然后以POST传参的方式

 然后post传参,得到flag,这里的tac和cat的作用是一样的,但是我就是想写tac

[NSSCTF 2022 Spring Recruit]babyphp 

还是代码审计

  • if(isset($_POST['a'])&&!preg_match('/[0-9]/',$_POST['a'])&&intval($_POST['a'])): 这是一个条件判断语句,检查是否存在名为"a"的POST参数,且该参数的值不包含数字(通过正则表达式检查),并且转换为整数后不为0。

  • 在上述条件满足的情况下,进入嵌套的条件判断:

    a. if(isset($_POST['b1'])&&$_POST['b2']): 检查是否存在名为"b1"和"b2"的POST参数。

    b. if($_POST['b1']!=$_POST['b2']&&md5($_POST['b1'])===md5($_POST['b2'])): 检查"b1"和"b2"的值是否不相等,并且它们的MD5哈希值是否相等。

    c. 在上述条件满足的情况下,进入另一个嵌套的条件判断:

    • if($_POST['c1']!=$_POST['c2']&&is_string($_POST['c1'])&&is_string($_POST['c2'])&&md5($_POST['c1'])==md5($_POST['c2'])): 检查"c1"和"c2"的值是否不相等,并且它们是字符串类型,并且它们的MD5哈希值是否相等。

      • 如果上述条件都满足,则输出flag。

      • 否则,输出"yee"。

      • 如果"b1"和"b2"的MD5哈希值不相等,则输出"nop"。

    d. 如果"b1"和"b2"的值相等,则输出"go on"。

        大概意思呢,就是数组绕过,然后0e绕过,我的理解大概就是这样,关于MD5,我已经做过详解,有兴趣观看关于MD5-CSDN博客

成功构造以后,得到了flag

 

[HNCTF 2022 Week1]Interesting_include

开局源码,而且给了提示,就是伪协议,但是要绕正则

payload

?filter=php://filter/read=convert.base64-encode/resource=./flag.php

解码,得到flag

[GDOUCTF 2023]EZ WEB 

开始就是一个超链接,但是没什么用,看看源码

也没用,就是给了有一个src文件,访问一下看看

下载了一个python

 

这是一个使用 Flask 框架编写的简单 Web 应用程序,它定义了三个路由:

    '/' - GET 请求会返回名为 'index.html' 的文件;
    '/src' - GET 请求会返回名为 'app.py' 的文件;
    '/super-secret-route-nobody-will-guess' - 只接受 PUT 请求,会返回名为 'flag' 的文件内容。

其中 '/super-secret-route-nobody-will-guess' 路由返回的内容可能是敏感信息

然后这里涉及的方法是put传参

PUT(书上找的)

        put方法用于请求服务器把请求中的实体存储在请求资源下,如果请求资源已经在服务器中存在,那么将会用此请求中的数据替换原先的数据,作为指定资源的最新修改版。如果请求指定的资源不存在,将会创建这个资源。

要详细的话,这个大佬讲的很好PUT和POST方法的区别-比较POST和PUT方法-CSDN博客

        这里的话根据这个程序源码可知,要求就是是PUT方式下访问/super-secret-route-nobody-will-guess,可以def flag():

        这里使用bp抓包修改

成功得到flag

[GDOUCTF 2023]hate eat snake

打开就是个游戏,我靠,这个速度,后面牛逼到离谱,玩了两把,该找flag了

审了一下,直接找到flag是不可能了,搓了半天,应该是搓到关键信息了

60就60,还整起表达式来了

这个弹窗,好像直接查看是做不到了(反正我是做不到),根据它的条件,传个代码调试台执行试试

        得到flag

[HNCTF 2022 Week1]2048

还是审代码

为了满足条件判断,这里两种方法,一种是直接传入score的值,一种是直接在控制台执行弹窗命令

得到了flag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/22464.shtml

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

相关文章

模型训练篇 | yolov10来了!手把手教你如何用yolov10训练自己的数据集(含网络结构 + 模型训练 + 模型推理等)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。YOLOv9还没捂热乎&#xff0c;YOLOv10就推出来了&#xff0c;太卷了&#xff0c;太快了&#xff0c;坐等YOLOv9000&#xff01;自今年2月YOLOv9发布之后&#xff0c; YOLO&#xff08;You Only Look Once&#xff09;系列的…

全域外卖平台是什么?有哪些系统可以推荐?

随着本地生活下半场的开启&#xff0c;以团购外卖为代表的一系列相关业务也迈入了全域时代。在此背景下&#xff0c;全域外卖赛道正式兴起&#xff0c;全域外卖平台也随之备受瞩目。 作为创业的一大新风口&#xff0c;全域外卖囊括了公域和私域内所有的外卖业务&#xff0c;主…

基础篇03——SQL约束

概述 约束示例 完成以下案例&#xff1a; create table user (id int primary key auto_increment comment 主键,name varchar(10) not null unique comment 姓名,age tinyint unsigned check ( age > 0 and age < 120 ) comment 年龄,status char(1) default 1 commen…

嵌入式C语言--Pragma Section与Map文件

嵌入式C语言–Pragma Section与Map文件 嵌入式C语言--Pragma Section与Map文件 嵌入式C语言--Pragma Section与Map文件一. Pragma修饰符二. Map文件1&#xff09;什么是map文件2&#xff09;map文件的构成3&#xff09;常用的段映射地址4&#xff09;map文件生成 三. Section修…

SpaceX: 太空火箭自主精准着陆

本文是根据Lars Blackmore在16年的一篇公开论文翻译而来&#xff0c;虽然有些早而且是科普文章&#xff0c;但是可以初见一些SpaceX火箭着陆的细节&#xff0c;后面我会对spaceX landing control 技术主管MIT博士期间研究火箭控制算法的论文进行讲解&#xff0c;敬请期待。 Lar…

OpenEuler华为欧拉系统安装—从零开始,小白也能学会

介绍 openEuler&#xff08;欧拉&#xff09;是一款开源操作系统。 当前openEuler内核源于Linux&#xff0c;支持鲲鹏及其它多种处理器&#xff0c; 能够充分释放计算芯片的潜能&#xff0c;是由全球开源贡献者构建的高效、 稳定、安全的开源操作系统&#xff0c;适用于数据库…

JVM运行数据区-Java堆

Java堆 堆区&#xff08;Heap区&#xff09;是JVM运行时数据区占用内存最大的一块区域&#xff0c;每一个JVM进程只存在一个堆区&#xff0c;它在JVM启动时被创建&#xff0c;JVM规范中规定堆区可以是物理上不连续的内存&#xff0c;但必须是逻辑上连续的内存。 1、堆区是线程…

「网络编程」基于 UDP 协议实现回显服务器

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;计网 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 实现回显服务器 &#x1f349;socket api&#x1f349;回显服务器&#x1f34c;实现&#x1f95d;服务器&#x1f95d;客户端 &#x1f3…

纯血鸿蒙实战开发—如何添加顶部tab页面

1.Tabs组件 Tabs组件的页面组成包含两个部分&#xff0c;分别是TabContent和TabBar。TabContent是内容页&#xff0c;TabBar是导航页签栏. 根据不同的导航类型&#xff0c;布局会有区别&#xff0c;可以分为底部导航、顶部导航、侧边导航&#xff0c;其导航栏分别位于底部、顶…

react基础学习 JSX

JSX的测试网站 Babel Babel 可以测试代码的效果 JSX实现map列表 注意 key不一样&#xff08;使用遍历的时候&#xff09; 简单条件渲染 复杂条件渲染 绑定事件 function App() {const colorse (e)>{console.log("测试点击",e);}const colorse1 (name)>{…

地理信息科学中的大数据挑战

在信息化爆炸的时代&#xff0c;地理信息科学&#xff08;GIScience&#xff09;正经历着前所未有的变革&#xff0c;其中&#xff0c;地理空间大数据的涌现为科学研究与应用带来了前所未有的机遇与挑战。作为地理信息与遥感领域的探索者&#xff0c;本文旨在深入剖析地理空间大…

揭秘HubSpot集客营销:如何吸引并转化全球潜在客户

随着全球数字化浪潮的推进&#xff0c;企业出海已经成为许多公司扩大市场、增加品牌曝光度的重要战略。HubSpot集客营销作为一种以客户为中心、数据驱动的营销策略&#xff0c;为企业在海外市场的成功提供了强有力的支持。作为HubSpot亚太地区的合作伙伴&#xff0c;NetFarmer将…

godot的安装和使用 1

今天是第一节&#xff0c;因此呢先做godot的安装&#xff0c;其实很简单 godot官网&#xff1a;https://godotengine.org/ 进入官网&#xff0c; 安装好之后呢&#xff0c;会有两个文件 打开第一个就是可视化界面的&#xff0c;进入后是这个样子 说明安装成功了

鸿蒙开发接口安全:【@ohos.abilityAccessCtrl (访问控制管理)】

访问控制管理 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import abilityAccessCtrl from ohos.abilityAccessCtrlabilityAccessCtrl.createAtManager createAtManager(): AtMan…

OpenCV学习(4.1) 改变颜色空间

1.目标 在本教程中&#xff0c;你将学习如何将图像从一个色彩空间转换到另一个&#xff0c;像BGR↔灰色&#xff0c;BGR↔HSV等除此之外&#xff0c;我们还将创建一个应用程序&#xff0c;以提取视频中的彩色对象你将学习以下功能&#xff1a;cv2.cvtColor&#xff0c;**cv2.i…

更适合工程师和研究僧的FPGA专项培训课程

各位编程精英er~ 社区打造的FPGA工程师培训班上线后&#xff0c;有不少同学后台私信询问&#xff1a;“能不能出个那种专门针对某个知识点的课程呢&#xff1f;我想针对自己的薄弱点深入学习。” 贴心如我&#xff0c;当然会满足大家的学习需求啦。本周&#xff0c;社区FPGA专…

Nextjs使用教程

一.手动创建项目 建议看这个中文网站文档,这个里面的案例配置都是手动的,也可以往下看我这个博客一步步操作 1.在目录下执行下面命令,初始化package.json文件 npm init -y2.安装react相关包以及next包 yarn add next react react-dom // 或者 npm install --save next react…

使用Python操作Redis

大家好&#xff0c;在当今的互联网时代&#xff0c;随着数据量和用户量的爆发式增长&#xff0c;对于数据存储和处理的需求也日益增加。Redis作为一种高性能的键值存储数据库&#xff0c;以其快速的读写速度、丰富的数据结构支持和灵活的应用场景而备受青睐。本文将介绍Redis数…

猫头虎分享已解决Bug || Error: ‘fetch‘ is not defined

原创作者&#xff1a; 猫头虎 作者微信号&#xff1a; Libin9iOak 作者公众号&#xff1a; 猫头虎技术团队 更新日期&#xff1a; 2024年6月6日 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &…

独立游戏之路 -- 上架TapTap步骤和注意事项

个人开发者游戏上架TapTap上架步骤和注意事项 一、TapTap 介绍二、独立游戏上架 TapTap 的步骤2.1 创建游戏2.2 提交游戏审核2.3 TapTap 平台上发布。 三、注意事项3.1 关于备案3.2 遵守 TapTap 的规定3.3 保证游戏质量 四、常见问题4.1 隐私政策问题4.2 先发布还是先优化&…