幾年前,SQL注入在世界範圍内很流行,但現在,SQL注入仍然是最流行的攻擊方法之一,開發人員為此頭疼。當然主要是因為注入攻擊的靈活性,一個目的,多條語句,多種編寫方法。SQL注入可以分為工具和手工兩種。由于自動化,工具通常比手動注入效率高得多,但與手動注入相比,它們受到限制,因為它們沒有針對性。
所有的輸入都可能是有害的,有參數的地方都可能存在SQL注入。但是由于浏覽器的限制,http頭中的一些隐藏連結、API調用和參數往往被忽略。那麼如何進行全面的SQL注入挖掘呢?在滲透測試中,無論注入工具多麼強大,都會有局限性,手動注入可以解決這個弱點。當然,手動注入需要滲透者對資料庫的文法有一定的了解。但是由于SQL注入的靈活性和多樣性,如果詳細讨論的話,恐怕可以寫成單本書了。在這裡,作者将選擇最具代表性的例子進行論證。

注入遇到的一個常見情況是注入得到的加密密文無法求解。為了解決這個問題,這裡解釋幾種可行的方法。(1)使用國外的搜尋引擎,往往會有意想不到的收獲,最常見的是Google。(2)用Whois查出管理者郵箱,然後發郵件通知管理者更改密碼。郵件内容無非是“我們是XXX檢測中心,你的網站有風險。請立即更改管理者密碼……”。(3)分析Cookie。有時加密的密文會出現在cookies中。這種情況下,cookies中的密文可以直接被管理者的密文替換。(4)在特定的注入環境中,原始密文有時可以被新密文替換。當然這種方法的執行條件比較苛刻,實踐中很少遇到。(5)使用密碼檢索功能。使用秘密安全問題來檢索密碼是很常見的。在這種情況下,可以注入秘密安全問題的答案,然後使用密碼檢索功能成功登入目标帳戶。(6)邏輯缺陷。比如一些登入功能、修改功能、密碼檢索功能等都是以密文的形式直接在資料包中傳輸的。這時可以用密文代替,這樣就可以登入并更改密碼了。
如何防護SQL注入攻擊呢?
1.對代碼進行過濾非法符号如?&>之類的,對一些腳本标簽scrpt以及img或frame都進行過濾和替換。
2.對一些函數變量直接進行強制定義,比如金額函數這裡直接限定隻能寫入正整數類型的數值,那麼其他的參數像姓名的話可以直接限定到隻允許寫入中文和英文的數值,其他的以此類推。
3.對一些帶入資料庫查詢和更新的語句,一定要看看get或post過來的資料參數是否是直接把參數類型鎖定好了的,防止被注入惡意語句導緻被攻擊。
4.如果對着代碼方面的問題不懂得話可以到網站安全公司去尋求幫助,國内如SINESAFE,鷹盾安全,綠盟,啟明星辰等等。