文件包含漏洞(系统性)

这两个链接有兴趣自己可以去参考下
文件包含漏洞
PHP文件包含漏洞


文件包含分为本地文件包含远程文件包含,可以直接执行包含文件的代码,包含的文件格式是不受限制的。文件包含漏洞大多可以直接获取webshell,

文件包含漏洞的成因:
文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就 可能导致意外的文件泄露甚至恶意的代码注入。

文件包含的函数:
include()和include_once():在包含文件时即使遇到错误,下面的代码依然会执行;
require()和require_once():会直接报错退出程序。

漏洞利用:
(1)上传包含一句话木马的任意文件,记录好路径;
(2)利用文件包含漏洞上传文件

本地文件包含
本地文件包含,做了过滤不能远程
一般结合上传漏洞进行getshell
远程文件包含
需要设置allow_url_include = On和allow_url_fopen = On
危害大于本地文件包含,直接调用一个远程文件木马就能getshell

附加:
包含日志文件getshell
日志文件要知道是什么服务器搭建的
抓包可以知道服务器类型,
查找该类服务器错误日志的默认路径,file=路径
用Ckinfe把路径拼接起来
结合Apache日志Getshell
(1)将webshell代码写在URL中,抓包访问
注意:在数据包中要对webshell代码进行urldecode操作,否则被记录到日志中的webshell代码是编码后的
(2)包含日志文件获取webshell,可以包含access.log也可以包含error.log,此两者均存放在apache/logs/目录下

webshell:就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。
黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。


DVWA

(File Inclusion)
low(没有做加固)

第一部分(前期准备)

文件包含漏洞首先要修改php.ini(这样才可以测试漏洞)
allow_url_include :允许url里包含文件要打开(开发人员可能会把这个值忘了,这也是导致文件包含漏洞的原因之一)
启用方式:在终端里:

find / -name php.ini

修改apache2下的:

vim /etc/php/7.0/apache2.php.ini

找到allow_url_include=off,修改为on(默认为off),
然后Ctrl+C后,:wq保存并退出
再重启apache服务:

service apache2 restart

cd一步步进入,最后 /var/www/html/dvwa/vulnerabilities/fi
ls一下就可以看到三个文件了

第二部分Low

(没有啥加固措施)

(1)本地文件包含

包含本地的文件,也就是包含目标主机的文件
low级别的源码:直接file接收page参数,page传啥显示啥
漏洞利用:将url里的include.php换成/etc/shells(kali上的shells,实现本地包含),把操作系统的shell值显示出来
(或者这种利用方式:在url里/etc/password:把网站操作系统的用户给列出来(很危险))
验证漏洞被利用(显示出来的值是正确的):终端里 # cat /etc/shells,里面的东西出来了

(/etc/shells是绝对路径)
(cat file1.php可以查看文件内容)
(cd / 直接进入根目录)

(2)远程文件包含

被包含的文件在第三方服务
(2.1)初步准备,建一个网站,以便远程文件包含
进入根目录:cd /var/www/html
建个网站fit:mkdir fit
ls下发现有fit目录
进入fit:cd fit
ls发现啥也没有(因为自己没有加东西)

vim f1.txt

在里面写些内容,保存退出:wq
(2.2)在浏览器访问网站
在kali虚拟机上:http://127.0.0.1/fit/f1.txt
发现可以访问f1.txt 的内容,
在DVWA的low安全下,将file=后面的改为http://127.0.0.1/fit/f1.txt,发现可以访问到f1.txt的内容,
这种情况下,如果是将一串恶意代码写入f1.txt,此时也会被执行

第三部分:Medium

(加固措施:使用str_replace()函数,过滤了远程文件包含(http://,https://)和本地文件包含的相对路径,但是,绝对路径没有过滤掉)
解决方式:远程文件包含就双写http;本地文件包含就使用绝对路径或者双写绕过相对路径

(绝对路径:/var/www/html/dvwa/php.ini
相对路径:…/…/…/dvwa/php.ini 没有固定几个“’…/”如果没写对,继续加,在low下试试是几个)

(3.1)本地文件包含
page=后面加相对路劲 发现相对路径被过滤掉了
page=后加上绝对路径 没有被过滤
(3.2)远程文件包含
绝对路径的双写绕过:page=hthttp://tp://127.0.0.1/file.txt
因为http://被过滤了,于是把"http://"插入一个http里(“http://”被过滤,就留下一个http,而且输入的不是http://,不会被过滤,成功绕过http了!)
相对路径的双写绕过:page=…/./…/./…/./dvwa/php.ini(把…/给过滤掉之后,是…/…/…/dvwa/php.ini)

第四部分High

(加固措施:fnmatch()函数,文件名必须以file开头,而且不包含include.php)
解决方式:使用file:///,同时文件路径不是include.php(只要file协议里要包含的文件不是include.php就可以)

(4.1)file协议(本地文件传输协议):用于访问本地计算机中的文件,
语法: scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]
打开C盘的东西就是:file:///c:/..... ,在“我的电脑”里这个file:///没有写出来,但是它使用的就是file协议
Windows下:比如在某个浏览器的URL栏输入:
file:///D: 这样就可以在浏览器的页面里呈现自己主机里D盘下的文件啦
Linux下:比如file:///var/www/html/dvwa/php.ini

(4.2)fnmatch 匹配文件名或路径名
比如fnmatch(“file”,$file),输入配置里的文件名要以file开头
page=后面改成file:///var/www/html/dvwa/php.ini (这样就是以file开头并且打开自己想要打开的文件)
(find / -name php.ini 可以在根目录下寻找php.ini 文件)

第五部分impossible

其他加固的方法:指定包含的文件 的名字


下面这部分正在研究中,此处为草稿

phpStudy2018
启动,搭建一个Web服务器 ,打开,

Cknife和菜刀功能一样,没有后门,菜刀常常被爆后门
(有机会搭建一个nginx服务器)
第一步:将一句话木马写入url,
错误日志里写入木马
第二步:/var/log/nginx/error.log
包含错误日志
第三部打开c刀,模拟终端里输入命令

文件包含漏洞
菜刀可以直接连接,也就是说不管后缀是什么样,最后都会以php的形式执行

问题1:

源代码显示自动在最后加后缀".php"的情况
使用 %00截断 (直接在url最后加%00,就可以截断那个自动添加的后缀)
(好像也可以加 ? )

问题2:

读取的是base64编码的:

由于XXE漏洞的特殊性,我们在读取HTML、PHP等文件时可能会抛出此类错误parser error : StartTag: invalid element name,可能这是远程文件名不能为php后缀的原因
远程的文件名不能为php可解析的扩展名(php、php5…),而且php.ini中allow_url_fopen和allow_url_include为On才可以。
http://blog.51cto.com/tdcqvip/1958654

read=convert.base64-encode(看下面的例子)


BugkuCTF中的"flag 在index里"

php://filter读取本包含漏洞脚本的源码

修改url,使用base64编码:

file=php://filter/read=convert.base64-encode/resource=index.php

然后就可以得到flag啦


下面摘自大佬的笔记:php://filter的妙用

为了读取包含有敏感信息的PHP等源文件,我们就要先将“可能引发冲突的PHP代码”编码一遍,这里就会用到php://filter

将POST内容转换成base64编码并输出:
readfile(“php://filter/read=convert.base64-encode/resource=php://input”);

大佬的笔记里有个不管输入什么都不会执行的死亡exit例子,很值得看

你可能感兴趣的:(专攻性,CTF,漏洞类,漏洞类)