渗透测试
白盒:基于内部的测试,
黑盒:基于外部的测试
灰盒:既有功能点又有源代码
在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
标签:审计,index,target,代码,REQUEST,笔记,&&,array,include From: https://www.cnblogs.com/Crushz-2024/p/18390461