生活随笔
收集整理的這篇文章主要介紹了
'or'='or'经典漏洞原理分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
| 'or'='or'漏洞是一個比較老的漏洞了,主要是出現在后臺登錄上,利用這個漏洞,我們可以不用輸入密碼就直接進入系統的后臺。它出現的原因是在編程時邏輯上考慮不周,同時對單引號沒有進行過濾,從而導致了漏洞的出現。先給大家簡單介紹下漏洞的原理吧,只要大家搞懂了原理,就可以自己去找這樣漏洞的系統了。 1:語句:''or'='or'??? a'or'1=1--??? 'or1=1--??? "or1=1--??? or1=1--??? 'or"="a'='a??? ') or ('a'='a等等, 2:分析利用:我從站長網站下載了"織夢工作室企業全站程序(原良精)修正美化版"源代碼,從中找到后臺登錄的頁面"login。asp"其中有以下一段代碼: <% (1)pwd = request。form("pwd") "獲取客戶端輸入的密碼,再把值賦給pwd" (2)name = request。form("name")??? "獲取客戶端輸入的用戶名再把值賦給name" 都沒有進行任何過濾 (3)Set rs = Server。CreateObject("ADODB。Connection") "利用Server對象的CreateObject方法創建ADO組件的Connection對象" (4)sql = "select * from Manage_User where UserName='" & name & "' And PassWord='"&encrypt(pwd)&"'"??? "將用戶名和密碼放入查詢語句中查詢數據庫" (5)Set rs = conn。Execute(sql) "執行SQL語句" (6)If Not rs。EOF = True Then??? "當前的記錄位于Connection對象的最記錄之后一個前" (7)Session("Name") =??? rs("UserName")??? "將UserName的屬性賦給Name的Session自定義變量" (8)Session("pwd") =??? rs("PassWord")???? "將PassWord的屬性賦給pwd的Session自定義變量" (9)Response。Redirect("Manage。asp")了??? "利用Response對象的Redirect方法重定向"Manage。asp" (10)Else (11)Response。Redirect "Loginsb。asp?msg=您輸入了錯誤的帳號或口令,請再次輸入!" (12)End If (13)end if %> 從這段代碼中,我們可以看到后臺是采用"Session"驗證的,大家知道,還有一種是采用"cookie"驗證的,不過原理相同,從分析中,我們可以看到后臺登錄沒有對客戶輸入的用戶名和密碼進行任何過濾,就交給了SQL語句查詢,如果查詢的記錄是位于最后一條記錄之前,剛設置Session變量UserName,PassWord的值分別為Name,pwd,并重定向到"Manage。asp"。 從以上分析中。出現了很大的安全漏洞,問題就出現在第一,第二句,它們的功能是獲得客戶端輸入的用戶名和密碼卻沒有進行任何的過濾, 也不會去檢查我們輸入的數據,這樣,我們就可以對其實行攻擊,要實行攻擊這種漏洞的問題關鍵就是使SQL語句的查詢結果為真,這里我們又要用到or和and的邏輯運算的知識,我這里不詳細的說,就講二點,第一,優先原則:出現or同時又出現and時,則先運算and運算符,第二,and運算符意思,是"且"就是對二個表達式進行邏輯"與"運算(我這兒說的是"且"),而or運算符意思,是"或"就是對二個表達式進行邏輯"或"運算,下面是二個運算符的運算結果: and邏輯運算的結果"真----真===真;假----真===假;??? 真----假===假; 假----假===假。 or邏輯運算的結果:真----真===真;假----真===真;??? 真----假===真; 假----假===假。 大家自己可以體會下 下面我們先來看代碼中的SQL查詢語句"sql = "select * from Manage_User where UserName='" & name & "' And PassWord='"&encrypt(pwd)&"'"??? ,要使這條語句執行為真,我們就要構造一個特殊的用戶名,就可繞過程序的驗證,進入后臺,我們只要在用戶名處輸入'or'='or',密碼處隨便輸入字符(我們就輸入000吧),這樣上面的SQL語句就變成了sql = "select * from Manage_User where UserName=''or'='or''and PassWord='000'"那么where后的語句轉換成邏輯語句后為假or真or假and假,通過簡單的運算,則最終為真,而SQL語句的查詢結果也變成真了,這樣大家可能還不怎么聽得懂,我換成另一條語句:1' or 1=1 or '1'='1,那么SQL語句就變成了sql = "select * from Manage_User where UserName='1'or1=1or'1'='1'and PassWord='000'"大家知道,在邏輯表達式中'1'是為假,1=1總為真吧,'1'='1'也為真,而密碼我們是隨便輸入的所以為假,那么where后的語句轉換成邏輯語句后為假or真or真and假,最終的運算結果也為真.這些大家自己慢慢的去實踐,去體會,我相信大家都會搞懂的,大家還可以自己構造一些語句去驗證下. 對于Session驗證的,我們還可以進行Session欺騙(大家都知道cookie欺騙登錄了吧,呵呵),假設我們知道這個系統的管理員的用戶名為admin,那么我們只需在密碼處輸入的語句使它的運算結果為真就行了,這兒留給大家自己構造,當做作業吧(暈,看教程還布置作業,我可不是小學生了啊) coolie驗證的登錄原理和Session"驗證的相同,只要大家構造的語句使的SQL的執行為真就行了,這是關鍵喲,大家可記住了! 說到這兒,我們去實踐下吧,我在自己的機子搭好了這套系統,進入后臺登錄,我們就在用戶名處輸入'or'='or',密碼我就輸入000,再點登錄,看進去了吧。 |
轉載于:https://www.cnblogs.com/yeye518/archive/2008/04/18/2231766.html
總結
以上是生活随笔為你收集整理的'or'='or'经典漏洞原理分析的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。