BUUCTF:Basic

BUU LFI COURSE 1:

打开链接是一段php代码,我们查看相关函数highlight_file()的定义,发现存在文件漏洞,利用LFI(本地文件包含)漏洞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
/**
* Created by PhpStorm.
* User: jinzhao
* Date: 2019/7/9
* Time: 7:07 AM
*/

highlight_file(__FILE__);

if(isset($_GET['file'])) {
$str = $_GET['file'];

include $_GET['file'];
}

页面内的几个函数或变量功含义:

highlight_file() :函数对文件进行 PHP 语法高亮显示。语法通过使用 HTML 标签进行高亮。也就是用亮眼的字体把文件输出。

_FILE_:代表文件的绝对路径。例如“D:\www\test.php”。

isset():bool函数,用于检测变量是否已设置并且非NULL。

$_GET:在 PHP 中,预定义的 $_GET 变量用于收集来自 method=”get” 的表单中的值。

$str:一个字符串变量。

include:包含并运行指定文件。

这个php程序的大致意思就是:

首先,高亮输出当前文件。然后判断表单中”get”的值是否设置,若已设置且不为空,则将值赋给$str变量(这个变量有啥用我不清楚)。最后,将$_GET所代表的文件用include包含进php程序。

原理:

漏洞原理为include函数会将接收参数所指定的文件加载进来并执行。故此可以利用该函数来获取服务器文件信息,或者执行PHP代码

实施过程:

因为是通过路径来找到对应的文件,就可以把flag文件作为路径参数去测试,发现确实能够get到flag的值。

所以就在网址后面加上?/file=/flag

lpgkyf.png

1
网址/?file=/flag

此题还可以使用PHP伪协议进行解答

image-20251026224422406

1
网址/?file=php://filter/convert.base64-encode/resource=/flag

获得ZmxhZ3s3YjU0ZGRmOS02ZjhmLTRkOTEtYTcwZi1iMjQ1ZGQyNjlkZWR9Cg==

使用base64进行解密得到flag=flag{2a77f0f2-df71-49c6-8024-d20acf9b53d0}

在 PHP 中,convert.base64-encode 是 php://filter 流的一个过滤器,它允许你在读取文件或数据流时,将其内容实时编码为 Base64。这种过滤器非常有用,因为它可以让你在不需要将整个文件内容加载到内存中的情况下,对文件进行 Base64 编码。
当你使用 file_get_contents 或类似函数,并指定 php://filter/convert.base64-encode/resource=文件路径 作为参数时,PHP 会自动打开指定的文件,读取其内容,并在读取过程中将其编码为Base64。这样,你得到的结果就是文件的 Base64 编码表示。
在使用 php://filter/convert.base64-encode/resource=文件路径 时,‌文件路径可以是绝对路径也可以是相对路径‌。
PHP 会根据提供的路径来尝试打开文件,无论这个路径是绝对的还是相对的。如果给出的是相对路径,PHP 会基于当前脚本的执行目录(通常是包含该脚本的目录,但可以通过 chdir() 函数改变)来解析这个路径。如果给出的是绝对路径,PHP 会直接尝试打开该路径指定的文件)

BUU BRUTE 1

打开题目就是一个登录页面,尝试使用burp suite进行暴力破解

image-20251109002928964
我们先尝试随机输入一个用户名和密码

image-20251109003205951

然后回到我们的burp suite,将其发送到Intruder进行爆破

image-20251109003356518

选中我们的用户名,进行标记,然后右边的Payloads选择SImple list在下面输入一些常见的用户名点击add,像我这样,最后点击Start attack等待爆破结果

image-20251109003718498

我们发现admin的Length与别的不同,我们点击Response,会发现出现提示,密码是个四位数字

image-20251109004109212

于是我们开始破解密码,先对密码做标记,选中12345,我们右侧选择Number,格式为0001到9999,四个长度,开始破解!

image-20251109004240966

破解过程有些慢,跟上面破解用户名一样,选中Length最长的密码,结果是6490.

于是破解成功!image-20251109004547266

CTFHUB: 302跳转

302跳转又称暂时性转移,当网页临时移到新的位置,而浏览器的缓存没有更新时,就出现了302跳转。

简单来说就是服务器里有个 “规则设置”,明确要求 “只要有人访问 index.php,就自动转到 index.html”,相当于给 index.php 加了个 “强制导流” 指令。

我们拿到题目是这样的No Flag here!

image-20251118195819496

我们果断点击Give me Flag,发现无任何反应,只是网址多了一个index.html,于是推测302跳转(题目告诉的)

image-20251118200014881

我们推测flag 在 index.php 但访问跳转到 index.html,核心是绕开服务器的跳转限制,直接获取 index.php 的源码或内容

方法一

1、抓包修改请求(突破服务器 302 拦截)

打开浏览器 F12→“网络(Network)”→ 勾选 “保留日志(Preserve log)”。

image-20251118200707790

直接输入http://xxx.com/index.php,触发跳转后,找到 302 状态的请求→ 右键 “复制→复制为 cURL”。

image-20251118200907621

image-20251118200933480

​ 打开终端(或在线 cURL 工具),粘贴复制的命令.

​ 成功得到flag

  • image-20251118201034054

方法二、burp site抓包

我们打开burp site,打开Intercept开始抓包,然后打开内置浏览器,打开网站,右键这个请求,将网站发送到Repeater

image-20251118202652265

打开我们的Repeaterimage-20251118202809017

更改请求为/index.php,点击send,成功挖到Flag!.

image-20251118202908889