联合注入小技巧
Posted 南舍QAQ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了联合注入小技巧相关的知识,希望对你有一定的参考价值。
被一只小恐龙催更了!!!
啊啊啊,这是昨天的更!!!
呜呜呜,别催了!!!!
-
php常见过滤函数
-
str_replace
对字符串进行替换
str_replace(find,replace,string,count)
参数 描述 find 必需。规定要查找的值 replace 必需。规定替换find中的值的值 string 必需。规定被搜索的字符串。 count 酷炫对替换数进行计数的变量 在PHP 5.0 的版本新增了count。在PHP4.3之前,该函数的find和replace参数都为数组时讲会遇到麻烦
例子:
<?php $arr=array("union","sleeep"); $sql="select * from admin where union id =1"; print_r(str_replace($arr,"",$sql,$i)); echo "<br>"; echo $i; ?>
显示
-
preg_replace
对字符串进行替换
preg_replace(正则表达式,replace,string)
例子:
$sql=preg_replace('/union|sleep/','',$sql);
-
正常情况下
preg_replace
可以通过大小写进行绕过,但是当模式分割符后面出现标记i
是则不能绕过if(preg_replace('/union|sleep/i',$sql)){ echo "no,no,no"; exit(); }else{ echo $sql; }
-
-
preg_match
对字符串进行匹配,存在则为正
preg_match(正则表达式,字符串)
例子:
if(preg_match('/union|sleep/',$sql)){ echo "no,no,no"; exit(); }else{ echo $sql; }
-
-
绕过技巧
-
大小写绕过
对于
str_replace
和preg_replace
可以通过大小写进行绕过例如:union替换为Union
-
双写绕过
原理:在使用
preg_replace
函数过程中,默认情况下只进行一次匹配。因此如果匹配到字符串替换为空的情况,就可以双写绕过例子
$sql= preg_replace('/union|sleep/i','',$sql);
以上代码,可以使用i表示到小写全部匹配,此时无法使用双写绕过。但是由于
preg_replace
默认只匹配一次过滤字符,因此可以使用双写绕过例如:union替换为uniunionon
preg_math会将中间的union进行过滤
-
过滤单引号绕过 十六进制
基础:在mysql数据库中的SQL语句,对于字符串数据必须使用引号。但是对于字符串来说,mysql也识别字符串中每个字符对应地ASCLL码地16进制,此时可以使用0x16进制替换字符串。从而绕过引号对于字符串地限制
addslashes() //该函数返回在预定义字符之前添加反斜杠地字符串。
预定义字符:
单引号(’)
双引号(")
反斜杠(\\)
NULL
该函数可用于为储存在数据库中地字符串以及数据库查询语句准备字符串。
或者在 php.ini配置文件中,开启 magic_quotes_gpc选项,此时对于数字型注入来说,如果需要进行数据库中数据获取,需要使用十六进制进行绕过。但是对于字符型注入来说,就需要进行逃逸引号的操作。
-
宽字节注入原理与利用
基础:如果数据库中存储数据使用的编码方式是GBK,那么由于用户输入的内容会进行双字节的组合,会导致用户输入的字节与反斜杠组合,从而逃逸引号。
宽字节注入可以说是一种逃逸引号的技巧,利用双字节组合导致注入产生。
主要有一种情况下是无法使用联合查询注入利用方式:
preg_math('/union/i')
,完全过滤
-
以上是关于联合注入小技巧的主要内容,如果未能解决你的问题,请参考以下文章