首页 > 其他分享 >web刷题记录(6)

web刷题记录(6)

时间:2024-06-15 19:31:20浏览次数:20  
标签:web php 记录 phar Phar flag 文件 PHP 刷题

[GXYCTF 2019]BabyUpload

文件上传,先传个普通的一句话木马试试 ,发现提示被限制了,文件后缀不可以有ph,那么php3,php5,phtml等后缀自然无法使用了

        那这里的思路我觉得应该是,先判断到底是文件内容被黑名单了,还是文件后缀被黑名单了,一句话来说就是它审核的是文件类型还是文件内容,所以这里选择传个jpg的图片马看看

文件是传上去了,但是文件的木马并没有被传上去,或者说木马的内容没有被执行

那么这里考虑应该就是,对文件的内容进行了判断,那么这里的思路就是再上个.htaccess文件或者.ini文件让图片马的内容被执行

说明上传类型有问题,抓包更改,因为图片形式可以传成功,所以就改成图片形式

 上传成功了,然后再上传图片马,获得了路径

访问看看路径

被成功执行,那现在直接用蚁剑连接

在根目录里面找到了flag文件

拿到了flag

[HNCTF 2022 Week1]easy_upload

还是先上传一个纯木马,看看限制条件

访问

蚁剑连接,虚拟终端,命令cat /f*

得到了flag

[SWPUCTF 2022 新生赛]ez_rce

看看源码

源码里面也没有东西,这里我的思路呢是用dirsearch或者御剑扫扫看,看看有没有什么有用的文件

根据经验这里先选择看看,robots.txt文件,看看有没有什么有用的信息

这里给了提示,访问这个网页看看

这里给的提示就是,Think PHP 5 RCE漏洞,然后版本是5.0

http://node5.anna.nssctf.cn:29559/NSS/index.php/?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=命令内容

然后不断执行命令查看目录,查看flag相关文件就可以了,这里题目环境出问题了,不能执行,隔了一天也没用,所以就不演示了

[NISACTF 2022]bingdundun~

文件上传,给了提示,是要图片类型或者压缩包类型

这里选择先上传一个图片马试试看

获得了路径,访问

返回了一开始的页面,说明木马可能没有被执行

蚁剑连接,发现确实没有被执行成功,本来的思路是再传一个.htaccess文件,然后抓包改类型

但是不行,ini文件也是一样,还是传不上去,看了其他师傅的wp以后发现这里要用的是phar协议

phar协议

phar:// — PHP 归档

phar://、zip://、bzip2://、zlib://

        用于读取压缩文件,zip:// 、 bzip2:// 、 zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif xxx 等等。(Phar伪协议是PHP的一个特性,它允许直接从Phar归档中读取文件,而不需要将Phar文件解压)

        了解这个知识点以后呢,这道题就有两种解法了,一种是改一句话木马文件的后缀改成zip,然后用phar协议读取一句话木马文件;另外一种是构造phar文件,phar文件包含想要执行的代码,由于index页面提示,flag就在该目录下,因此如果能直接执行cat /flag 就能出结果了。

        这里先补充一个细节。

 即url有参数bingdundun,和flag文件位置提示

方法一:phar协议读取一句话木马

phar://example.phar/somefile.php

解释:phar://是协议,example.phar是Phar文件的名称,somefile.php是Phar文件中的一个PHP文件。

上传成功(为什么最后不是/shell.php而是/shell,是因为后台会自动加上.php,后面知识点会提),检测路径以后,蚁剑连接就可以

然后再根目录找flag文件就可以了

方法二:构造phar文件

先创建一个pharfile.php文件


    $phar = new Phar("example.phar"); //后缀名必须为phar
    $phar->startBuffering();
    $phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub
浏览器访问该文件,在同目录下会生成exp.phar文件。复制一份改成zip格式,然后上传,上传了以后,用phar协议读取创建的pharflie.php文件用&连接里面的参数

[SWPUCTF 2022 新生赛]where_am_i

进来给了提示,11位数字,盲猜电话号码,随便输了一个

但是不对,爆破也跑不出来,猜测应该是这个店的电话号码。。。那就变成misc了

百度识图找了一下

百度找了一下电话

得到了flag

[MoeCTF 2022]baby_file、

就给了一个参数,扫扫后台还有没有什么文件

发现了一个flag.php文件,filter伪协议读取

解码,得到flag

[SWPUCTF 2022 新生赛]xff

关键词:自己的电脑。抓包改个xff看看

又给了提示,jump from home page,要从主页跳转,那就改一下refer头(它的作用是指示一个请求是从哪里链接过来,那么当一个请求并不是由链接触发产生的,那么自然也就不需要指定这个请求的链接来源)

得到了flag

[鹤城杯 2021]Middle magic

代码审计

三层

第一层:GET传参,需要传入一个参数,对其进行正则替换掉/^(.*)level(.*)$/得到$aaa,再对$aaa正则匹配,需匹配到pass_the_level_1#

        在正则匹配单行模式(?s)下 ,.号将匹配所有字符,包括换行符;但默认情况下点号不匹配换行符,因此给了绕过(.*)的可能。

