- 網(wǎng)站入侵與腳本攻防修煉
- 肖遙編著
- 645字
- 2019-03-01 22:12:30
2.4 'or'='or’繞過不安全的登錄框
SQL注入攻擊,總是存在于網(wǎng)頁各種用戶數(shù)據(jù)提交的地方,而登錄框在一個(gè)網(wǎng)頁中是最常見的,那么必然有針對(duì)登錄框的SQL注入式攻擊存在。其中,最典型的就是’or'='or’注入漏洞。
'or'='or’漏洞是一個(gè)比較老的漏洞了,凡是講述SQL注入的文章,大部分都會(huì)提及到這個(gè)登錄密碼驗(yàn)證漏洞,這個(gè)漏洞曾經(jīng)在網(wǎng)上非常普遍,許多網(wǎng)站都遭受過該漏洞的攻擊。
'or'='or’漏洞主要是出現(xiàn)在網(wǎng)站的用戶登錄提交頁面中,利用這個(gè)漏洞,攻擊者可以不用輸入密碼就直接進(jìn)入系統(tǒng)的后臺(tái)。它出現(xiàn)的原因是,在編程時(shí)邏輯上考慮不周,同時(shí)沒有對(duì)單引號(hào)或危險(xiǎn)的字符進(jìn)行過濾,從而導(dǎo)致了漏洞的出現(xiàn)。
前面簡(jiǎn)單地演示了一下漏洞攻擊的效果,但沒有講解其中的攻擊原理。下面我們?cè)敿?xì)地向讀者介紹接觸一下’or'='or’注入的原理及方法。
2.4.1 'or'='or’攻擊突破登錄驗(yàn)證的演示
前面打造的漏洞站點(diǎn),可以使用’or'='or’攻擊突破登錄密碼的驗(yàn)證,但是返回的信息不多,因此不便于原理的講解。下面,在網(wǎng)站隨意挑選了某個(gè)站點(diǎn),用以演示’or'='or’攻擊及原理講解。
網(wǎng)站“http://www.yelang.cn/lt/”是一個(gè)普通的小論壇,這類論壇的安全性往往不好,很有可能存在著各種腳本漏洞。在論壇的首頁中,有用戶登錄提交框。在用戶名和密碼中分別輸入任意字符,再加上一個(gè)單引號(hào)進(jìn)行測(cè)試,如提交(圖45):
用戶:admin’
密碼:123456
然后點(diǎn)擊【登錄】按鈕,結(jié)果出現(xiàn)如圖46所示的返回錯(cuò)誤,說明存在SQL注入的可能。

圖45 論壇登錄頁面

圖46 返回的錯(cuò)誤信息
現(xiàn)在在用戶名中輸入任意字符,假設(shè)為“admin”,在密碼中輸入“a' or '1=1--”,單擊【登錄】按鈕后,就可以順利地進(jìn)入論壇了(圖47)。

圖47 突破密碼驗(yàn)證成功登錄
為什么不用輸入正確的密碼,都能夠登錄進(jìn)入后臺(tái)呢?在剛才返回的錯(cuò)誤信息中有如下語句:
語法錯(cuò)誤 (操作符丟失) 在查詢表達(dá)式 ' FORUM_MEMBERS.M_NAME = ' admin' ' AND FORUM_MEMBERS.M_PASSWORD = ' admin' ' AND FORUM_MEMBERS.M _STATUS = 1' 中
從中可以大概猜測(cè)在網(wǎng)站登錄頁面中存在如下SQL查詢語句:
select * from accounts where FORUM_MEMBERS.M_NAME=’用戶名’ and FORUM_MEMBERS.M_PASSWORD=’密碼’
當(dāng)輸入上面的用戶名“admin”和密碼“a' or '1=1--”時(shí),SQL語句就變?yōu)椋?/p>
select * from accounts where FORUM_MEMBERS.M_NAME=' admin' and FORUM_MEMBERS.M_PASSWORD=' a' or '1=1--'
SQL語句后Where部分的形式為“A=B AND C=D OR 1=1 ”,由于“1=1”是永遠(yuǎn)成立的,也就是說無論前面的“FORUM_MEMBERS.M_NAME=' admin' and FORUM_MEMBERS.M_PASSWORD=' a' ”是否成立,該條語句的返回值都為“真”,因此密碼驗(yàn)證的結(jié)果為通過,所以就能順利地登錄進(jìn)論壇了。
在實(shí)際的注入過程中,由于程序語言結(jié)構(gòu)不同,構(gòu)造的SQL注入語句可能會(huì)有相應(yīng)的變化,例如:
' or 1=1-- " or 1=1-- or 1=1-- ' or ' a' =' a " or "a"="a
') or (' a' =' a
2.4.2 未過濾的request.form造成注入
“織夢(mèng)工作室企業(yè)全站程序(原良精)修正美化版Co Net Mib ver 1.0”是一套網(wǎng)上比較常見的整站網(wǎng)頁系統(tǒng),整體頁面簡(jiǎn)潔大方,功能齊全,添加和管理新聞日志、設(shè)置新欄目等都非常方便(見圖48)。

