【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.txt
和2.txt
文件,用户点击后,脚本会通过include
语句动态加载并执行 URL 参数file
指定的文件内容。然而,该代码存在严重的安全隐患,因未过滤file
参数存在目录遍历 / 远程文件包含漏洞,且未处理name
参数导致 PHP 代码注入攻击。
知识点
Session文件包含
是一种常见的安全漏洞,它允许攻击者通过包含恶意代码的Session文件来执行代码。
利用Session文件包含的条件
要利用Session文件包含漏洞,需要满足两个条件:
Session文件的内容可控,即攻击者可以通过某种方式将恶意代码写入Session文件中。
能够获取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}