国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
用最簡(jiǎn)單的方法講解什么是SQL注入
一個(gè)數(shù)據(jù)庫(kù)一般都包含有若干張表,如同我們前面暴出的數(shù)據(jù)庫(kù)中admin表包含有管理員信息,而user表則包含有所有的論壇用戶信息一樣。以下面這張表為例: 
Dv_User 
UserID UserName UserPassword UserEmail UserPost 
1 admin 469e80d32c0559f8 eway@aspsky.net 0 
2 Test 965eb72c92a549dd 1@2.com 0 


這是DVBBS 7.0的數(shù)據(jù)庫(kù)中所有用戶資料的表,Dv_User 是表名。每一行代表一個(gè)用戶,每一列是該用戶的某種屬性。我們最感興趣的自然是用戶名與密碼這樣的屬性了。 
SQL是一種用于操作數(shù)據(jù)庫(kù)的規(guī)范化語(yǔ)言,不同的數(shù)據(jù)庫(kù)(MSSQL、MYSQL、ORACLE……)大體上都是一樣的。比如我們要查詢數(shù)據(jù)庫(kù)中的信息: 
select UserName,UserPassword from Dv_User where UserID=1; 
這就是一個(gè)最典型的SQL查詢語(yǔ)句,它的意思是,在Dv_User這張表中,將UserID為1的用戶名與密碼查詢出來(lái)。 
得到的結(jié)果是:admin 469e80d32c0559f8 
SELECT語(yǔ)句語(yǔ)法: 
SELECT [列名],[列名2]…… FROM [表名] WHERE [限制條件] 
例: 
SELECT * FROM Dv_User where UserID=1  
表示查詢UserID為1的所有信息。 
更新: 
UPDATE [表名] SET [列名]=新值 WHERE [限制條件] 
例: 
UPDATE Dv_User set [UserPassword]=’ 965eb72c92a549dd’ WHERE UserName=’admin’ 
此語(yǔ)句將把Dv_User表中的UserName為admin的那一行中UserPassword的值改為965eb72c92a549dd。 
刪除: 
DELETE FROM [表名] WHERE [限制條件] 
例: 
DELETE FROM Dv_User WHERE UserName=’test’ 
將用戶名為test的那一行從Dv_User表中刪除 

二、SQL注射漏洞簡(jiǎn)述 
阿劍劍仔細(xì)把上面四個(gè)SQL語(yǔ)句讀了幾遍,發(fā)現(xiàn)非常的容易,于是虛心請(qǐng)教欠錢:“SQL語(yǔ)法看起來(lái)很容易上手嘛,那SQL漏洞是怎么來(lái)的呢?” 
欠錢打開(kāi)一個(gè)頁(yè)面,指著里面的代碼: 
if id<>"" then 
sql="SELECT * FROM [日記](méi) WHERE id="&id 
rs.Open sql,Conn,1 
阿劍劍看了一眼:“哎呀,頭暈了!” 
欠錢敲了他一下:“關(guān)于漏洞的成因我只講這一次,如果怕難就不知道漏洞的由來(lái)了,而且實(shí)際上一點(diǎn)也不難的,看好了,我們這段代碼是提取自BBSXP論壇的,經(jīng)過(guò)我改動(dòng)以后,把它做成了一個(gè)有漏洞的頁(yè)面給你講述SQL漏洞的原理。” 
那張日記的表內(nèi)容如下: 
日記 
id username title content adddate 
1 職業(yè)欠錢 今天安裝了BBSXP 這是5.16版,發(fā)現(xiàn)BBSXP體積雖小,可是功能一點(diǎn)也不少.完全夠用,不知道安全性怎么樣 2005-10-25 
2 職業(yè)欠錢 再寫一個(gè)日志吧 多寫幾個(gè)日志看看,玩玩,呵呵,反正這個(gè)論壇也只有我一個(gè)人在.. 555555555好寂寞 2005-10-25 
我們?cè)L問(wèn)http://localhost/bbsxp/blog.asp?id=1 