圖48 Co Net Mib ver 1.0
但是在該網(wǎng)站程序的后臺(tái)管理登錄頁面中,存在著一個(gè)典型的’'or'='or’漏洞。下面以此套程序?yàn)槔虼蠹以敿?xì)地分析其中的’'or'='or’漏洞原理、產(chǎn)生原因及其嚴(yán)重后果。
1.打亂次序,重組程序代碼
在“織夢(mèng)工作室企業(yè)全站程序(原良精)修正美化版”源代碼中,打開“manage”文件夾下的后臺(tái)登錄頁面文件“l(fā)ogin.asp”,在其中有如下一段代碼:
<% pwd = request.form("pwd") "獲取客戶端輸入的密碼,再把值賦給pwd" name = request.form("name") "獲取客戶端輸入的用戶名再把值賦給name " 上面兩句都沒有對(duì)用戶輸入的數(shù)據(jù)進(jìn)行任何過濾 Set rs = Server.CreateObject("ADODB.Connection") "利用 Server
對(duì)象的CreateObject方法創(chuàng)建ADO組件的Connection對(duì)象" sql = "select * from Manage_User where UserName=' " & name & "' And PassWord=' "&encrypt(pwd)&"' " "將用戶名和密碼放入查詢語句中查 詢數(shù)據(jù)庫(kù)" Set rs = conn.Execute(sql) "執(zhí)行SQL語句" If Not rs.EOF = True Then "當(dāng)前的記錄位于 Connection 對(duì)象的最記錄 之后一個(gè)前" Session("Name") = rs("UserName") "將UserName的屬性賦給Name的 Session自定義變量" Session("pwd") = rs("PassWord") "將PassWord的屬性賦給pwd的S ession自定義變量" Response.Redirect("Manage.asp")了 "利用Response對(duì)象的Redirect 方法重定向"Manage.asp" Else Response.Redirect "Loginsb.asp? msg=您輸入了錯(cuò)誤的賬號(hào)或口令,請(qǐng)?jiān)? 次輸入!" End If end if %>
從這段代碼中,我們已經(jīng)將語句功能進(jìn)行了注釋,可以看到后臺(tái)是采用“Session”驗(yàn)證的,其原理與采用“cookie”驗(yàn)證相似。從上面的源文件代碼分析中可以看到,后臺(tái)登錄沒有對(duì)客戶輸入的用戶名和密碼進(jìn)行任何過濾就交給了SQL語句查詢。如果查詢的記錄是位于最后一條記錄之前,也就是說用戶名和密碼查詢驗(yàn)證有效的話,則設(shè)置Session變量UserName、PassWord的值分別為Name、pwd,并重定向到“Manage.asp”。
通過以上分析,可以發(fā)現(xiàn)代碼中存在很大的安全漏洞,問題就出現(xiàn)在第1句和第2句。第1句和第2句代碼語句的功能是獲得客戶端輸入的用戶名和密碼,但是卻沒有對(duì)用戶輸入的數(shù)據(jù)進(jìn)行任何過濾,也沒有對(duì)用戶輸入的數(shù)據(jù)進(jìn)行檢查,從而導(dǎo)致就可以對(duì)其實(shí)行SQL注入攻擊。
要實(shí)行SQL注入漏洞攻擊,其問題的關(guān)鍵就是要使SQL語句的查詢結(jié)果為真,這里就要用到or和and的邏輯運(yùn)算的知識(shí)。這里簡(jiǎn)略地提一下邏輯運(yùn)算中的一些知識(shí)。
首先,and邏輯運(yùn)算符的意思是“且”,也就是對(duì)兩個(gè)表達(dá)式進(jìn)行邏輯“與”運(yùn)算;而or運(yùn)算符的意思是“或”,也就是對(duì)兩個(gè)表達(dá)式進(jìn)行邏輯“或”運(yùn)算。
下面是兩個(gè)運(yùn)算符的運(yùn)算結(jié)果:
and邏輯運(yùn)算的原則:真and真=真;假and真=假;真and假=假;假and假=假
or邏輯運(yùn)算的原則:真or真=真;假or真=真;真or假=真;假or假=假
如果and與or同時(shí)出現(xiàn),遵守一個(gè)優(yōu)先原則:
出現(xiàn)or同時(shí)又出現(xiàn)and時(shí),則先運(yùn)算and運(yùn)算符。
現(xiàn)在,先來看代碼中的SQL查詢語句:
sql = "select * from Manage_User where UserName=' " & name & "' And PassWord=' "&encrypt(pwd)&"' "
要使這條語句執(zhí)行為真,就要構(gòu)造一個(gè)特殊的用戶名,以繞過程序的驗(yàn)證進(jìn)入后臺(tái)。我們只要在用戶名處輸入’or' ='or' ,密碼處隨便輸入字符,如輸入“admin”,這樣上面的SQL語句就變成了:
sql = "select * from Manage_User where UserName=' 'or' =' or" An d PassWord=' admin'
那么where后的語句為:
UserName=' 'or' =' or" And PassWord=' admin'
轉(zhuǎn)換成邏輯語句后,其形式為:
假or真or假and假
“假or真or假and假”邏輯運(yùn)算過程為:
假or真or假and假=假or真or(假and假)=假or真or假=(假or真)or假=真or假=真
通過簡(jiǎn)單的運(yùn)算,則最終結(jié)果為真,那么SQL語句的查詢結(jié)果也變成真了。如果這樣的語句看起來不怎么清楚,可以將用戶名換成另一條語句:
1' or 1=1 or '1' ='1
那么SQL語句就變成了:
sql = "select * from Manage_User where UserName='1' or1=1or'1' ='1' and PassWord='000' "
在邏輯表達(dá)式中’1’是為假,1=1為真,'1' ='1’也為真,而密碼是隨便輸入的,所以為假,那么where后的語句轉(zhuǎn)換成邏輯語句后為“假or真or真and假”,最終的運(yùn)算結(jié)果也為真。
2.'or'='or’控制了整個(gè)網(wǎng)站服務(wù)器
在“織夢(mèng)工作室企業(yè)全站程序(原良精)修正美化版”后臺(tái)登錄頁面中,我們就在用戶名處輸入’or' ='or' ,密碼隨便輸入(圖49),再單擊【登錄系統(tǒng)】按鈕,就可以直接進(jìn)入后臺(tái)管理頁面了(圖50)。