payload:%0apass_the_level_1%23,%0a、%23分别是换行符、井号的URL编码。

进入第二层

第二层:

sha1强比较,可以用数组绕过,利用哈希函数无法处理数组,会返回结果null,POST传参的形式

进入第三层

第三层:需要传入一个level_3参数,经过json_decode()之后与内置的$result变量弱类型比较相等(==)

        具体来说,要求我们POST提交一个level_3变量,是json格式的。要满足level_3变量的result键的值 与$result变量相等,但是$result变量在index.php中未定义,在result.php中是否定义,未知,所以$result变量具体值是多少我们无从得知。暂且将他当成未定义,那么值就是空,NULL。实际测试证明,这里level_3只要POST了就行,值是多少都可以。因为空NULL和什么东西弱比较都是true,那么就验证了猜想,$result变量未定义。

那以下payload都可行

&level_3={“result”:“chxvjxkvjckvrfghrekj”}  //随机值
&level_3={“result”:0}  //值为0
&level_3={“result”:} //值为空
&level_3= 

得到了flag

知识点

文件上传

相关资料参考

文件上传漏洞类型汇总(详细)_上传文件漏洞-CSDN博客

文件上传漏洞总结(含原因+防御措施)+白名单+黑名单+内容、头+解析漏洞/修补方案_00截断修复方案-CSDN博客

其他扩展的话,还是要通过多做题来积累

Thank PHP v5 框架漏洞

