dvwa⽂件包含_⽂件包含漏洞原理介绍及利⽤
昨天⼀个朋友突然问我关于⽂件包含漏洞包含图⽚马,然后连接菜⼑的问题,我三下五除⼆给说完了,然后个DVWA的环境给演⽰⼀下。这下出问题了,不管怎么弄就是不能使⽤菜⼑连接,可以显⽰phpinfo信息,可以使⽤system()函数执⾏命令,但是就是不能使⽤菜⼑连接,我甚⾄⼀度怀疑我的⼀句话⽊马有问题。最后请⼤佬来演⽰,结果搞了⼀个⼩时都不能连接,我们⼀共五个⼈⼀度陷⼊⾃闭,⼤佬差点也晚节不保,最后有⼈提出来会不会是DVWA的⽂件包含不允许连接图⽚马,我们茅塞顿开,赶紧⾃⼰搭环境试试,最后成功了。好了,DVWA环境背锅。然后利⽤周末将⽂件包含漏洞总结了⼀下,还是有些不全⾯,以后慢慢补充。
⼀、⽂件包含漏洞介绍
0x01 ⽂件包含简介
开发者将相同的函数写进单独的⽂件中,需要使⽤某个函数时直接调⽤此⽂件,⽆需再次编写。这种⽂件调⽤的过程称为⽂件包含。
0x02 为什么要包含⽂件
程序员写程序的时候,不喜欢⼲同样的事情,也不喜欢把同样的代码(⽐如⼀些公⽤的函数)写⼏次,于
是就把需要公⽤的代码写在⼀个单独的⽂件⾥⾯,然后在其它⽂件进⾏包含调⽤。这就导致了⽂件包含的出现。
0x03 ⽂件包含漏洞原理
⽂件包含时由于每次调⽤的函数是不确定的,因此,在函数⾥⾯不能直接将被包含的⽂件写死,这样就必须使⽤变量来将⽤户输⼊的⽂件名传进去,这就导致了被包含⽂件是⽤户可控的,这样就可能会造成包含⼀些恶意⽂件,并且这些⽂件会在需要使⽤的时候将它们包含在特殊的代码中,这样包含的⽂件中的代码就会执⾏。如果没有针对代码中存在⽂件包含的函数⼊⼝做过滤,那么就可能会导致客户端可以提交恶意的语句,并且这些语句会交由服务器端进⾏执⾏。这样就可能会泄露敏感信息或者执⾏恶意代码。
⼆、⽂件包含相关知识介绍
0x01 ⽂件包含漏洞的类型
⽂件包含漏洞分为本地⽂件(LFI)包含和远程⽂件包含(RFI)。
本地⽂件包含漏洞(Local File Include)
当被包含的⽂件在服务器本地时,就形成的本地⽂件包含漏洞。 本地⽂件包含⼀般会配合⽂件上传漏洞进⾏利⽤。⽐如存在如下场景,当⽬标服务器上对上传的⽂件进⾏了限制,只能上传jpg类型的⽂件,但是如果⽬标服务器存在⽂件包含漏洞,就可以通过上传图⽚类型的⼀句话⽊马,然后配合⽂件包含漏洞,就可以成功解析php代码,使⽤菜⼑拿到webshell了。
远程⽂件包含(Remote File Include)
远程⽂件包含和本地⽂件包含造成漏洞的原因是⼀样的,但是有⼀个前提条件就是php.ini中的配置选项allow_url_include必须为ON,这样包含的⽂件可以是第三⽅服务器中的⽂件,这样就形成了远程⽂件包含漏洞。如果可以进⾏远程⽂件包含,那么就可以在⾃⼰的VPS上写上⼀句话⽊马,然后使⽤远程⽂件包含,包含这个⽂件,这样就可以成功getshell。
0x02 ⽂件包含常见函数
1.PHP⽂件包含相关函数如下
include()函数
不到被包含的⽂件,只会报错,但会继续执⾏脚本。
include_once()函数
与include()函数类似,区别在于重复调⽤同⼀⽂件时,程序只调⽤⼀次。
require()函数
不到被包含的⽂件,会报错,并且停⽌执⾏脚本。
require_once()函数
与require()函数类似,区别在于重复调⽤同⼀⽂件时,程序只调⽤⼀次。
fopen()函数
打开⽂件或者 URL,如果打开失败,本函数将返回false。
readfile()函数
该函数读⼊⼀个⽂件并写⼊到输出缓冲,若成功,则返回从⽂件中读⼊的字节数;若失败,则返回false。
nginx和apache区别
2.JSP⽂件包含相关函数如下
java.io.File()函数
打开⼀个⽂件的函数
java.io.FileReader()函数
读取⼀个⽂件的函数
3.ASP⽂件包含函数如下
include file
包含⼀个⽂件(包含⽂件的相对路径)
include virtual
包含⼀个⽂件(包含⽂件的虚拟路径)
0x03 ⽂件包含的特征
绕过URL中如果出现了如下内容就可能存在⽂件包含漏洞
·      ?page=
·
      ?file=
