《渗透测试》WEB攻防-PHP特性&缺陷对比函数&CTF考点&CMS审计实例 2022 Day20

发布时间 2023-03-23 22:16:31作者: muqing1
1

 

 

 

#知识点:

1、过滤函数缺陷绕过

2CTF考点与代码审计

 

#详细点:

1 =====

1.1 ==

 

 

 

 

 

 1.2 ===

a是 ‘1’ 

 

 

 

 

 

 

 

 

 

2 md5

MD5函数缺陷绕过 ==弱对比 ===强类型对比

 

 

 

 

//echo MD5('QNKCDZO');

//echo MD5('240610708');

 0e开头的MD5值相同

 

3 intval 缺陷绕过

将给定变量转换成整型变量。变量不能是array和object格式

$i='666';

$ii=$_GET['n'];

if(intval($ii==$i)){

echo $flag;

}

// 666.0 +666 都可以绕过

 

$i='666';

$ii=$_GET['n'];

if(intval($ii==$i,0)){

echo $flag;

}

 

//0x29a 使用了0 要换进制

 

 

//4、对于strpos()函数,我们可以利用换行进行绕过(%0a
strpos() f函数查找字符串在另一字符串中第一次出现的位置(区分大小写)。

string 必需。规定被搜索的字符串。
find

必需。规定要查找的字符。

start 可选。规定开始搜索的位置。

<?php

$i='666';

$ii=$_GET['h'];

if(strpos($i,$ii){

echo $flag;

}

 ?>

 

 

 

 

//?num=%0a666

 

 

 

//5、in_array第三个参数安全

in_array() 函数搜索数组中是否存在指定的值。

参数描述
needle 必需。规定要在数组搜索的值。
haystack 必需。规定要搜索的数组。
strict 可选。如果该参数设置为 TRUE,则 in_array() 函数检查搜索的数据与数组的值的类型是否相同。
如果第三个参数是TRUE,那么就会比较数据类型

 

$whitelist = [1,2,3];

$page=$_GET['i'];

if (in_array($page, $whitelist)) {

echo "yes";

}

 

 

 

//?i=1ex

 

 

//6、preg_match只能处理字符串,如果不按规定传一个字符串,通常是传一个数组进去,这样就会报错

preg_match 函数用于执行一个正则表达式匹配。

if(isset($_GET['num'])){

$num = $_GET['num'];

if(preg_match("/[0-9]/", $num)){ num的值不能输0-9

die("no no no!");

}

if(intval($num)){     num是数字类型才能输出flag

echo $flag;

}

}

 

 

 

 

//?num[]=1

 

 

 

//7、str_replace无法迭代过滤 (双写绕过)

str_replace() 函数替换字符串中的一些字符(区分大小写)。

$sql=$_GET['s'];

$sql=str_replace('select','',$sql);

echo $sql;

 

//?s=sselectelect

 

?>

 

 

➢ 原理-缺陷函数-使用讲解-本地

➢ 实践-CTFShow-PHP特性-89关卡

➢ 实践-代码审计-过滤缺陷-文件读取