被一只小恐龍催更了!!!
啊啊啊,這是昨天的更!!!
嗚嗚嗚,別催了!!!!
-
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'),完全過濾
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/344126.html
標籤:其他
下一篇:SpringCloud+ Spring Boot + Mybatis + Uniapp分布式微服務企業快速架構之云架構&設計思想
