Asp網站腳本漏洞的安全防範

 
從一個注入點到系統權限的過程。固然,這只是一個例子,在真正的過程當中還有不少變化的,我主要經過這個例子來演示一下網絡******的過程,接下來咱們就採用相應的方法進行防範。
(1)首先咱們從安裝iis6.0的時候作好安裝,我初步整理的安裝格式以下:
IIS6.0的安裝
  開始菜單—>控制面板—>添加或刪除程序—>添加/刪除Windows組件
  應用程序 ———ASP.NET(可選)
       |——啓用網絡 COM+ 訪問(必選)
       |——Internet 信息服務(IIS)———Internet 信息服務管理器(必選) 
             |——公用文件(必選)
                  |——萬維網服務———Active Server pages(必選)
                  |——Internet 數據鏈接器(可選)
                  |——WebDAV 發佈(可選)
                   |——萬維網服務(必選)
                        |——在服務器端的包含文件(可選)
  而後單擊「肯定」—>下一步安裝。
(2)而後咱們要修改一下asp***調用的三個組件:
①FileSystemObject組件。FileSystemObject能夠對文件進行常規操做,能夠經過修改註冊表,將此組件更名,來防止此類***的危害。
HKEY_CLASSES_ROOT\Scripting.FileSystemObject更名爲其它的名字,如:改成
FileSystemObject_ChangeName,本身之後調用的時候使用這個就能夠正常調用此組件了,
也要將clsid值也改一下,HKEY_CLASSES_ROOT\Scripting.FileSystemObject\CLSID\項目的值,也能夠將其刪除,來防止此類***的危害。註銷此組件命令:RegSrv32 /u C:\WINNT\SYSTEM\scrrun.dll  ,禁止Guest用戶使用scrrun.dll來防止調用此組件。使用命令:cacls C:\WINNT\system32\scrrun.dll /e /d guests
②WScript.Shell組件。WScript.Shell能夠調用系統內核運行DOS基本命令,能夠經過修改註冊表,將此組件更名,來防止此類***的危害。HKEY_CLASSES_ROOT\WScript.Shell及HKEY_CLASSES_ROOT\WScript.Shell.1更名爲其它的名字,如:改成WScript.Shell_ChangeName或WScript.Shell.1_ChangeName。本身之後調用的時候使用這個就能夠正常調用此組件了,也要將clsid值也改一下HKEY_CLASSES_ROOT\WScript.Shell\CLSID\項目的值
HKEY_CLASSES_ROOT\WScript.Shell.1\CLSID\項目的值,也能夠將其刪除,來防止此類***的危害。
③Shell.Application組件。Shell.Application能夠調用系統內核運行DOS基本命令,能夠經過修改註冊表,將此組件更名,來防止此類***的危害。HKEY_CLASSES_ROOT\Shell.Application及HKEY_CLASSES_ROOT\Shell.Application.1更名爲其它的名字,如:改成Shell.Application_ChangeName或Shell.Application.1_ChangeName本身之後調用的時候使用這個就能夠正常調用此組件了。也要將clsid值也改一下HKEY_CLASSES_ROOT\Shell.Application\CLSID\項目的值。HKEY_CLASSES_ROOT\Shell.Application\CLSID\項目的值,也能夠將其刪除,來防止此類***的危害,禁止Guest用戶使用shell32.dll來防止調用此組件。使用命令:cacls C:\WINNT\system32\shell32.dll /e /d guests(注:操做均須要從新啓動WEB服務後纔會生效)。
(3)而後對於ftp的使用,我仍是以爲使用微軟件的ftp比較可靠,給每個用戶建立一個user權限的用戶,指向相應的ftp目錄便可。固然,咱們還要禁用Guests組用戶調用cmd.exe。命令爲:cacls C:\WINNT\system32\Cmd.exe /e /d guests,接下來咱們要對各磁盤的權限作一下限制。
(4)對系統權限的設置
系統盤及全部磁盤只給 Administrators 組和 SYSTEM 的徹底控制權限。
  系統盤\Documents and Settings 目錄只給 Administrators 組和 SYSTEM 的徹底控制權限。
  系統盤\Documents and Settings\All Users 目錄只給 Administrators 組和 SYSTEM 的徹底控制權限。
  系統盤\Inetpub 目錄及下面全部目錄、文件只給 Administrators 組和 SYSTEM 的徹底控制權限。
  系統盤\Windows\System32\cacls.exe、cmd.exe、net.exe、net1.exe 文件只給 Administrators 組和 SYSTEM 的徹底控制權限。
