代码审计笔记

文章探讨了PHP中的文件包含漏洞,特别是通过include和require函数可能导致的安全问题。提到了三种测试类型——白盒、黑盒和灰盒测试,并详细解析了一个包含多个条件检查的示例代码,以防止恶意的文件包含。条件包括目标变量非空、为字符串、不以特定字符串(如index)开头、不在黑名单数组中,以及通过`checkPageValidity`函数验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

渗透测试
    白盒:基于内部的测试,
    黑盒:基于外部的测试
    灰盒:既有功能点又有源代码


在php文件包含:include\require


代码审计:
    1.找关键函数
    2.全文通读

文件包含:include、require
漏洞:如何控制漏洞呢------传参点
include('./inc.php');
include("$_POST[1]")


第八行:include $_REQUEST['target']    
if (! empty($_REQUEST['target'])
    && is_string($_REQUEST['target'])
    && ! preg_match('/^index/', $_REQUEST['target'])
    && ! in_array($_REQUEST['target'], $target_blacklist)
    && Core::checkPageValidity($_REQUEST['target'])
) {
    include $_REQUEST['target'];
    exit;
}


当if语句中的条件表达式为true,则执行include代码
共有五个条件表达式
! empty($_REQUEST['target'])
&& is_string($_REQUEST['target'])
&& ! preg_match('/^index/', $_REQUEST['target'])
&& ! in_array($_REQUEST['target'], $target_blacklist)
&& Core::checkPageValidity($_REQUEST['target'])  

第一个:
    ! empty($_REQUEST['target'])===>true
    empty($_REQUEST['target'])===>false
    empty(var) 函数用于检查一个变量是否为空,为空则为true
        当 var 存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE

    target传参需要值,可以满足


第二个:
    is_string($_REQUEST['target'])
    is_string() 函数用于检测变量是否是字符串
    如果指定变量为字符串,则返回 TRUE,否则返回 FALSE

    可以满足


第三个:
     ! preg_match('/^index/', $_REQUEST['target'])===>true
    preg_match('/^index/', $_REQUEST['target'])==>false
    返回匹配次数。 它的值将是 0 次(不匹配)或 1 次
    0--false   1---true

    target传参不能以index开头的文件  index.php  index.html


第四个:
    ! in_array($_REQUEST['target'], $target_blacklist)===>true
    in_array($_REQUEST['target'], $target_blacklist)===>false

    in_array数组中找到值则返回 TRUE,否则返回 FALSE
    target传参值不能有$target_blacklist的值

    $target_blacklist = array ('import.php', 'export.php');

    target传参不能只传入import.php、export.php
    可以满足


第五个:
    Core::checkPageValidity($_REQUEST['target'])===>true


    public static function checkPageValidity($page, array $whitelist = [])
                    $page = $_REQUEST['target']

    $whitelist===> public static $goto_whitelist = array()


strpos() 函数查找字符串在另一字符串中第一次出现的位置
    strpos(string,find)

返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值