1. 程式人生 > >ASP網站如何防止注入漏洞攻擊

ASP網站如何防止注入漏洞攻擊

 SQL注入是從正常的WWW埠訪問,而且表面看起來跟一般的Web頁面訪問沒什麼區別,所以目前市面的防火牆都不會對SQL注入發出警報,如果管理員沒檢視IIS日誌的習慣,可能被入侵很長時間都不會發覺。但是,SQL注入的手法相當靈活,在注入的時候會碰到很多意外的情況。能不能根據具體情況進行分析,構造巧妙的SQL語句,從而成功獲取想要的資料。

  據統計,網站用ASP+Access或SQLServer的佔70%以上,PHP+MySQ佔L20%,其他的不足10%。在本文,以SQL-SERVER+ASP例說明SQL注入的原理、方法與過程。(PHP注入的文章由NB聯盟的另一位朋友zwell撰寫的有關文章)

  SQL注入攻擊的總體思路是:

  1、發現SQL注入位置;

  2、判斷後臺數據庫型別;

  3、確定XP_CMDSHELL可執行情況

  4、發現WEB虛擬目錄

  5、上傳ASP木馬;

  6、得到管理員許可權;

  防止ASP注入攻擊的分步實施提要

  第一步. 使用ASP.NET 請求校驗.

  第二步. 使用權用約束輸入.

  第三步. 對不安全的輸入進行編碼.

  第四步. 對Sql語句使用命令引數方式.

  第五步. 驗證ASP.NET的錯誤沒有被返回客戶端.

  額外的資源

  一、SQL注入漏洞的判斷

  一般來說,SQL注入一般存在於形如:HTTP://xxx.xxx.xxx/abc.asp...等帶有引數的ASP動態網頁中,有時一個動態網頁中可能只有一個引數,有時可能有N個引數,有時是整型引數,有時是字串型引數,不能一概而論。總之只要是帶有引數的動態網頁且此網頁訪問了資料庫,那麼就有可能存在SQL注入。如果ASP程式設計師沒有安全意識,不進行必要的字元過濾,存在SQL注入的可能性就非常大。

  為了全面瞭解動態網頁回答的資訊,首選請調整IE的配置。把IE選單-工具-Internet選項-高階-顯示友好HTTP錯誤資訊前面的勾去掉。

  為了把問題說明清楚,以下以HTTP://xxx.xxx.xxx/abc.asp...為例進行分析,YY可能是整型,也有可能是字串。

  1、整型引數的判斷

  當輸入的引數YY為整型時,通常abc.asp中SQL語句原貌大致如下:

  select * from 表名 where 欄位=YY,所以可以用以下步驟測試SQL注入是否存在。

  ①HTTP://xxx.xxx.xxx/abc.asp...'(附加一個單引號),此時abc.ASP中的SQL語句變成了

  select * from 表名 where 欄位=YY',abc.asp執行異常;

  ②HTTP://xxx.xxx.xxx/abc.asp... and 1=1, abc.asp執行正常,而且與HTTP://xxx.xxx.xxx/abc.asp...執行結果相同;

  ③HTTP://xxx.xxx.xxx/abc.asp... and 1=2, abc.asp執行異常;如果以上三步全面滿足,abc.asp中一定存在SQL注入漏洞。

  2、字串型引數的判斷

  當輸入的引數YY為字串時,通常abc.asp中SQL語句原貌大致如下:

  select * from 表名 where 欄位='YY',所以可以用以下步驟測試SQL注入是否存在。

  ①HTTP://xxx.xxx.xxx/abc.asp...'(附加一個單引號),此時abc.ASP中的SQL語句變成了

  select * from 表名 where 欄位=YY',abc.asp執行異常;

  ②HTTP://xxx.xxx.xxx/abc.asp... ... 39;1'='1', abc.asp執行正常,而且與HTTP://xxx.xxx.xxx/abc.asp...執行結果相同;

  ③HTTP://xxx.xxx.xxx/abc.asp... ... 39;1'='2', abc.asp執行異常;如果以上三步全面滿足,abc.asp中一定存在SQL注入漏洞。

  3、特殊情況的處理

  有時ASP程式設計師會在程式設計師過濾掉單引號等字元,以防止SQL注入。此時可以用以下幾種方法試一試。

  ①大小定混合法:由於VBS並不區分大小寫,而程式設計師在過濾時通常要麼全部過濾大寫字串,要麼全部過濾小寫字串,而大小寫混合往往會被忽視。如用SelecT代替select,SELECT等;

  ②UNICODE法:在IIS中,以UNICODE字符集實現國際化,我們完全可以IE中輸入的字串化成UNICODE字串進行輸入。如+ =%2B,空格=%20 等;URLEncode資訊參

  ③ASCII碼法:可以把輸入的部分或全部字元全部用ASCII碼代替,如U=chr

  (85),a=chr(97)等,ASCII資訊;

  二、區分資料庫伺服器型別

  一般來說,ACCESS與SQL-SERVER是最常用的資料庫伺服器,儘管它們都支援T-SQL標準,但還有不同之處,而且不同的資料庫有不同的攻擊方法,必須要區別對待。

  1、 利用資料庫伺服器的系統變數進行區分SQL-SERVER有user,db_name()等系統變數,利用這些系統值不僅可以判斷SQL-SERVER,而且還可以得到大量有用資訊。如:

  ① HTTP://xxx.xxx.xxx/abc.asp... and user>0 不僅可以判斷是否是SQL-SERVER,而還可以得到當前連線到資料庫的使用者名稱

  ②HTTP://xxx.xxx.xxx/abc.asp... ... db_name()>0 不僅可以判斷是否是SQL-SERVER,而還可以得到當前正在使用的資料庫名;

  2、利用系統表

  ACCESS的系統表是msysobjects,且在WEB環境下沒有訪問許可權,而SQL-SERVER的系統表是sysobjects,在WEB環境下有訪問許可權。對於以下兩條語句:

  ①HTTP://xxx.xxx.xxx/abc.asp... and (select count(*) from sysobjects)>0

  ②HTTP://xxx.xxx.xxx/abc.asp... and (select count(*) from msysobjects)>0

  若資料庫是SQL-SERVE,則第一條,abc.asp一定執行正常,第二條則異常;若是ACCESS則兩條都會異常。

  3、 MSSQL三個關鍵系統表

  sysdatabases系統表:Microsoft SQL Server 上的每個資料庫在表中佔一行。最初安裝 SQL Server 時,sysdatabases 包含 master、model、msdb、mssqlweb 和tempdb 資料庫的項。該表只儲存在 master 資料庫中。 這個表儲存在master資料庫中,這個表中儲存的是什麼資訊呢?這個非常重要。他是 儲存了所有的庫名,以及庫的ID和一些相關資訊。

  這裡我把對於我們有用的欄位名稱和相關說明給大家列出來。name //表示庫的名字。dbid //表示庫的ID,dbid從1到5是系統的。分別是:master、model、msdb、mssqlweb、tempdb 這五個庫。用select * from master.dbo.sysdatabases 就可以查詢出所有的庫名。

  好在要防止ASP.NET應用被SQL注入式攻擊闖入並不是一件特別困難的事情,只要在利用表單輸入的內容構造SQL命令之前,把所有輸入內容過濾一番就可以了。過濾輸入內容可以按多種方式進行。

  ⑴ 對於動態構造SQL查詢的場合,可以使用下面的技術:

  第一:替換單引號,即把所有單獨出現的單引號改成兩個單引號,防止攻擊者修改SQL命令的含義。再來看前面的例子,“SELECT * from Users WHERE login = ''' or ''1''=''1' AND password = ''' or ''1''=''1'”顯然會得到與“SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'”不同的結果。

  第二:刪除使用者輸入內容中的所有連字元,防止攻擊者構造出類如“SELECT * from Users WHERE login = 'mas' —— AND password =''”之類的查詢,因為這類查詢的後半部分已經被註釋掉,不再有效,攻擊者只要知道一個合法的使用者登入名稱,根本不需要知道使用者的密碼就可以順利獲得訪問許可權。

  第三:對於用來執行查詢的資料庫帳戶,限制其許可權。用不同的使用者帳戶執行查詢、插入、更新、刪除操作。由於隔離了不同帳戶可執行的操作,因而也就防止了原本用於執行SELECT命令的地方卻被用於執行INSERT、UPDATE或DELETE命令。

  ⑵ 用儲存過程來執行所有的查詢。SQL引數的傳遞方式將防止攻擊者利用單引號和連字元實施攻擊。此外,它還使得資料庫許可權可以限制到只允許特定的儲存過程執行,所有的使用者輸入必須遵從被呼叫的儲存過程的安全上下文,這樣就很難再發生注入式攻擊了。

  ⑶ 限制表單或查詢字串輸入的長度。如果使用者的登入名字最多隻有10個字元,那麼不要認可表單中輸入的10個以上的字元,這將大大增加攻擊者在SQL命令中插入有害程式碼的難度。

  ⑷ 檢查使用者輸入的合法性,確信輸入的內容只包含合法的資料。資料檢查應當在客戶端和伺服器端都執行——之所以要執行伺服器端驗證,是為了彌補客戶端驗證機制脆弱的安全性。

  在客戶端,攻擊者完全有可能獲得網頁的原始碼,修改驗證合法性的指令碼(或者直接刪除指令碼),然後將非法內容通過修改後的表單提交給伺服器。因此,要保證驗證操作確實已經執行,唯一的辦法就是在伺服器端也執行驗證。你可以使用許多內建的驗證物件,例如RegularExpressionValidator,它們能夠自動生成驗證用的客戶端指令碼,當然你也可以插入伺服器端的方法呼叫。如果找不到現成的驗證物件,你可以通過CustomValidator自己建立一個。

  ⑸ 將使用者登入名稱、密碼等資料加密儲存。加密使用者輸入的資料,然後再將它與資料庫中儲存的資料比較,這相當於對使用者輸入

  的資料進行了“消毒”處理,使用者輸入的資料不再對資料庫有任何特殊的意義,從而也就防止了攻擊者注入SQL命令。System.Web.Security.FormsAuthentication類有一個HashPasswordForStoringInConfigFile,非常適合於對輸入資料進行消毒處理。

