故事A段:發現整站SQL對外輸出:html
有個朋友的網站,因爲是外包項目,深圳某公司開發的,某天我幫他檢測了一下網站相關狀況。sql
我查看了頁面源代碼,發現了個驚人的事情,居然整站打印SQL到Html裏,着實嚇我一跳:shell
PS:2年前秋色園系列文章有分享一文是整站SQL打印用於分析網站性能,不過也只是本地優化調試,而服務器上也採用某特殊條件纔打印。服務器
因而把這赤祼祼的對外公開的SQL問題反映了過去,以後算是取消了。 函數
故事B段:錯誤異常打印了SQL,誘人: 工具
過了些許天,我又抽空看了看:性能
原始路徑爲:http://www.xxx.com/s-l----333.html,我隨意加了個引號:優化
直接打印SQL?這不是引誘人犯罪麼?好吧,當時被誘了一下,花了小半天折騰了一下。網站
故事C段:發現有簡單的SQL關鍵字過濾:
隨意加了個「and「條件,發現有過濾一些關鍵字: ui
而後屢次檢測,發現過濾了:and select,update,delete等關鍵字。
故事D段:發現能夠執行自定義語句,但SQL帳號彷佛沒有SA權限或者是關閉了xp_cmdshell服務:
因而我組了一條truncate table xxx,固然,這是個不存在的表名:
試了下,執行完成,沒報啥提示,太恐怖了。
既然能夠執行自定義語句,那執行下提權語句看看:
發現沒啥提示,可是帳號不起效果,因此估計sql的帳號沒有sa權限能夠調用xp_cmdshell,另外這裏,因爲--符號被用來分隔字符串,因此不起做用。
故事E段:發現登錄有明顯的SQL漏洞:
過了點時間,我就不折騰了,我打算註冊個帳號看看其它狀況。
到了登錄頁,發現註冊還要綁定手機號,我就不註冊了,因而在登錄裏隨手弄了一個常見的a' or 1=1--
居然報密碼錯誤,嚇我一跳,說明用戶名注入了,只是密碼那關錯誤。
故事F段:發現驗證碼居然在Cookie裏:
經過攔截請求信息,發現更奇葩的事:
驗證碼居然直接放在Cookie裏,這。。。
既然用戶名能夠注入,爲啥密碼還報錯誤?
經過錯誤的語法,看了一下對方的SQL語句,猜出了基本的代碼邏輯:
構造注入語句,發現密碼爲md5存儲:
沒想到,來了個如下坑爹的提示:
試了下不少個帳號,都是這種狀況,這提示太坑爹,忽悠了我。
PS:實際上是帳號經過了,直接拿返回的Cookie就能夠進用戶的,不過我被忽悠了,覺得不可用。
返回的Cookie,實際也是加密的,因此,這種方式,看不到手機號,因此無法直接簡單的登錄。
再構造SQL注入語句,建立屬於本身的帳號和密碼:
最終就成了如下函數:
執行後,發現都是返回「當前帳號已凍結,請聯繫客戶」這句大忽悠的話。。。
害的我試了N個帳號,最後拿其中一個登錄了,才發現是正常的。
後來告訴了對方有SQL注入漏洞,最後反饋說用SQL工具檢測正常,無語。
再後來就示例告訴了對方,修正了這個漏洞後,我就寫文分享了。
總結:
1:驗證碼怎麼能夠放Cookie裏?
2:SQL語句怎麼能夠隨意打印給別人看?
3:SQL注入檢測怎麼能光靠工具?
4:防SQL注入怎麼能靠幾個簡單的關鍵字過濾?
補充截圖: