一、什么是注入
將不受信任
的數(shù)據(jù)作為命令或查詢的一部分發(fā)送到解析器時,會產(chǎn)生諸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷。攻擊者的惡意數(shù)據(jù)可以誘使解析器在沒有適當(dāng)授權(quán)
的情況下執(zhí)行非預(yù)期命令或訪問數(shù)據(jù)。
注入能導(dǎo)致數(shù)據(jù)丟失、破壞
或泄露給無授權(quán)方
,缺乏可審計性或是拒絕服務(wù)。注入有時甚至能導(dǎo)致主機(jī)被完全接管
。
注入攻擊的本質(zhì):就是把用戶輸入的數(shù)據(jù)當(dāng)做代碼執(zhí)行。(過于信任用戶)
二、什么是SQL注入
所謂SQL注入,就是通過把SQL命令
插入到Web表單
遞交或輸入域名
或頁面請求的查詢字符串
,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意SQL命令
目的的入侵行為。
SQL注入實(shí)質(zhì)就是閉合前一句查詢語句,構(gòu)造惡意語句,惡意語句被代入SQL語句執(zhí)行。
三、SQL注入產(chǎn)生的原因
隨著B/S(瀏覽器與服務(wù)端)模式被廣泛的應(yīng)用,用這種模式編寫應(yīng)用程序的程序員也越來越多,但由于開發(fā)人員的水平和經(jīng)驗(yàn)參差不齊,相當(dāng)一部分的開發(fā)人員在編寫代碼的時候,沒有對用戶的輸入數(shù)據(jù)或者是頁面中所攜帶的信息進(jìn)行必要的合法性判斷
,導(dǎo)致了攻擊者可以提交一段數(shù)據(jù)庫查詢代碼,根據(jù)程序返回的結(jié)果,獲得一些他想得到的數(shù)據(jù)。這樣就產(chǎn)生了被稱為數(shù)據(jù)庫的注入攻擊SQL注入攻擊。
數(shù)據(jù)與代碼未嚴(yán)格分離;用戶提交的參數(shù)數(shù)據(jù)未做充分檢查過濾即被代入到SQL命令中,改變了原有SQL命令的“語義”,且成功被數(shù)據(jù)庫執(zhí)行。
SQL命令可以進(jìn)行查詢、插入、刪除等操作,直接將這些命令拼接起來。
四、SQL注入的危害
這些危害包括但不局限于:
-
1、數(shù)據(jù)庫信息泄漏:數(shù)據(jù)庫中存放的用戶的隱私信息的泄露。
-
2、網(wǎng)頁篡改:通過操作數(shù)據(jù)庫對特定網(wǎng)頁進(jìn)行篡改。
-
3、網(wǎng)站被掛馬,傳播惡意軟件:修改數(shù)據(jù)庫一些字段的值,嵌入網(wǎng)馬鏈接,進(jìn)行掛馬攻擊。
-
4、數(shù)據(jù)庫被惡意操作:數(shù)據(jù)庫服務(wù)器被攻擊,數(shù)據(jù)庫的系統(tǒng)管理員帳戶被竄改。
-
5、服務(wù)器被遠(yuǎn)程控制,被安裝后門。經(jīng)由數(shù)據(jù)庫服務(wù)器提供的操作系統(tǒng)支持,讓黑客得以修改或控制操作系統(tǒng)。
-
6、破壞硬盤數(shù)據(jù),癱瘓全系統(tǒng)。
-
7、一些類型的數(shù)據(jù)庫系統(tǒng)能夠讓SQL指令操作文件系統(tǒng),這使得SQL注入的危害被進(jìn)一步放大。
五、SQL注入在滲透中的利用
1、繞過登錄驗(yàn)證:使用萬能密碼登錄網(wǎng)站后臺等。
舉例:萬能密碼
假設(shè)我的數(shù)據(jù)名是:
user=admin,密碼是password=123456;
正常的查詢語句:
select * from users where user=’admin’ and password=’123456’;
使用SQL注入構(gòu)造的POC是:
select * from users where user=’admin’ or 1=’1’ --+’ and password=’123456’;
這個POC就可以直接把整個表的所有數(shù)據(jù)全部輸出來,無視密碼。
注釋:
–+ :–是注釋的意思,+是空格的意思,瀏覽器會自動把+識別為空格,假如直接在數(shù)據(jù)庫里面,直接–就可以。
2、獲取敏感數(shù)據(jù)
獲取網(wǎng)站管理員帳號、密碼等。
3、文件系統(tǒng)操作
列目錄,讀取、寫入文件等。
4、注冊表操作
讀取、寫入、刪除注冊表等。
5、執(zhí)行系統(tǒng)命令
遠(yuǎn)程執(zhí)行命令。
六、如何挖掘SQL注入
1、SQL注入漏洞分類
按數(shù)據(jù)類型:
數(shù)字型(Integer)
字符型(String)
按返回結(jié)果:
-
顯錯注入(Error-Based)
,就是查看查詢語句的返回結(jié)果是否出現(xiàn)報錯,從報錯內(nèi)容來推斷數(shù)據(jù)庫相關(guān)信息。 -
盲注(Boolean/Time-Based Blind)
,就是靠猜測,輸入數(shù)據(jù)查詢語句,看返回的自己長度來判讀語句是為真還是為假。
2、可能存在SQL注入的地方
登錄框、參數(shù)名、參數(shù)值、搜索框、跟用戶有交互的地方、表單的提交、Cookie(asp類型的網(wǎng)站比較多)、目錄名、文件名、…
- 最普遍的注入漏洞是由于參數(shù)值過濾不嚴(yán)導(dǎo)致的。
- Cookie注入漏洞普遍存在于ASP的程序中。
- 參數(shù)名、目錄名、文件名等注入漏洞通常存在于有網(wǎng)站路由的程序中。
七、如何判斷是否存在SQL注入
根據(jù)客戶端返回的結(jié)果來判斷提交的測試語句是否成功被數(shù)據(jù)庫引擎執(zhí)行
,如果測試語句被執(zhí)行了,說明存在
注入漏洞。
舉例:
select * from users where id=1 order by name;
上面SQL語句可能存在注入點(diǎn)的位置:
-
1、
id=1
;可以構(gòu)造POC來測試:1’ and 1=1 --+ 或者:1/1、1/0 -
2、
name
;可以構(gòu)造POC來測試:if(1=1,exp(999),1),這個POC是用來報錯的,利用報錯來測試是否能被執(zhí)行,能報錯就說明存在注入點(diǎn)。 -
3、
users
;可以構(gòu)造POC來測試:users where 1=1–+文章來源:http://www.zghlxwxcb.cn/news/detail-624513.html -
4、
*
;可以構(gòu)造POC來測試:user()–+文章來源地址http://www.zghlxwxcb.cn/news/detail-624513.html
到了這里,關(guān)于網(wǎng)絡(luò)安全進(jìn)階學(xué)習(xí)第九課——SQL注入介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!