相關推薦

ASP網站如何防止注入漏洞攻擊

 SQL注入是從正常的WWW埠訪問,而且表面看起來跟一般的Web頁面訪問沒什麼區別,所以目前市面的防火牆都不會對SQL注入發出警報,如果管理員沒檢視IIS日誌的習慣,可能被入侵很長時間都不會發覺。但是,SQL注入的手法相當靈活,在注入的時候會碰到很多意外的情況。能不能根據

web滲透——SQL注入漏洞攻擊步驟

注入思想: 1、找到注入點:判斷是否有漏洞,尋找插入位置 2、構造注入語句,並在注入點注入形成新的SQL語句 3、新形成的SQL語句提交資料庫處理 4、資料庫執行新的SQL語句,引發注入攻擊 操作流

通用的PHP防注入漏洞攻擊的過濾函式程式碼

<?PHP  //PHP整站防注入程式,需要在公共檔案中require_once本檔案 //判斷magic_quotes_gpc狀態 if (@get_magic_quotes_gpc ()) { $_GET = sec ( $_GET ); $_POST = se

asp.net 360通用防護程式碼,防止sql注入與xss跨站漏洞攻擊

這是360提供的一個aspx公用程式碼,可以防止sql注入漏洞,xss跨站攻擊漏洞,如果您的網站被360掃描,出現sql注入或跨站攻擊等相關漏洞,沒有較好的解決方案,倒是可以採用該方法進下防範。 -----------------使用方法------------

