2.搭建apache网站服务,php环境,网站目录有index.php和flag.php两个文件,index.php显示任务,flag.php里有个flag,客户浏览时在前端不显示,需要php伪协议读源代码才能看到,但是是base64编码,需要解码才能看到真实信息。 工作过程:1、php伪协议读代码:得到base64加密后的flag信息
时间: 2025-07-19 22:26:07 AIGC 浏览: 22
<think>我们首先需要配置Apache和PHP环境,然后编写一个PHP脚本利用php://filter伪协议读取flag.php文件并输出其base64编码内容。
步骤:
1. 安装Apache和PHP
2. 配置Apache以支持PHP
3. 创建测试环境(包括flag.php)
4. 编写PHP脚本利用伪协议读取flag.php的base64编码
详细步骤:
1. 安装Apache和PHP(以Ubuntu为例):
```
sudo apt update
sudo apt install apache2 php libapache2-mod-php
```
2. 配置Apache以支持PHP(通常安装后自动配置好,无需额外配置)
检查是否加载了PHP模块:在/etc/apache2/mods-enabled目录下应有phpX.X.load和phpX.X.conf(X.X为版本号)
重启Apache服务:`sudo systemctl restart apache2`
3. 创建测试文件
在Apache的网站根目录(默认为/var/www/html)下创建两个文件:
- flag.php: 内容为某个flag,例如:`<?php $flag = "FLAG{THIS_IS_A_TEST_FLAG}"; ?>`
- 我们还需要创建一个用于读取的PHP文件,比如read.php
4. 编写read.php,利用php://filter伪协议读取flag.php并输出base64编码
代码示例:
```php
<?php
// 使用php://filter读取flag.php的内容并转换为base64
$content = file_get_contents("php://filter/convert.base64-encode/resource=flag.php");
echo $content;
?>
```
5. 访问read.php即可得到flag.php的base64编码内容。
注意:在实际操作中,确保文件路径正确。如果flag.php和read.php在同一目录下,直接使用文件名即可。如果不在同一目录,需要指定相对路径或绝对路径。
另外,根据引用[1]和引用[2]中提到的伪协议使用,我们使用的是php://filter,它不需要allow_url_include开启,因为这里我们读取的是本地文件,而不是远程包含。所以这种方法通常可行。
测试:
将read.php放在/var/www/html目录下,通过浏览器访问:http://localhost/read.php
将显示flag.php的base64编码内容。
安全提示:此示例仅用于学习,实际生产环境中应避免直接输出敏感文件内容。
相关问题:
1. 如何防止PHP伪协议被恶意利用?
2. 除了base64编码,php://filter还支持哪些转换?
3. 如何配置Apache以增强PHP环境的安全性?</think>### 配置Apache与PHP环境并读取base64编码的flag
#### 1. **安装Apache与PHP**
```bash
# Ubuntu/Debian
sudo apt update
sudo apt install apache2 php libapache2-mod-php
# CentOS/RHEL
sudo yum install httpd php php-cli
sudo systemctl start httpd
```
#### 2. **验证安装**
```bash
# 创建测试文件
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
```
访问 `http://服务器IP/info.php` 显示PHP信息页即安装成功[^3]。
---
#### 3. **配置伪协议读取flag**
创建 `read_flag.php` 文件:
```php
<?php
// 方法1:直接输出base64编码内容
$flag_content = file_get_contents("php://filter/convert.base64-encode/resource=flag.php");
echo $flag_content;
// 方法2:通过input伪协议(需allow_url_include=On)
// POST传参:<?=system('base64 flag.php');?>
?>
```
#### 4. **关键配置修改**
编辑 `/etc/php/X.X/apache2/php.ini`(X.X为PHP版本):
```ini
allow_url_fopen = On
allow_url_include = On ; 仅input伪协议需要此配置
```
重启服务生效:
```bash
sudo systemctl restart apache2
```
---
#### 5. **获取flag**
1. **直接访问(推荐)**
访问 `http://服务器IP/read_flag.php` 直接显示base64编码的flag内容
2. **通过input伪协议**
```http
GET /read_flag.php?path=php://input HTTP/1.1
POST数据:<?=system('base64 flag.php');?>
```
需确保 `allow_url_include=On`[^1]
---
#### 6. **安全注意事项**
```bash
# 操作完成后立即关闭危险配置
sudo sed -i 's/allow_url_include = On/allow_url_include = Off/g' /etc/php/*/apache2/php.ini
sudo systemctl restart apache2
```
---
### 示例执行结果
若 `flag.php` 内容为:
```php
<?php $flag="FLAG{Test_123}"; ?>
```
访问 `read_flag.php` 将输出:
```
PD9waHAgJGZsYWc9IkZMQUd7VGVzdF8xMjN9IjsgPz4K
```
使用 `base64 -d` 解码可得原始内容。
---
阅读全文
相关推荐
















