Php中
include(),include_once()
require(),require_once()
allow_url_include = Off
是否允许include/require打开URL(如http://或ftp://)作为文件处理。
文件包含大致分为两类
1.本地文件包含漏洞:仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击着更多的会包含一些 固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。
2.远程文件包含漏洞:能够通过url地址对远程的文件进行包含。
文件包含的定义
识别:允许文件包含的任何地方
验证:修改其网站目录的执行逻辑
首先打开之后查看网站情况
是选择一个提交查询界面,随机选择一个进行查询,得到结果如下
通过url变化来看,发现其中有filename=file1.php,可以分析出这是包含了一个PHP文件进来
那么我们可以测试是否存在包含漏洞,首先我们在网站根目录下创建一个test.php文件
尝试进行文件的包含
输入test.php测试,报错,是因为目录不在当前目录,我们要使用../进行上级目录查询
成功查询出
文件包含的利用方式:
1. 文件包含/etc/passwd
2. 文件包含图片,将恶意代码写进图片
3. 包含日志文件getshell
文件包含的常用路径:
包含日志文件 getshell
/usr/local/apache2/logs/access_log
/logs/access_log
/etc/httpd/logs/access_log
/var/log/httpd/access_log
读取网站配置文件
dedecms 数据库配置文件 data/common.inc.php,
discuz 全局配置文件 config/config_global.php,
phpcms 配置文件 caches/configs/database.php
phpwind 配 置 文 件 conf/database.php
wordpress 配置文件 wp-config.php
包含系统配置文件windows
C:/boot.ini//查看系统版本
C:/Windows/System32/inetsrv/MetaBase.xml//IIS 配置文件
C:/Windows/repairsam//存储系统初次安装的密码
C:/Program Files/mysql/my.ini//Mysql 配置
C:/Program Files/mysql/data/mysql/user.MYD//Mysql root
C:/Windows/php.ini//php 配置信息
C:/Windows/my.ini//Mysql 配置信息
linux
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts
/etc/passwd
/etc/shadow
/etc/my.cnf
/etc/httpd/conf/httpd.conf
/root/.bash_history
/root/.mysql_history
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts
/porc/config.gz
远程文件包含,和本地包含的差别是可以采用链接网址的方式进行文件包含
前提是当 allow_url_fopen=On allow_url_include=ON 两个条件同时为 On 允许远程包含文件。
同样是url发生了变化
进行修改远程文件的位置进行测试,写一个登录页面,将url复制过来,成功进行包含
文件下载
文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
识别:提供文件下载的地方
验证:改变其文件下载的执行逻辑
Level 1
进入网站
点击下载,发现直接就进行文件下载操作,url未进行任何变化,打开bp进行抓包分析
通过抓包发现,是以get方式请求了一个png文件,此时如果将文件名改为一些默认敏感名是否能够请求成功呢?
抓包进行添加路径请求index文件
继续往上一目录查找
跨三层目录成功下载index.php文件
| 留言与评论(共有 0 条评论) “” |