JWT+ASP.NET MVC 時間戳防止重放攻擊

font 例子 memory provider ide 進入 div get encode 時間戳作用 客戶端在向服務端接口進行請求,如果請求信息進行了加密處理,被第三方截取到請求包,可以使用該請求包進行重復請求操作。如果服務端不進行防重放攻擊,就會服務器壓

淺談XXE漏洞攻擊與防禦——本質上就是注入,盜取資料用

淺談XXE漏洞攻擊與防禦 from:https://thief.one/2017/06/20/1/ XML基礎 在介紹xxe漏洞前,先學習溫顧一下XML的基礎知識。XML被設計為傳輸和儲存資料,其焦點是資料的內容,其把資料從HTML分離,是獨立於軟體和硬體的資訊傳輸工具。 XML文件結

怎麼修復網站漏洞之metinfo遠端SQL注入漏洞修補

2018年11月23日SINE網站安全檢測平臺,檢測到MetInfo最新版本爆出高危漏洞,危害性較大,影響目前MetInfo 5.3版本到最新的 MetInfo 6.1.3版本,該網站漏洞產生的主要原因是MetInfo的上傳程式碼裡的引數值沒有進行安全過濾,導致上傳路徑這裡進行偽造路徑,並可以插入惡意的程式碼

ecshop 全系列版本網站漏洞 遠端程式碼執行sql注入漏洞

ecshop漏洞於2018年9月12日被某安全組織披露爆出,該漏洞受影響範圍較廣,ecshop2.73版本以及目前最新的3.0、3.6、4.0版本都受此次ecshop漏洞的影響,主要漏洞是利用遠端程式碼執行sql注入語句漏洞,導致可以插入sql查詢程式碼以及寫入程式碼到網站伺

discuzX3.2 X3.4網站漏洞修復 SQL注入漏洞修復