的時(shí)候結(jié)果如圖1。 
阿劍劍:“我明白了,訪問(wèn)blog.asp的時(shí)候,我們提交的參數(shù)id為1,那么放到SQL語(yǔ)句里就變成了: 
SELECT * FROM [日記](méi) WHERE id=1 
所以就得到我們看到的那個(gè)頁(yè)面,對(duì)嗎?” 
欠錢:“很好!正是如此!SQL漏洞的起源就從這里開(kāi)始了!注意到了嗎?id的值是由我們提交的,但是它卻沒(méi)有做任何的檢查,也就是我們提交的id可以是任意字符串。假設(shè)我們提交一個(gè)單引號(hào)的話,SQL語(yǔ)句就會(huì)因?yàn)閕d=1’ 而出錯(cuò)” 
“等等,為什么加單引號(hào)會(huì)出錯(cuò)呢?” 
“因?yàn)閱我?hào)在SQL語(yǔ)句里有特殊的含義,它只能以’abc’這樣的方式出現(xiàn),表示abc為一個(gè)字符串,如果只出現(xiàn)一個(gè)單引號(hào),整個(gè)句子肯定會(huì)出錯(cuò)了。” 
“哦,那單引號(hào)和SQL注射有什么關(guān)系呢?” 
“關(guān)系很密切,一般來(lái)說(shuō),常見(jiàn)的SQL語(yǔ)句有這么幾種: 
SELECT * FROM [表] WHERE id=12 這是數(shù)字型,12由我們提交 
SELECT * FROM [表] WHERE name=’admin’ 這是字符型,admin由我們提交 
SELECT * FROM [表] WHERE key like ‘%word%’ 這是搜索型,word由我們提交 
我們以第一種情況為例,假設(shè)我們提交 id=12 and 1=1,那么完整的SQL語(yǔ)句為: 
SELECT * FROM [表] WHERE id=12 and 1=1 
它并不出錯(cuò),但是如果我們提交改為1=2,也就是 
SELECT * FROM [表] WHERE id=12 and 1=2 此時(shí)注意到WHERE后面的條件,它要求存在一條記錄,必須滿足id=12,同時(shí)還要求1=2,由于1=2永遠(yuǎn)不成立,于是這個(gè)SQL語(yǔ)句盡管語(yǔ)法上沒(méi)錯(cuò)誤,可是搜索的結(jié)果卻一定為空。于是將提示我們找不到記錄。如圖2。” 
阿劍劍:“我明白了,訪問(wèn)blog.asp的時(shí)候,我們提交的參數(shù)id為1,那么放到SQL語(yǔ)句里就變成了: 
SELECT * FROM [日記](méi) WHERE id=1 
所以就得到我們看到的那個(gè)頁(yè)面,對(duì)嗎?” 
欠錢:“很好!正是如此!SQL漏洞的起源就從這里開(kāi)始了!注意到了嗎?id的值是由我們提交的,但是它卻沒(méi)有做任何的檢查,也就是我們提交的id可以是任意字符串。假設(shè)我們提交一個(gè)單引號(hào)的話,SQL語(yǔ)句就會(huì)因?yàn)閕d=1’ 而出錯(cuò)” 
“等等,為什么加單引號(hào)會(huì)出錯(cuò)呢?” “哦,那單引號(hào)和SQL注射有什么關(guān)系呢?” 
“關(guān)系很密切,一般來(lái)說(shuō),常見(jiàn)的SQL語(yǔ)句有這么幾種: 
SELECT * FROM [表] WHERE id=12 這是數(shù)字型,12由我們提交 
SELECT * FROM [表] WHERE name=’admin’ 這是字符型,admin由我們提交 
SELECT * FROM [表] WHERE key like ‘%word%’ 這是搜索型,word由我們提交 
我們以第一種情況為例,假設(shè)我們提交 id=12 and 1=1,那么完整的SQL語(yǔ)句為: 
SELECT * FROM [表] WHERE id=12 and 1=1 
它并不出錯(cuò),但是如果我們提交改為1=2,也就是 
SELECT * FROM [表] WHERE id=12 and 1=2 
此時(shí)注意到WHERE后面的條件,它要求存在一條記錄,必須滿足id=12,同時(shí)還要求1=2,由于1=2永遠(yuǎn)不成立,于是這個(gè)SQL語(yǔ)句盡管語(yǔ)法上沒(méi)錯(cuò)誤,可是搜索的結(jié)果卻一定為空。于是將提示我們找不到記錄。如圖2。” 