简介:thinkPHP官方2018年12月9日发布重要的安全更新,修复了一个严重的远程代码执行漏洞。该更新主要涉及一个安全更新,由于[框架]对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本。
此版本是5.0版本所以可以利用此漏洞查找flag
这个漏洞我们可以在网上找到payload,?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=
1.index/是对应的模块
2.\think\app 以反斜线开头,这就是我们想要实例化的类
3./invokefunction是让\think\app类想要调用的方法,
4.function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1是对应invokefunction的参数。(这里的phpinfo和1,是可变参数,比如可以为system和ls /

phar
       

        PHAR(PHP Archive)是一种用于将多个PHP脚本文件打包成单个归档文件的格式。这种文件格式旨在简化PHP应用程序的分发和部署,并提供了一种安全的方式来执行和管理PHP代码。PHAR文件可以包含PHP脚本、资源文件、配置文件等,并且可以被像任何其他PHP脚本一样执行。

         1.phar 伪协议无论读取什么文件,都会将其视为压缩包进行解压缩,然后作为 php 代码执行,在文件上传类漏洞中经常被用到。

        2.Phar伪协议是PHP的一个特性,它允许直接从Phar归档中读取文件,而不需要将Phar文件解压。这样可以直接从Phar文件运行PHP脚本,而无需在服务器上物理地提取文件。

例如,如果你有一个名为example.phar的Phar归档文件,你可以通过以下URL运行其中的PHP脚本:

phar://example.phar/somefile

在这个URL中,phar://是协议,example.phar是Phar文件的名称,somefile.php是Phar文件中的一个PHP文件。

提到这里的话,再提一嘴其他的

        phar://、zip://、bzip2://、zlib://都可用于读取压缩文件,zip:// 、 bzip2:// 、 zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif zip xxx 等等。而phar://的伪协议,可以将任意后缀名的压缩包(原来是 .phar 或 .zip,注意:PHP > =5.3.0 压缩包需要是zip协议压缩,rar不行 ) 解包,从而可以通过上传压缩包绕过对后缀名的限制,再利用伪协议实现文件包含。

        而在涉及知识点题目中,url栏有个GET传参。传值为index,发现回显好多个//index.php,猜测这里传参,会自动帮我们加上一个.php,我们传?bingdundun=index,后台解析为?bingdundun=index.php,然后进行文件包含。所以读取文件没有后缀加php。

再详细的phar博客

『PHP』phar文件详解_phar文件格式_调用phar类方法生成phar文件_php phar-CSDN博客

preg_replace()

preg_replace() 是 PHP 中用于执行正则表达式替换的函数。它可以在字符串中搜索符合正则表达式模式的部分,并将其替换为指定的内容。这个函数的语法如下:

preg_replace($pattern, $replacement, $subject [, $limit = -1 [, &$count = NULL ]]) : string|array|null

参数说明:

  • $pattern:要搜索的正则表达式模式。
  • $replacement:替换模式。可以是字符串,也可以是字符串数组。如果是字符串数组,则替换与模式匹配的内容时会依次从数组中选择替换的内容。
  • $subject:要在其中进行搜索和替换的目标字符串或字符串数组。
  • $limit(可选):指定最大替换次数。默认值为 -1,表示无限制地进行替换。
  • &$count(可选):一个变量,用于存储替换次数。

preg_replace() 函数返回替换后的字符串或字符串数组,如果没有找到匹配项,则返回原始的 $subject

        简单来说,

preg_replace:只能匹配一行的数据。

如果代码替换了abc,但后面又要求有abc,可以用%0a(换行符

%0apass_the_level_1%23        %0a换行符,%23井号。

举个例子,假设我们有一个字符串,想要将其中所有的数字替换为 "X",可以使用 preg_replace() 函数实现:

$str = "Today is 2024-06-13."; $newStr = preg_replace('/\d/', 'X', $str); echo $newStr; // Output: Today is XXXX-XX-XX.

在上面的例子中,正则表达式 /d 匹配任意数字,然后将其替换为 "X"。

json_decode()函数

     json_decode() 是 PHP 中用于将 JSON 格式的字符串转换为 PHP 变量(通常是数组或对象)的函数。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于阅读和编写,也易于解析和生成。

     json_decode() 函数会尝试将 JSON 字符串解析为 PHP 变量,并返回解析后的结果。如果解析成功,则返回相应的 PHP 变量;如果解析失败,则返回 NULL。如果给定了 $assoc 参数,并且其值为 TRUE,则返回的是关联数组;否则返回的是对象。

扩展

CTF(JOSN弱类型)_ctf json-CSDN博客

JASON格式与布尔绕过弱类型比较_json数组绕过-CSDN博客

标签:web,php,记录,phar,Phar,flag,文件,PHP,刷题
From: https://blog.csdn.net/2301_81841047/article/details/139631349

相关文章

  • JavaWeb课程设计/期末大作业-电影网站+源代码+文档说明+数据库sql
    文章目录源码下载地址项目介绍项目功能界面预览项目备注源码下载地址源码下载地址点击这里下载代码项目介绍项目功能界面预览项目备注1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!2、本项目适合计算机相关专业(如计科......
  • WebGoC题解(4) 115.第5题 同心圆(比赛模拟题)
    题目描述学校准备在颁奖会把这次比赛的前10名的成绩用崭新的形状表示出来,这个艰巨的任务交给了小C。为了和以往不同,小C决定用每个学生的成绩作为半径画同心圆来表示。这个创新的举动需要你使用GoC编程,在一个黑色实心圆背景下,用10个红色圆表示成绩。具体形状参见输入输出样例......
  • 记录:利用共享wifi+桥接的方式实现远程访问另一台电脑上的vm虚拟机上的服务
    情景描述:1、电脑1:操作端,试图访问电脑2上的虚拟机。电脑1通过有线访问网络,同时可以依靠无线网卡开启共享wifi。2、电脑2:被控端,上面的vm17虚拟机centos7中部署有nginx和docker上的微服务;电脑2的防火墙关闭,或者防火墙有对应微服务的端口出入站规则。本文原文:https://www.cnblogs.c......
  • IDEA创建web项目
    IDEA创建web项目第一步:创建一个空项目第二步:在刚刚创建的项目下创建一个子模块第三步:在子模块中引入web创建结果如下:这里我们需要把这个目录移到main目录下,并改名为webapp,结果如下将pom文件中的项目打包方式设置为war包第四步:检查第五步:测试1、创建一......
  • go,无法安装 gorilla websocket
    go中没有websocket这个库,需要安装第三方的库,这里选择常用的gorilla/websocket,如下:E:\Projects\CSMS\SK-CSMS\CentralSystem>goget-ugithub.com/gorilla/websocketgo:modulegithub.com/gorilla/websocket:Get"https://proxy.golang.org/github.com/gorilla/websocke......
  • 2024.6 -> 做题记录与方法总结
    2024/6/151.P4363[九省联考2018]一双木棋chess经典轮廓线dp使用的关键在于发现状态数并不多,用\(n\)进制数来表现轮廓的状态\(dp\)的转移和轮廓线息息相关如图,蓝色轮廓线状态只能转移到含一个紫色的状态因为$1\leqn,m\leq10$用\(11\)进制压缩状态就可......
  • Java Web学习笔记55——DQL基本查询
    DQL:DQL英文全称DataQueryLanguage(数据查询语言),用来查询数据库表中的数据。关键字:SELECT。SELECT是最为常见,最为重要的操作。查询在一个系统中,能占据90%的以上。查询也是最为复杂的一个操作。 查询五子句。准备数据: --DQL-基本查询--1.查询指定字......
  • 关于我转生变成史莱姆这档事 第三季[追更记录]
    第48.5集(第00集)更新3月30日闲话:迪亚波罗日记第49集(第01集)更新4月05日恶魔与谋策第50集(第02集)更新4月12日圣人的意图第51集(第03集)更新4月19日和平的日子第52集(第04集)更新4月26日各自的职责第53集(第05集)更新5月03日两翼会议第54集(第06集)更......
  • 2022年9月3号 辅导的大一新生自学C语言,答疑解惑聊天记录。
    C调战士......
  • 基于java jsp ssm的基于Java Web的智慧社区信息平台的设计与实现(源码+LW+部署讲解)
    前言......