SQL注入時,攻擊人員是怎樣知道目標網站的資料庫結構的?
就算最簡單的注入,也需要知道資料庫的欄位名等信息,那麼攻擊者是怎樣知道資料庫的結構的呢?
有些網站有代碼泄漏漏洞,那麼可以直接拿到庫結構,例如jar可以下載或者存在備份源碼文件等等。
有些漏洞帶回顯,返回的信息會暴露庫結構。
有些沒有回顯的可以根據返回的錯誤信息判斷是否存在特定表名和欄位名,那就可以用字典暴力跑。
以上什麼都沒有,出了錯直接返回首頁的,那隻能靠經驗和社會工程學猜了。
說靠經驗的也並沒有錯,比較資深的程序員一般都能猜出常用表和欄位名,這所以從信息安全的角度來說命名太規範也未必是好事。現在這個時代,SQL注入學習有2種辦法:
1、直接「偷窺」SQL注入自動化工具的攻擊過程。例如 @WeirdBird 提到的方法,或者自己用burp做代理收集工具的掃描過程產生的所有payload;
2、看「書」+手工實踐。我自己是這麼學過來的,看過的最經典的SQL注入原理文檔是這本「老鷹書」:http://www.northernfortress.net/sqlinference.pdf 05年的,距今整10年了,但相比較1998年phrack 54上的SQL注入開荒文獻來說,這篇文章我認為是SQL注入方法論的封箱之作(文章內的所有參考文獻都是經典,值得考古)。從此,世間不再需要SQL注入方法的「文檔」,我們只需要專註於SQL注入自動化工具的實現。既然有注入,那麼攻擊者就可以輸入他構造的語句去查詢你資料庫的庫、表、列。
寫一個簡單的思路,拿mysql做例子吧,mysql默認會有一個 information_schema庫,這個庫中會包含你整個mysql裡面的結構信息。
例如現在有一個注入,我想知道庫底下都有什麼表:
我先執行一個 SELECT DATABASE();查看你當前的庫
接著我再 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = "資料庫名";就能看到你當前庫的表名
再接著看列的話就是 SHOW columns FROM 表名;
當然了,實戰中遠遠沒這麼容易,但是會有sqlmap、穿山甲等注入工具來作為輔助,工具構造的語句那是相當繁瑣,還特么各種猥瑣。
希望能解開你心中的迷惑~~~
你都說了sql注入。sql注入的原理就是將sql想方設法插入到網站程序執行的sql語句中。既然存在sql注入,那麼攻擊者自然可以執行sql語句以此查詢資料庫結構了。
「Web安全之SQL注入攻擊技巧與防範」
PHP中該怎樣防止SQL注入?
推薦閱讀:
※ASP.Net如何發布便於安裝的帶Excel功能的網站?
※對於想學習MySQL高級查詢語句的人,有哪些優秀的圖書、網站推薦?
※為什麼有些網站上漢語拼音字元高度不一致?該如何解決?
※如何看待國內聚會網站?國外有 Meetup、Evite 或者 Facebook 中的 event,為什麼同類網站在中國非常少見?
※社會學方面有哪些一流的研究、資訊、期刊網站?