PHP代码审计基础(五)

PHP黑魔法

大部分函数的使用已经在之前详细介绍过了,这里我就针对每一种函数大概介绍一下其主要存在的利用方法。

1.md5()

md5()函数绕过sql注入。我们来看一个例子。

代码示例:

$password=$_POST['password'];
$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";
$result=mysqli_query($link,$sql);
if(mysqli_num_rows($result)>0){
    
    
    echo 'flag is :'.$flag;
}
else{
    
    
    echo '密码错误!';
}

这里提交的参数通过md5函数处理,然后再进入SQL查询语句,所以常规的注入手段就不行了,那么如果md5后的转换成字符串格式变成了'or'xxxx的格式,不就可以注入了么。md5(ffifdyop,32) = 276f722736c95d99e921722cf9ed621c

转成字符串为'or'6xxx

2. eval()

在执行命令时,可使用分号构造处多条语句。类似这种。

<?php
	$cmd = "echo 'a';echo '--------------';echo 'b';";
	echo eval($cmd);
?>

3. ereg()

存在%00截断,当遇到使用此函数来进行正则匹配时,我们可以用%00来截断正则匹配,从而绕过正则。

4. strcmp()

这个在之前介绍过,就是数组绕过技巧。

5. curl_setopt()

存在ssrf漏洞。

代码示例:

<?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $_GET['Ameng']);
    #curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    #curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
    curl_exec($ch);
    curl_close($ch);
?>

使用file协议进行任意文件读取

在这里插入图片描述
除此之外还有dict协议查看端口信息。gopher协议反弹shell利用等。

6.preg_replace()

此函数前面详细介绍过,/e模式下的命令执行。

7.urldecode()

url二次编码绕过。

代码示例:

<?php
	$name = urldecode($_GET['name']);
	if($name = "Ameng"){
    
    
		echo "Plase~";
	}
	else{
    
    
		echo "sorry";
	}
?>

将Ameng进行二次url编码,然后传入即可得到满足条件

8. file_get_contents()

常用伪协议来进行绕过。

9. parse_url()

此函数主要用于绕过某些过滤,先简单了解一下函数的基本用法。

代码示例:

<?php
	$url = "http://www.jlx-love.com/about";
	$parts = parse_url($url);
	print_r($parts);
?>
    
执行结果——>
Array 
    ( 
    [scheme] => http 
    [host] => www.jlx-love.com 		[path] => /about 
	)

可以看到这个函数把我们的变量值拆分成一个几个部分。那么绕过过滤又是说的哪回事呢?其实就是当我们在浏览器输入url时,那么就会将url中的\转换为/,从而就会导致parse_url的白名单绕过。

猜你喜欢

转载自blog.csdn.net/pggril/article/details/123852987