圖49 Co Net Mib ver 1.0后臺(tái)登錄頁面

圖50 成功登錄后臺(tái)
在網(wǎng)上有許多使用“織夢(mèng)工作室企業(yè)全站程序(原良精)修正美化版”的網(wǎng)站,只要在百度或Google中,以關(guān)鍵字“co net mib ver 1.0網(wǎng)站后臺(tái)管理系統(tǒng)”為關(guān)鍵字進(jìn)行搜索,就可以看到大量存在此漏洞的站點(diǎn)。
這個(gè)漏洞會(huì)造成什么樣嚴(yán)重的后果呢?
當(dāng)攻擊者利用’or'='or’漏洞進(jìn)入網(wǎng)站后臺(tái)管理頁面后,單擊頁面上方的“新聞管理”項(xiàng),進(jìn)入產(chǎn)品管理頁面后,再單擊“添加新聞”(圖51),將某個(gè)ASP木馬后綴名改為圖片的格式,在圖片上傳區(qū)域,單擊【瀏覽】按鈕,指定修改了后綴名的ASP木馬(圖52)。再單擊【上傳】按鈕,即可將木馬上傳到網(wǎng)站服務(wù)器上。

圖51 添加新聞

圖52 上傳ASP木馬圖片
從上傳返回信息中,可以得到ASP木馬文件上傳的路徑及文件名(圖53)。從“系統(tǒng)管理”→“上傳文件管理”中,也可以看到上傳文件的路徑。