阿劍劍想了一下:“這么說(shuō),為了不讓SQL語(yǔ)句出錯(cuò),那么我們?cè)谧址蚐QL語(yǔ)句中,要提交的變量就應(yīng)該是 
admin’ and ‘1’=’1 
然后補(bǔ)到完整的SQL語(yǔ)句中,就是 
SELECT * FROM [表] WHERE name=’admin’ and ‘1’=’1’ 
而字符型則是 
word%’ and ‘%’=’ 
補(bǔ)充到完整的SQL語(yǔ)句為: 
SELECT * FROM [表] WHERE key like ‘%word%’ and ‘%’=’%’ 
” 
欠錢:“完全正確!這正是我們判斷注射類型的方法!” 
阿劍劍:“那我們?cè)趺床拍軌虻玫綌?shù)據(jù)庫(kù)中的信息呢?” 
欠錢:“最直接的方法自然是猜了,我們?cè)谔峤坏臄?shù)據(jù)里加入一些其他的判斷語(yǔ)句來(lái)代替and 1=1這樣的條件。以數(shù)字型SQL查詢語(yǔ)句為例,我們提交一個(gè)id的值如下: 
id=1 and exists (select * from admin) 
還原到完整的SQL語(yǔ)句中: 
SELECT * FROM [表] WHERE id=1 and exists (select * from admin) 
如果存在admin這張表的話,那么這個(gè)SQL語(yǔ)句將按原樣返回,否則將返回空值。到blog.asp中去實(shí)驗(yàn)一下就知道了。如圖3。” 
阿劍劍:“提示不存在這張表,然后我就要再學(xué)習(xí)很多的SQL語(yǔ)句去猜測(cè)接下來(lái)的數(shù)據(jù)嗎?” 
欠錢:“呵呵,確實(shí)更改這個(gè)SQL語(yǔ)句我們就可以慢慢猜出數(shù)據(jù)庫(kù)里的內(nèi)容。首先猜一個(gè)數(shù)據(jù)庫(kù)里有哪些表,然后逐個(gè)猜解這些表中有哪些列(以后稱為字段),最后猜解個(gè)表中的具體內(nèi)容。記住這個(gè)流程后,我們不打算深入下去了,因?yàn)槲覀円呀?jīng)有非常多的注射輔助工具了,這些工具會(huì)幫我們完成這些工作。” 
“嗯,也好,至少我大致上知道了SQL注射是怎么樣一個(gè)漏洞,具體的東西要靠我以后自學(xué)ASP和數(shù)據(jù)庫(kù)才能提高吧,現(xiàn)在你就教我用那些工具吧,我已經(jīng)迫不及待了!”

“因?yàn)閱我?hào)在SQL語(yǔ)句里有特殊的含義,它只能以’abc’這樣的方式出現(xiàn),表示abc為一個(gè)字符串,如果只出現(xiàn)一個(gè)單引號(hào),整個(gè)句子肯定會(huì)出錯(cuò)了。” 
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SQL語(yǔ)句Where中使用別名作為判斷條件
預(yù)防SQL注入攻擊之我見(jiàn)
數(shù)據(jù)庫(kù)基礎(chǔ)
php mysql SQL注入語(yǔ)句構(gòu)造
2.2.2.2 注入點(diǎn)的判斷
如何用sql語(yǔ)句查一張表的一部分和另一張表的全部呢
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服