(5)本地安全策略
本地安全策略設置
  開始菜單—>管理工具—>本地安全策略
A、本地策略——>審覈策略
  審覈策略更改   成功 失敗  
  審覈登陸事件   成功 失敗
  審覈對象訪問      失敗
  審覈過程跟蹤   無審覈
  審覈目錄服務訪問    失敗
  審覈特權使用      失敗
  審覈系統事件   成功 失敗
  審覈帳戶登陸事件 成功 失敗
  審覈帳戶管理   成功 失敗
B、本地策略——>用戶權限分配
  關閉系統:只有Administrators組、其它所有刪除。
  經過終端服務拒絕登錄:加入Guests、User組。
  經過終端服務容許登錄:只加入Administrators組,其餘所有刪除。
C、本地策略——>安全選項
  交互式登錄:不顯示上次的用戶名       啓用
  網絡訪問:不容許SAM賬戶和共享的匿名枚舉  啓用
  網絡訪問:不容許爲網絡身份驗證儲存憑證   啓用
  網絡訪問:可匿名訪問的共享         所有刪除
  網絡訪問:可匿名訪問的命          所有刪除
  網絡訪問:可遠程訪問的註冊表路徑      所有刪除
  網絡訪問:可遠程訪問的註冊表路徑和子路徑  所有刪除
  賬戶:重命名來賓賬戶            重命名一個賬戶
  賬戶:重命名系統管理員賬戶         重命名一個賬戶
經過上面的設置,咱們已經打造了一個安全標準的網絡服務器,還有一些小的細節也要注意,好比開啓windows防火牆、端口過濾、和開啓自動更新。對於網站服務器,安裝一個殺毒軟件是必備的,我我的認爲mcafee8.0不錯,有自動更新功能,固然是國外的一款殺毒軟件,對於絕大部分的***工具和asp等***都要進行查殺,在別人傳一些有危害性的工具到服務器時它都會自動刪掉,並能清除系統中的病毒和***程序。而且它自帶有一個緩衝區溢出保護和訪問保護充當了防火牆的功能。當咱們按照上面設置的設置後,再接着上面的實例,上傳一個asp***上去,立刻被mcafee殺掉,通過加密後再上傳,但因爲服務器的設置,此次咱們再在執行命令處查看,因缺乏組件出現錯誤,如圖:
這樣咱們便完全地防住了asp***,但咱們漏洞的源點尚未獲得解決,那就是如何防止sql注入。對於sql的注入,咱們主要是過慮一些字符,固然直接修改源代碼也能夠,可是修改起來比較麻煩,咱們一般的作法是在數據庫鏈接文件件裏,如conn.asp裏面加一個文件頭,也就是咱們的防注入程序文件頭。固然也有一些經常使用的就是在有漏洞的文件中加入一些過慮代咱們來看下面部分的代碼:
<%
’--------版權說明------------------
’ncph SQL通用防注入程序 V3.0
’2.0強化版,對代碼作了一點優化,加入自動封注入者Ip的功能!^_^
’3.0版,加入後臺登錄查看注入記錄功能,方便網站管理員查看非法記錄,以及刪除之前的記錄,是否對***者Ip解除封鎖!
’npch小組 by  rose URL:[url]http://www.npch.net[/url]
’--------數據庫鏈接部分--------------
dim dbkillSql,killSqlconn,connkillSql
dbkillSql="SqlIn.mdb"
’On Error Resume Next
Set killSqlconn = Server.CreateObject("ADODB.Connection")
connkillSql="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(dbkillSql)
killSqlconn.Open connkillSql
If Err Then
       err.Clear
       Set killSqlconn = Nothing
       Response.Write "數據庫鏈接出錯,請檢查鏈接字串。"
       Response.End
