php代码审计小技巧

1、file_put_contents()函数:众所周知此函数是将一个字符串写入至文件中。

  

  看到此函数说明当传入数据为数组时,会被PHP强制转换为字符串,因此会绕过正则达到getshell的目的。

<?php
    $test = [1,2,3,4,5];
    var_dump($test);
    $test1 = (string)$test;
    print_r("string is :" .$test1);
    var_dump($test1);
?>

  以上代码可以看到被强制转换数据类型后字符串的值

  

  可以清楚的看到被强制转换后字符串的值为:Array、故此可以绕过部分过滤正则

  例如:

<?php
	$test = $_GET['test'];
	if(preg_match('/[<?]/',$test)){
		die("error");
	}
	file_put_contents('shell.php',$test);
?>

  首先将test的值设置为字符串:

    

  可以看到为错误,并未写入数据,此时再将test的值变为数组:

  

  此时虽然出错,但恶意数据已近被写入至文件中:

  

  

 

posted @ 2019-06-12 10:32  Spec·  阅读(569)  评论(0编辑  收藏  举报