2018年12月9日,國內某安全組織,對discuz X3.2 X3.4版本的漏洞進行了公開,這次漏洞影響範圍較大,具體漏洞是discuz 的使用者前段SQL注入與請求偽造漏洞,也俗稱×××F漏洞,漏洞產生的原因首先:php環境的版本大約PHP5.2,dizcuzX3.2 X3.4版本,伺服器環境是windo

MySQL-演示如何防止注入攻擊

package demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedSta

thinkphp 網站程式碼注入執行命令漏洞的過程與修復方案

THINKPHP漏洞修復,官方於近日,對現有的thinkphp5.0到5.1所有版本進行了升級,以及補丁更新,這次更新主要是進行了一些漏洞修復,最嚴重的就是之前存在的SQL注入漏洞,以及遠端程式碼執行查詢系統的漏洞都進行了修復,官方本以為沒有問題了,但是在實際的安全檢測當中發現,還是存在問題,還是可以遠端程式

Web漏洞處理--http host頭攻擊漏洞處理方案/檢測到目標URL存在寬位元組跨站漏洞/ 檢測到目標URL存在SQL注入漏洞

1.配置web 攔截器 <filter> <filter-name>XssSqlFilter</filter-name> <filter-class>com.enation.eop.Se

對搜狐 網易和TOM三大入口網站的SQL注入漏洞檢測

                對搜狐、網易和TOM三大入口網站的SQL注入漏洞檢測  本文節選自《大中型網路入侵要案直擊與防禦》一書    此外,筆者對搜狐及TOM和網易這三大入口網站作了注入攻擊檢測,發現同樣存在明顯的注入漏洞,安全性很糟糕。  1.MySQL注入檢測搜狐入口網站  首先,來看看搜狐網站,

kali學習筆記——實戰sqlmap入侵某網站(存在sql注入漏洞

前言 直接上實戰,原理在下面會簡單介紹,有需要詳細教程的到這裡下載: https://download.csdn.net/download/u013819875/10503430 首先宣告我也只是一個網路愛好者,菜鳥水平(不過php,sql都是學過,有一些基礎的),寫這篇文章權當學

SQL注入專題--整理帖 && like 語句拼sql 如何防止注入攻擊

like 語句拼sql 如何防止注入攻擊?http://bbs.csdn.net/topics/100119798 預防SQL注入攻擊之我見 www.cnblogs.com/jyk/archive/2009/11/26/1610987.html SQL注入專題--整理帖

網站XSS漏洞攻擊如何修補

因為兄弟我是在國內某知名安全公司旗下的一家電商網站上班,所以不可避免的就經常被安全部門“照顧”了,公司郵箱裡經常會收到漏洞攻擊的郵件,很佩服那些能找到這些漏洞的人,但是佩服歸佩服,漏洞總得給補上吧,下面我介紹常用的xss攻擊漏洞該如何修補。 首先你得現在we

WEB漏洞測試(二)——HTML注入 & XSS攻擊

上一篇介紹了我們安裝BWAPP來完成我們的漏洞測試 在BWAPP中,將HTML Injection和XSS做了非常詳細的分類,那麼為什麼要將兩個一起講呢?歸根結底,我覺得這兩個分明是一個玩意,充其量是攻擊的方式不一樣。 我們先來介紹一下這兩種漏洞的原理,簡單說:當用戶在

怎麼能防止網站注入eval(base64_decode這種型別的木馬?

一般都是網站程式存在漏洞或者伺服器存在漏洞而被攻擊了 網站掛馬是每個網站最頭痛的問題,解決辦法:1.在程式中很容易找到掛馬的程式碼,直接刪除,或則將你沒有傳伺服器的源程式覆蓋一次但反反覆覆被掛就得深入解決掉此問題了。但這不是最好的解決辦法。最好的方法還是找專業做安全的來幫你

很好用的 web防止sql 注入 xss 攻擊 目錄遍歷程式碼

最近公司網站被黑的嚴重,在專案入口問價加入次下程式碼有很好的效應,自己又加了一些程式碼方便一會檢視 <?php /*雲體檢通用漏洞防護補丁v1.1 更新時間:2013-05-25 功能說明:防護XSS,SQL,程式碼執行,檔案包含等多種高危漏洞 */ $url_arr

PHP---防止注入攻擊

注入式攻擊,有些網站在登陸時,使用sql帶著使用者名稱和密碼去資料庫查詢。攻擊者可以把這個sql語句返回值修改值永遠是真,比如select * from table where name=$name and password=$password or 1="1"; 為了應