End If
’--------定義部份------------------
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr,Kill_IP,WriteSql
’自定義須要過濾的字串,用 "|" 分隔
Fy_In = "’|;|and|(|)|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
Kill_IP=True
WriteSql=True                    
’----------------------------------
Fy_Inf = split(Fy_In,"|")
’--------POST部份------------------
If Request.Form<>"" Then
       For Each Fy_Post In Request.Form
              For Fy_Xh=0 To Ubound(Fy_Inf)
                     If Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<>0 Then
                            If WriteSql=True Then
                                   killSqlconn.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values(’"&Request.ServerVariables("REMOTE_ADDR")&"’,’"&Request.ServerVariables("URL")&"’,’POST’,’"&Fy_Post&"’,’"&replace(Request.Form(Fy_Post),"’","’’")&"’)")
                                   killSqlconn.close
                                   Set killSqlconn = Nothing
                            End If
                            Response.Write "<Script Language=JavaScript>alert(’ncph SQL通用防注入系統提示你↓\n\n請不要在參數中包含非法字符嘗試注入!\n\nHttp://www.ncph.net 系統版本:V3.1(ASP)版\n\nBy:rose’);</Script>"
                            Response.Write "非法操做!系統作了以下記錄↓<br>"
                            Response.Write "操做IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
                            Response.Write "操做時間:"&Now&"<br>"
                            Response.Write "操做頁面:"&Request.ServerVariables("URL")&"<br>"
                            Response.Write "提交方式:POST<br>"
                            Response.Write "提交參數:"&Fy_Post&"<br>"
                            Response.Write "提交數據:"&Request.Form(Fy_Post)
                            Response.End
                     End If
              Next
       Next
End If
’----------------------------------
’--------GET部份-------------------
If Request.QueryString<>"" Then
       For Each Fy_Get In Request.QueryString
              For Fy_Xh=0 To Ubound(Fy_Inf)
                     If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
                            If WriteSql=True Then
                                   killSqlconn.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values(’"&Request.ServerVariables("REMOTE_ADDR")&"’,’"&Request.ServerVariables("URL")&"’,’GET’,’"&Fy_Get&"’,’"&replace(Request.QueryString(Fy_Get),"’","’’")&"’)")
                            killSqlconn.close
                            Set killSqlconn = Nothing
                            End If
                            Response.Write "<Script Language=JavaScript>alert(’ncph SQL通用防注入系統提示你↓\n\n請不要在參數中包含非法字符嘗試注入!\n\nHttp://Www.ncph.net  系統版本:V3.1(ASP)版\n\nBy:rose’);</Script>"
                            Response.Write "非法操做!系統作了以下記錄↓<br>"
                            Response.Write "操做IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
                            Response.Write "操做時間:"&Now&"<br>"
                            Response.Write "操做頁面:"&Request.ServerVariables("URL")&"<br>"
                            Response.Write "提交方式:GET<br>"
                            Response.Write "提交參數:"&Fy_Get&"<br>"
                            Response.Write "提交數據:"&Request.QueryString(Fy_Get)
                            Response.End
                     End If
              Next
       Next
End If
If Kill_IP=True Then
       Dim Sqlin_IP,rsKill_IP,Kill_IPsql
       Sqlin_IP=Request.ServerVariables("REMOTE_ADDR")
       Kill_IPsql="select Sqlin_IP from SqlIn where Sqlin_IP=’"&Sqlin_IP&"’ and kill_ip=true"
       Set rsKill_IP=killSqlconn.execute(Kill_IPsql)
       If Not(rsKill_IP.eof or rsKill_IP.bof) Then
              Response.write "<Script Language=JavaScript>alert(’ncph SQL通用防注入系統提示你↓\n\n你的Ip已經被本系統自動鎖定!\n\n如想訪問本站請和管理員聯繫!\n\nHttp://www.ncph.net  \n\n系統版本:V3.1(ASP)\n\nBy:rose’);</Script>"
       Response.End
       End If
       rsKill_IP.close
End If
%>
上面的防注入程序對非法***者的各類注入嘗試的post提交和get提交都作了限制,過慮的字符有:’|;|and|(|)|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare,當注入嘗試達到3的時候會自動鎖定你的ip,咱們來看一下咱們上面程序加了防注入後的效果以下:
上面是軟件檢測的結果,那麼咱們再看看手工檢測的結果,我在網址後面加了個向左的單引號,結果返回如圖:
單擊肯定後,顯示:
非法操做!系統作了以下記錄↓
操做IP:127.0.0.1
操做時間:2006-4-16 23:00:59
操做頁面:/syjh/search.asp
提交方式:GET
提交參數:sortid
提交數據:3’
並在數據庫裏寫入***者的ip、時間、提交的參數等相關的記錄。這樣咱們就將sql注入完全地拒之門外。
綜合以上的防範方法,寫了一個防範腳本漏洞的小工具,如圖:
下載地址: [url]http://www.ncph.net/soft/safe.rar[/url]
相關文章
相關標籤/搜索