·      ?home=
0x04 ⽂件包含漏洞利⽤的前提条件
(1):web 应⽤采⽤ include 等⽂件包含函数,并且需要包含的⽂件路径是通过⽤户传输参数的⽅式引⼊。
(2):⽤户能够控制包含⽂件的参数,被包含的⽂件可被当前页⾯访问。
0x05 ⽂件包含中常见的敏感⽬录
Winodws
(1):查看系统版本:C:\boot.ini
(2):查看IIS配置⽂件:C:\windows\system32\l
(3):查看存储Windows系统初次安装的密码:C:\windows\repair\sam
(4):查看MySQL配置:C:\ProgramFiles\Mysql\my.ini
(5):查看MySQLroot密码:C:\ProgramFiles\mysql\data\mysql\user.MYD
(6):查看php配置信息:C:\windows\php.ini
Linux
(1):查看账户信息:/etc/passwd
(2):查看密码⽂件:/etc/shadow
(3):查看Apache2配置⽂件:/usr/local/app/apache2/f
(4):查看虚拟⽹站配置:/usr/local/app/conf/f
(5):查看php相关配置:/usr/local/app/php5/lib/php.ini
(6):查看Apache配置⽂件:/etc/httpd/f
(7):查看MySQL配置⽂件:/f
⽇志默认路径
(1):apache+Linux⽇志默认路径:/etc/httpd/logs/access_log或/var/log/httpd/access_log
(2):apache+win2003⽇志默认路径:D:\xampp\apache\logs\access.log或D:\xampp\apache\logs\error.log
(3): IIS6.0+win2003 默认⽇志⽂件:C:\WINDOWS\system32\Logfiles
(4):IIS7.0+win2003默认⽇志⽂件:%SystemDrive%\inetpub\logs\LogFiles
(5):nginx ⽇志⽂件:⽇志⽂件在⽤户安装⽬录 logs ⽬录下
以我的安装路径为例/usr/local/nginx,那我的⽇志⽬录就是在/usr/local/nginx/logs⾥
web 中间件默认配置
(1):apache+linux 默认配置⽂件:/etc/httpd/f或者index.php?page=/etc/init.d/httpd
(2):IIS6.0+win2003 配置⽂件:C:/Windows/system32/l
(3):IIS7.0+WIN 配置⽂件:C:\Windows\System32\inetsrv\fig
三、本地⽂件包含简单环境搭建
0x01 注意
本地⽂件包含不需要开启allow_url_include,只要传⼊的⽂件参数参数是可控的就可以。
0x02 重点
对于PHP环境,如果存在⽂件包含漏洞,被包含的⽂件会优先被当作php⽂件进⾏解析,如果被包含的⽂件中存在php代码,那么就会把⽂件类型按照php类型执⾏该⽂件中的php代码;如果不包含php代码,则会将其中的内容全部原样打印处理。(但是对于JSP来说,如果包含⼀个⾮JSP扩展名的⽂件时,即使其中的内容包含JSP,但是服务器也不会把该⽂件当JSP⽂件来处理)
0x03 本地⽂件包含作⽤
使⽤本地⽂件包含主要可以做两件事,⼀件事是可以读取⽬标主机上的⽂件,另⼀种是结合⽂件上传漏洞getshell。第⼆种利⽤⽅式需要⾸先给⽬标主机上上传⼀个含有php类型代码的⽂件,然后使⽤使⽤⽂件包含漏洞执⾏其中的代码,然后getshell。
0x04 ⽂件包含获取shell的条件
(1):攻击者需要知道⽂件存放的物理路径
(2):对上传⽂件所在⽬录拥有可执⾏权限
(3):存在⽂件包含漏洞;
0x05 搭建环境
代码如下
<?php $filename = $_GET['page'];include($filename);?>
四、本地⽂件包含利⽤
0x01 包含当前⽬录的各种类型⽂件(1):包含当前⽬录下的php⽂件
(2):包含当前⽬录下的txt⽂件
(3):包含当前⽬录下的jpg⽂件
0x02 包含⾮当前⽬录的⽂件
(1):使⽤相对路径查看⽂件
(2):使⽤绝对路径查看⽂件
0x03 包含⼀句话⽊马,使⽤菜⼑getshell (1):包含php类型

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。