没有合适的资源?快使用搜索试试~ 我知道了~
文件包含、命令执行漏洞、代码执行漏洞、基础代码审计
需积分: 0 1 下载量 201 浏览量
2023-09-26
14:12:11
上传
评论
收藏 4.14MB DOC 举报
温馨提示


试读
29页
文件包含、命令执行漏洞、代码执行漏洞、基础代码审计
资源推荐
资源详情
资源评论

















一、文件包含
1.1 漏洞原理
开发人员通常会把可重复使用的函数写到单个文件中,在使用到某些函数时,可直接调
用此文件,而无须再次编写,这种调用文件的过程被称为包含。
注意:对于开发人员来讲,文件包含很有用,可以简化代码。
文件包含漏洞的产生原因是在通过引入文件时,由于传入的文件名没有经过合理的校验,
或者校验被绕过,从而操作了预想之外的文件,最终造成攻击者进行任意文件包含。
注:包含的文件会被当成脚本文件进行解析。
文件包含本身是一种技术,但由于包含的文件不可控,就导致了文件包含的漏洞
漏洞类别:
文件包含漏洞分为本地文件包含(LFL,被包含的文件在本地服务器),远程文件包含
(RFL,被包含文件在远程服务器)
远程包含文件需要在 PHP 配置文件中开启
allow_url_fopen=On(默认为 On)规定是否允许从远程服务器或者网站检索数据
allow_url_include=ON(PHP 5.2 之后默认 Off),规定是否允许 include/require 远程文件
1.2 函数解析
首先我们来了解 4 个函数((php)
include:使用 include 引用外部文件时,只有代码执行到 include 代码段时,调用的外部文件
才会被引用并读取,当引用的文件发生错误时,系统只会给出个警告错误,而整个 php 文
件会继续执行。
require:在 php 文件被执行之前,php 解析器会用被引用的文件的全部内容替换 require 语句,
然后与 require 语句之外的其他语句组成个新的 php 文件,最好后按新的 php 文件执行程序

代码。
include_once:使用 include_once 会在导入文件前先检测该文件是否在该页面的其他部分被
引用过,如果有,则不会重复引用该文件,程序只能引用一次。(要导入的文件中存在一些
自定义函数,那么如果在同一个程序中重复导入这个文件,在第二次导入时便会发生错误,
因为 php 不允许相同名称的函数被重复声明)
require_once: require 语句的延伸,他的功能与 require 语句基本一致,不同的是,在应用
require_once 时,先会检查要引用的文件是不是已将在该程序中的其他地方被引用过,如果
有,则不会在重复调用该文件。(同时使用 require_once 语句在同一页面中引用了两个相同
的文件,那么在输出时,只有第一个文件被执行,第二个引用的文件则不会被执行)
1.3 靶场演示
Low
在 www 目录下创建 1.php 文件<?php echo “123456” ?>
(1)利用绝对路径访问
(2)远程文件访问

(3)利用 file 协议调用
Medium
观察代码,发现对 http://,https://进行了替换,可以将 http://,换成 htthttp://p://,

High
1.4 防护措施
1、无需情况下设置 allow_url_include 和 allow_url_fopen 为关闭
2、对可以包含的文件进行限制,可以使用白名单的方式,或者设置可以包含的目录,如
open_basedir
3、建议假定所有输入都是可疑的,尝试对所有输入提交可能可能包含的文件地址,包括服
务器本地文件及远程文件,进行严格的检查,参数中不允许出现../之类的目录跳转符。
4、严格检查 include 类的文件包含函数中的参数是否外界可控。
二、代码审计
2.1 测试类型
灰盒测试:有应用环境+有应用源代码;例如 dvwa 靶场,我们可以使用靶场,也可以查看
源码。
黑盒测试:只有应用环境,不知道源代码,只能通过页面或者应用内容进行猜测。
白盒测试:有源代码,应用源代码全部在本地,可以通过源代码去找漏洞
2.2 什么是代码审计
通过源代码去找漏洞的这个过程————代码审计
2.3 基于文件包含漏洞——进行代码审计
2.3.1 代码审计方法
(1)全文通读
(2)关键函数/危险函数定位

(3)自动化
如果被包含文件路径可控,则有任意文件包含漏洞?
2.3.2 代码审计过程
1、我们对 phpadmin4.8.5 进行审计,搜索关键词 include
点击查看
根据代码判断当完成 if 条件语句后会执行文件包含。
2、分析条件
! empty($_REQUEST['target']
(1)target 值不能为空
is_string($_REQUEST['target']
(2)必须是字符串
! preg_match('/^index/', $_REQUEST['target']
(3)preg_match 函数用于执行一个正则表达式匹配。前面为查找内容,后面是要
在这里面查找的字符串,所以这里不能以 index 开头
! in_array($_REQUEST['target'], $target_blacklist)
(4)这里$_REQUEST['target']搜索值,$target_blacklist 要搜索的数组
剩余28页未读,继续阅读
资源评论


打你的小脑斧
- 粉丝: 3
- 资源: 3
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