圖53 返回上傳文件路徑
另外,還可以單擊上方新聞文字輸入框工具欄中的“插入圖片”按鈕,在彈出對(duì)話框中選擇上傳圖片(圖54)。上傳成功后,切換到“代碼”顯示方式,可看到插入圖片的源代碼為:
<IMG src="/eWebEditor/UploadFile/200832213597875.jpg" border=0>
其中src后指定的就是圖片上傳后的路徑(圖55)。

圖54 直接插入上傳圖片
單擊“系統(tǒng)管理”→“數(shù)據(jù)庫(kù)備份”,在“當(dāng)前數(shù)據(jù)庫(kù)路徑”處填入ASP木馬的路徑,“備份數(shù)據(jù)庫(kù)目錄”可隨便設(shè)置某個(gè)已有的網(wǎng)站目錄路徑,在“備份數(shù)據(jù)庫(kù)名稱”處輸入一個(gè)asp后綴的文件名即可(見圖56)。單擊【確定】按鈕,通過數(shù)據(jù)庫(kù)備份功能,就可以將圖片改名保存為ASP木馬文件了。

圖55 查看上傳文件路徑

圖56 數(shù)據(jù)庫(kù)備份生成Webshell
直接在瀏覽器鏈接地址中輸入ASP木馬路徑,連接上ASP木馬后,就可以入侵控制整個(gè)網(wǎng)站服務(wù)器了,在這里我們上傳的是“砍客ASP木馬”(圖57)。當(dāng)然,上傳木馬后門還涉及到如何通過Webshell提權(quán)的問題,具體的入侵提權(quán)原理及方法將在后面提到。
從上面這個(gè)簡(jiǎn)單的例子可以看出,一個(gè)不起眼的’or'='or’漏洞是如何讓整個(gè)網(wǎng)站服務(wù)器被攻擊者控制于手中的。可見,網(wǎng)頁腳本安全與整個(gè)網(wǎng)站的安全緊密相聯(lián)。

圖57 Webshell控制網(wǎng)站服務(wù)器
- 高效能辦公必修課:Word圖文處理
- 數(shù)據(jù)展現(xiàn)的藝術(shù)
- Excel 2007函數(shù)與公式自學(xué)寶典
- Google App Inventor
- Matplotlib 3.0 Cookbook
- CorelDRAW X4中文版平面設(shè)計(jì)50例
- 基于多目標(biāo)決策的數(shù)據(jù)挖掘方法評(píng)估與應(yīng)用
- Windows 7寶典
- 四向穿梭式自動(dòng)化密集倉(cāng)儲(chǔ)系統(tǒng)的設(shè)計(jì)與控制
- Windows Server 2003系統(tǒng)安全管理
- 手機(jī)游戲程序開發(fā)
- 從零開始學(xué)PHP
- Dreamweaver CS6中文版多功能教材
- 基于企業(yè)網(wǎng)站的顧客感知服務(wù)質(zhì)量評(píng)價(jià)理論模型與實(shí)證研究
- Flink原理與實(shí)踐