1.搜索關鍵字如select from、update、insert、delete
、mysql_connect
、mysql_query
、mysql_fetch_now
等關鍵字可定向挖掘SQL注入漏洞。php
2.urlencode、urldecode、rawurlencode、rawurldecode
區別。使用不當可致使寬字節注入。
除了 -_.
以外的全部非字母數字字符都將被替換成百分號(%)後跟兩位十六進制數。urlencode
和rawurlencode
的區別:
1)urlencode
將空格則編碼爲加號(+)
2)rawurlencode
將空格則編碼爲加號(%20)
payload:mysql
.../1.php?id=1df%' union select 1,database()# '單引號自動轉義在前面加了/'---通過urlencode洗禮後也就是5c% 若是php鏈接數據庫的時候設置了set character_set_client=gbk,就是告訴mysql服務器 客戶端 數據來源是GBK格式 這時df%5c%會被decode成一個漢字。
寬字節注入搜索關鍵字SET NAMES、character_set_client=gbk、mysql_set_charset('gbk')
sql
payload:%2527 %25進行解碼後爲% 再次解碼%27結果爲'(單引號)
原理是當某處使用了urldecode()
或者rawurldecode()
函數,當咱們提交參數到WebServer的時候。WebServer會自動解碼一次。而後在通過函數的二次解碼。生成單引號引起注入。
能夠搜索這兩個函數的關鍵詞進行定位。數據庫
若是magic_quotes_gpc=On(php6以上沒有此選項)
PHP解析器就會自動爲post、get、cookie過來的數據增長轉義字符,和函數addslashes功能差很少數組
(php4.0.3版本以上才存在)
做用是轉義特殊字符,包括:安全
\x00 \n \r \ ' " \x1a
move_uploaded_file($temp_file, $img_path) trim($file_name)#移除字符串兩側的空白字符或其餘預約義字符 strrchr($file_name, '.')#返回'.'在$file_name最後出現的位置到$file_name字符串末尾這一段字符串 strtolower($name)#轉換爲小寫 str_ireplace('a','',$name)#將$name中的'a'/'A'(不區分大小寫)替換成''(也就是刪除) in_array($name,$array)#查詢$name是否在$array中 substr($string,$start,$length)#$start(0,-1),均是從左往右 strrpos($name,'.')#返回'.'在$name字符串中最後出現的位置(從0開始) fopen($filename, "rb")#打開$filename二進制只讀模式 fread($filbit,2)#只讀兩個字節 unpack("C2chars", $bin)#將字節轉化爲字節二進制的數組 intval($strInfo['chars1'].$strInfo['chars2'])#intval函數做用是提取整數(參數包括字符串和整數) getimagesize($filename)#檢測圖片類型,返回數組。不是絕對安全,可繞過 image_type_to_extension('int')#返回後綴名,參數範圍可參照getimagesize函數返回結果索引3 stripos($name,'.')#返回'.'在$name字符串中首次出現的位置(從0開始) #獲取文件名後綴: 第一種方法: strtolower(substr($_FILES[$n]["name"],strrpos($_FILES[$n]["name"],'.')+1)) 第二種方法: $uptype = explode(".",$_FILES["file"]["name"]);//獲取擴展名 $kuozm=strtolower(end($uptype));