形成SQL注射漏洞的原因及修補(bǔ)辦法.doc_第1頁
形成SQL注射漏洞的原因及修補(bǔ)辦法.doc_第2頁
形成SQL注射漏洞的原因及修補(bǔ)辦法.doc_第3頁
形成SQL注射漏洞的原因及修補(bǔ)辦法.doc_第4頁
形成SQL注射漏洞的原因及修補(bǔ)辦法.doc_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

indoc.in形成SQL注射漏洞的原因及修補(bǔ)辦法 最近筆者的朋友接到一個(gè)網(wǎng)站的生意,說是給別人做了一個(gè)網(wǎng)站, 怕程序出問題。讓筆者幫忙檢測一下有沒有什么注射或者上傳之類的漏洞。沒有的話就可以交差了。因?yàn)橹皇轻槍W(wǎng)站來檢測漏洞,所以也不需要去旁注或者ARP 什么的。首先打開域名 hxxp:// 打看后一個(gè)就知道這程序肯定不是筆者朋友本人寫的,好象是什么程序改的,但是又看不出來。打開一個(gè)連接隨手加個(gè)單引號,返回錯(cuò)誤了。如圖1 Microsoft JET Database Engine 錯(cuò)誤 80040e14;字符串的語法錯(cuò)誤;在查詢表達(dá)式 ID=16 中。/viewInfo_c.asp行318,從這個(gè)錯(cuò)誤提示我們能看出下面幾點(diǎn): 1、網(wǎng)站使用的是Access數(shù)據(jù)庫,通過JET引擎連接數(shù)據(jù)庫,而不是通過ODBC。 2、程序沒有判斷客戶端提交的數(shù)據(jù)是否符合程序要求。 3、該SQL語句所查詢的表中有一名為ID的字段。 不過看到這小網(wǎng)站就知道不可能是sql server了,google一下才找到43個(gè)連接,用SQL是小題大做了點(diǎn)。我們繼續(xù)。馬上and 1=1=2發(fā)現(xiàn)返回頁面不一樣,可以注射。既然知道了是ACCESS那就只能通過來猜解管理員的密碼來登陸后臺了 ,繼續(xù)使用 And (Select Count(*) from Admin)=0 頁面返回正常說明存在admin表,這就更加確定這程序不是他本人寫的了。因?yàn)槌司W(wǎng)上公布的些開放原碼 很少有程序員用admin做為存放管理員密碼的表,知道了admin表就繼續(xù)猜字段吧。一般來說這樣的程序用的字段無非這幾個(gè):username; password;id;userid;user_password;pwd;name;userpwd,所以猜這樣的字段非常容易。語句一復(fù)制,挨個(gè)試就好了。猜了半天,發(fā)現(xiàn)admin表里存在username;password;id三個(gè)字段。很明顯username 跟password是存放管理員用戶名與密碼的。 繼續(xù)猜 and (select top 1 len(username) from Admin)0。 先說下原理:如果top 1的username長度大于0,則條件成立;接著就是1、2、3這樣測試下去,一直到條件不成立為止,比如7成立,8不成立,就是len(username)=8 這個(gè)在IT168安全頻道的SQL 注射教程里有詳細(xì)解釋,可以多去看看,學(xué)習(xí)一下。這里猜密碼的過程我就不詳細(xì)寫了,給大家貼一個(gè)地址,非常經(jīng)典的SQL注射教程。 SQL注入天書: 經(jīng)過筆者一個(gè)小時(shí)猜解終于,猜到用戶為admin,字段5嘛,肯定是他啦。密碼得出的MD5為dc3972bc43b78eea。通過在破解MD5值,密碼為CAASD。既然知道密碼了就去找后臺吧,筆者自己以前收集了一個(gè)腳本,就是記錄了大概幾百個(gè)后臺地址。遇到一個(gè)沒見過的就加上雖然現(xiàn)在記不起那么多,但是一些常用的還是記得的。比如admin.asp; admin/admin.asp;admin_admin.asp;Admin_Login.asp;admin/admin_login.asp等等幾個(gè),這里就不寫了。經(jīng)過筆者一個(gè)個(gè)測試確定網(wǎng)站的后臺地址為admin_login.asp。如圖2 進(jìn)到后臺可以看到網(wǎng)站物理路徑為f:usrcwd7197,IIS版本 Microsoft-IIS/5.0,是windows200的機(jī)器。 組件支持有關(guān)參數(shù) 數(shù)據(jù)庫(ADO)支持: (支持) FSO文本讀寫: (支持) Stream文件流: (支持) Jmail組件支持: (支持) CDONTS組件支持: (支持) 粗略的看了下后臺支持的東西不多,但是功能還算強(qiáng)大 如圖3 在上傳那里筆者發(fā)網(wǎng)站使用了一個(gè)類似ewebeditor的編輯器,但是又不太像。于是準(zhǔn)備確定一下,如果是ewebeditor的話拿到SHELL的機(jī)率就更大了。 看到圖3有的朋友可能會說,網(wǎng)站后臺不是有數(shù)據(jù)庫備份么?為什么不使用呢?其實(shí)因?yàn)槲覀兪菫榱送诰蚵┒炊鴣淼?,使用?shù)據(jù)庫備份雖然是最快速得到WEBSHELL的方法,但是這樣就不知道服務(wù)器是否還存在別的漏洞。 筆者在本地寫一個(gè)一句話 然后保存為1.rar,嘗試進(jìn)行上傳,因?yàn)閑webeditor在線文本編輯編輯器顯示RAR文件是相對路徑比較清晰,所以一般都是通過上傳RAR文件來探測ewebeditor編輯器的地址。在添加新聞那里點(diǎn)添加新信息,然后選擇本地文件點(diǎn)上傳就OK 了,但是在上傳的時(shí)候卻提示拒絕該后綴文件。如圖4 看錯(cuò)誤提示應(yīng)該不是ewebeditor了,也沒發(fā)現(xiàn)upfile.asp或者upload等頁面,既然只能上傳圖片那就不去管他了,點(diǎn)開數(shù)據(jù)庫備份,筆者發(fā)現(xiàn)該網(wǎng)站使用的是.asp后綴的數(shù)據(jù)庫,那么在前臺留言那里寫入一個(gè)一個(gè)一句話然后連接不知道可以不?于是抱著試試的想法在前臺留言那里寫入 ,然后訪問數(shù)據(jù)庫頁面/db/fujia_data.asp,發(fā)現(xiàn)雖然寫進(jìn)去了但是沒成功。 錯(cuò)誤提示 Active Server Pages 錯(cuò)誤 ASP 0116 缺少關(guān)閉腳本分隔符 /db/fujia_data.asp,行56 Script 塊缺少腳本關(guān)閉標(biāo)記 (% ) 。 應(yīng)該是數(shù)據(jù)庫里有類似 如圖5 略懂一點(diǎn)asp語法的人都知道a然后在留言那里插入,然后再一次連接數(shù)據(jù)庫,發(fā)現(xiàn)插入成功了。如圖6 一句話木馬已經(jīng)成功插進(jìn)去了,這樣成功了拿到WEBSHELL。 我們回到后臺繼續(xù)看看還有什么可以利用的地方,轉(zhuǎn)了半天也沒發(fā)現(xiàn)可利用的??磥磉€是先用數(shù)據(jù)庫備份拿個(gè)SHELL 再說,跟朋友要了個(gè)ASP大馬,然后保存為jpg形式上傳,得到上傳地址為UploadFile/200818135334.jpg,數(shù)據(jù)庫備份那里路徑就寫 UploadFile/200818135334.jpg 備份數(shù)據(jù)庫名稱寫1.asp,然后點(diǎn)備份,成功獲得了一個(gè)WEBSHELL。 拿到SHELL 了以后就在想怎么幫朋友修補(bǔ)漏洞,先看存在注射漏洞頁viewInfo_c.asp Ctrl+F 搜索“request”一下就跳出來代碼了,我們來看看查詢是怎么寫的?簡單解釋下代碼,如下: dim ID dim rs,sql ID=request(id) /從客戶端獲取ID的值 sql = select * from Info where ID=& ID / 把查詢語句賦值給SQL變量 Set rs = Server.CreateObject(ADODB.Recordset) /創(chuàng)建記錄對象 rs.open sql,conn,1,1 /執(zhí)行查詢語句 if not (rs.eof and rs.bof) then /判斷記錄是否存在 % 我們看到因?yàn)槌绦蜃髡呤侵苯邮褂胷equest從客戶端獲取ID的值,并沒有對程序進(jìn)行過濾,也沒有對輸入的語句進(jìn)行判斷,所以導(dǎo)致存在注射漏洞。而且現(xiàn)在不光是這一個(gè)頁面存在漏洞,筆者在WEBSHELL里隨便打開一個(gè)頁面搜索request發(fā)現(xiàn)全部都是ID=request(id) 并沒有進(jìn)行任何過濾,同樣也存在了注射漏洞。如圖7 隨便又看了幾個(gè)頁面幾乎每個(gè)頁面程序作者都沒有對代碼進(jìn)行過濾,一個(gè)頁面一個(gè)頁面補(bǔ)肯定是不行了。筆者找到了一個(gè)比較經(jīng)典的“ASP通用防注射代碼”直接加到conn.asp里,代碼如下: dim sql_injdata SQL_injdata = |and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare SQL_inj = split(SQL_Injdata,|) If Request.QueryString Then For Each SQL_Get In Request.QueryString For SQL_Data=0 To Ubound(SQL_inj) if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA)0 Then Response.Write alert(注意:請不要提交非法請求!);history.back(-1) Response.end end if next Next End If If Request.Form Then For Each Sql_Post In Request.Form For SQL_Data=0 To Ubound(SQL_inj) if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA)0 Then Response.Write alert(注意:請不要提交非法請求!);history.back(-1) Response.end end if next next end if 上面代碼直接加入到conn.asp里就可以了,因?yàn)?

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論