> 技术文档 > 【WEB】[Polar靶场] 简单 16-20题 详细笔记

【WEB】[Polar靶场] 简单 16-20题 详细笔记

目录

@签到题

@签到

@session文件包含

PHP 伪协议(PHP Stream Wrappers)

base64加解密获取源代码

Session文件包含

Shell 是什么?

@Don\'t touch me

@robots

robots.txt 


@签到题

didi=no改成didi=yes 

得到一串字符串

Li9kYXRhL2luZGV4LnBocA

base64在线解码网站解码得到./data/index.php

访问/data/index.php得到

 /data/index.php?file=php://filter/convert.base64-encode/resource=..././..././..././..././flag

(?file=php://filter/convert.base64-encode/resource= )这部分知识点看下面的十八题

base64解码

flag{92eb5ffee6ae2fec3ad71c777531578f}

@签到

发现有个按钮按不了

F12(右键点击检查),把disabled=\"disabled\" 删除,回车

随便提交个东西试试

这时候弹出一个弹窗告诉我们提交 ilovejljcxy 就能得到flag了
但是提交的时候发现只能输入就个字母

查看源代码

 长度限制maxlength=\"9\" 对用户的输入进行了限制,用户最多只能输入 9 个字符

把9改成11以上就行

输入后再次提交,弹出flag

flag{fa3f77dd58a0a8f990bb6292da75618f}

@session文件包含

我觉得这题老难了 

先随便输入一个1,然后submit看看

先看知识点

PHP 伪协议(PHP Stream Wrappers)

是 PHP 提供的一组特殊协议前缀,允许通过类似 URL 的方式访问和操作不同类型的资源(如文件、数据流、网络等)。它们无需额外安装,直接内置于 PHP 中,常用于简化对非传统文件系统的操作。

示例:使用 php://filter 读取文件并编码

假设我们有一个文件 secrets.txt,内容如下:

# secrets.txt数据库密码:123456API 密钥:abcdefghijklmnopqrstuvwxyz

需求:读取该文件内容,并以 Base64 编码形式输出。

方法 1:传统方式(需手动编码)

方法 2:使用伪协议(自动编码)

解码验证

将上述 Base64 字符串复制到 Base64 解码器,得到原始内容:

# secrets.txt数据库密码:123456API 密钥:abcdefghijklmnopqrstuvwxyz

为什么要用base64加密再解密嘞?

看下面知识点:


base64加解密获取源代码

php://filter/convert.base64-encode/resource=目标文件路径

在利用 PHP 伪协议读取文件时,使用 Base64 编码而非直接读取的主要原因是绕过 PHP 解释器对代码的执行,并确保文件内容完整传输。

以下是详细示例:

1. 直接读取的问题:PHP 会执行代码

假设 action.php 包含以下内容:

如果直接通过文件包含漏洞读取(例如 ?file=action.php),PHP 解释器会执行代码而非返回源码:

  • 输出结果Hello from PHP!
  • 源码丢失$password = \"secret123\"; 等代码不会显示,攻击者无法获取敏感信息。

2. Base64 编码的作用:获取完整源码

使用 php://filter/convert.base64-encode 后:

  • 输出结果
    PD9waHANCg8Ly8gYWN0aW9uLnBocA0KZWNobyAiSGVsbG8gZnJvbSBIUEgiOw0KJHBhc3N3b3JkID0gInNlY3JldDEyMyI7DQo/Pg==
  • 解码后

核心原理
Base64 编码将 PHP 代码(如 )转换为纯文本字符串,PHP 解释器会将其视为普通文本而非可执行代码,从而完整保留源码内容。

 所以我们用php伪协议查看action.php的源代码

访问  /action.php?file=php://filter/convert.base64-encode/resource=action.php

得到源码

PD9waHANCnNlc3Npb25fc3RhcnQoKTsNCmVycm9yX3JlcG9ydGluZygwKTsNCiRuYW1lID0gJF9QT1NUWyduYW1lJ107DQppZigkbmFtZSl7DQoJJF9TRVNTSU9OWyJ1c2VybmFtZSJdID0gJG5hbWU7DQp9DQppbmNsdWRlKCRfR0VUWydmaWxlJ10pOw0KPz4NCjwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCjwvaGVhZD4NCjxib2R5Pg0KPGEgaHJlZj1hY3Rpb24ucGhwP2ZpbGU9MS50eHQ+bXkgZGFpcnk8L2E+DQo8YSBocmVmPWFjdGlvbi5waHA/ZmlsZT0yLnR4dD5teSBib29rbGlzdDwvYT4NCjwvYm9keT4NCjwvaHRtbD4=

Base64 编码/解码 - 锤子在线工具解码查看源代码

my dairymy booklist

开始分析源代码

这段 PHP 代码实现了一个简单的会话管理和文件包含功能。当用户通过 POST 方法提交表单时,脚本会将用户名存入会话变量$_SESSION[\"username\"]中。页面提供了两个链接,分别指向1.txt2.txt文件,用户点击后,脚本会通过include语句动态加载并执行 URL 参数file指定的文件内容。然而,该代码存在严重的安全隐患,因未过滤file参数存在目录遍历 / 远程文件包含漏洞,且未处理name参数导致 PHP 代码注入攻击

知识点

Session文件包含

是一种常见的安全漏洞,它允许攻击者通过包含恶意代码的Session文件来执行代码。

利用Session文件包含的条件

要利用Session文件包含漏洞,需要满足两个条件:

  1. Session文件的内容可控,即攻击者可以通过某种方式将恶意代码写入Session文件中。

  2. 能够获取Session文件的路径,这样才能通过文件包含函数来执行Session文件中的代码。

条件1可以通过name实现,条件2这题只能靠猜

在默认配置下,PHP 的 session 文件存储位置通常存放在 /tmp 目录,文件名格式为 sess_

 可以在cookie里看

因此直接访问

/action.php/?file=/tmp/sess_khhpgb61isvcak15o84n6e8sl7

哎哎,有反应,进入session文件了

接下来有2个方法拿到flag

 方法一:PHP 代码注入攻击

用post请求发送   name=  (没反应的话多点几次Execute刷新一下)

没看到flag文件,加个/进入根目录查看

/:根目录,表示整个文件系统的顶层。

name=

这时看到了flaggggg文件,查看该文件

name=name=name=

 参数解析:

1. sort 命令的作用

sort 是 Linux/Unix 系统中的命令,用于对文本内容进行排序并输出结果。常见用法:

  • 对文件内容按行排序:sort filename
  • 去重并排序:sort -u filename
  • 逆序排序:sort -r filename

2./flaggggg 指根目录下名为 flaggggg 的文件。

这时就有个问题了:为什么要进入session文件后再用PHP 代码注入攻击

当 PHP 脚本调用session_start()时,会自动创建或加载一个会话文件,默认存储在服务器的临时目录(如/tmp/sess_)。这个会话文件默认是个php文件,会执行其中的 PHP 代码。

方法二 :传木马连蚁剑

关于session文件包含,指的是有时Web系统会把我们的一些变量写入session文件,我们可以借此机制将PHP木马写入PHP文件中,然后使用文件包含来包含该session文件,以此获取目标系统的shell权限。
这种攻击方式的好处在于,可以利用保存在session中的数据;这种攻击方式的前提在于我们可以准确的找到session文件的存储目录。

发送POST请求(多点几次Execute刷新一下)

name= 

蚁剑连接shell 

知识点

Shell 是什么?

Shell 是一种允许用户与操作系统交互的程序,也指攻击者通过漏洞获得的远程执行权限。在渗透测试中,通常分为两种:

  • WebShell
    攻击者上传到目标服务器的脚本文件(如 PHP、ASPX、JSP),通过 HTTP 请求执行系统命令。
    示例(PHP WebShell)

     // 接收URL参数cmd并执行系统命令

     

    访问方式:http://target.com/shell.php?cmd=ls

  • 反弹 Shell
    目标服务器主动连接攻击者的主机,建立交互式命令行会话(如 Linux 的 bash、Windows 的 cmd)。

连接成功,寻找flag

 

flag{43306e8113f53ece238c0a124432ce19}

@Don\'t touch me

这题也很简单

方法一:
F12(右键查看源码)可以看到:

访问/2.php

可以看到这有个按钮,却点不了

F12(右键检查),把disabled=\"disabled\"都删了,回车,点击按钮

可以看到最后有fla.php,访问/fla.php,得到flag

方法二:

直接用目录扫描工具扫出来

flag{0cee5a97f12b172ceeea2e9f67b7413e}

@robots

这题非常简单 

robots.txt 

是一个位于网站根目录下的纯文本文件,用于告诉搜索引擎爬虫(如 Googlebot、百度蜘蛛等)哪些页面可以抓取,哪些页面不应该抓取,是网站与搜索引擎之间的 “协议”。

直接访问/robots.txt就行

发现有个文件/fl0g.php,访问得到flag

flag{2f37589152daf6f111b232ef4aea1304}