【网络安全】SQL注入攻击思路手法总结(上)
一、前言
本文為自己對(duì)SQL注入這個(gè)攻擊手法的理解,跟大家一起分享SQL注入知識(shí)。
分上下篇,上篇為攻擊手法概括,初稿不會(huì)寫太多,后面會(huì)更新;下篇為防御篇,會(huì)把一些常見的,不常見的寫進(jìn)去。
二、概念
SQL注入漏洞之所以會(huì)出現(xiàn)就是開發(fā)人員針對(duì)代碼編寫開發(fā)web應(yīng)用程序過程中,未對(duì)使用者輸入的可控參數(shù)的合法性進(jìn)行有效判斷和過濾。從而造成被別有用心之人,利用“參數(shù)可控”特性將惡意參數(shù)帶入數(shù)據(jù)庫中執(zhí)行,造成了惡意的SQL語句對(duì)數(shù)據(jù)庫執(zhí)行行為。
歸結(jié)出兩個(gè)條件,引起SQL注入:
1.傳入?yún)?shù)可控,使用者可以對(duì)傳入數(shù)據(jù)庫的參數(shù)變量進(jìn)行操作。
2.應(yīng)用過濾不當(dāng),前端或者web應(yīng)用、框架等未對(duì)使用者做好隱藏執(zhí)行語句和傳入?yún)?shù)的嚴(yán)格過濾。
SQL注入的關(guān)聯(lián)性
其實(shí)“注入”這個(gè)行為,也是一種對(duì)數(shù)據(jù)庫的操作。這個(gè)行為的對(duì)敏感信息造成泄漏,所以判定成惡意的“注入”,實(shí)際上與用戶的普通操作別無二致,在開發(fā)過程中,應(yīng)該對(duì)用戶的“操作”進(jìn)行過濾和規(guī)范,盡量減少SQL注入的出現(xiàn)。
SQL注入的注入點(diǎn)與腳本語言關(guān)系不大,只和數(shù)據(jù)庫類型相關(guān)。就拿php站點(diǎn)和java站點(diǎn)來說,php站點(diǎn)會(huì)爆出更多的漏洞,因?yàn)閖ava中存在預(yù)編譯機(jī)制,所以相較來說sql注入更少,這是語言特性決定的。但是語言特性和數(shù)據(jù)庫沒有強(qiáng)關(guān)聯(lián),在漏洞通報(bào)中出現(xiàn)SQL注入,不會(huì)通報(bào)用何種語言編寫,只會(huì)出現(xiàn)是何種數(shù)據(jù)庫。
所以SQL注入只和數(shù)據(jù)庫類型有關(guān)系,腳本語言只是發(fā)現(xiàn)注入點(diǎn)的一個(gè)門戶。
三、注入思路
這里給大家分享一些學(xué)習(xí)資料及思路大綱可【點(diǎn)擊查看】
測試方式
黑盒測試:url、回顯、報(bào)錯(cuò)、延時(shí)、布爾狀態(tài)等等
白盒測試:代碼審計(jì)
攻擊方式選取
參數(shù)類型>>【閉合方式】
數(shù)據(jù)庫類型>>【payload的選擇和語句組合】
提交方式>>【傳參的方式可以繞過某些防護(hù)設(shè)備】
數(shù)據(jù)查詢方式>>【是否有回顯,回顯點(diǎn);延時(shí)注入的模糊判斷;二次注入的數(shù)據(jù)呈現(xiàn);工具有時(shí)候無法對(duì)所有數(shù)據(jù)捕獲】
傳輸時(shí)加密>>【要提交對(duì)方可以識(shí)別的參數(shù)】
注入權(quán)限>>【拿到的權(quán)限是否可以造成威脅、擴(kuò)大威脅】
攻擊方式的選取應(yīng)該存在多角度,但是一定離不開腳本語言、數(shù)據(jù)庫類型和數(shù)據(jù)傳輸。
注入危害
單個(gè)數(shù)據(jù)庫拿權(quán)>>【考慮低權(quán)限提權(quán),查看是否存在可利用函數(shù)和擴(kuò)展】
多個(gè)數(shù)據(jù)庫拿權(quán)>>【嘗試尋找信息泄露多角度提權(quán),嘗試使用高級(jí)函數(shù)、跨庫提權(quán)】
后臺(tái)數(shù)據(jù)泄露>>【尋找、構(gòu)筑路由,尋找管理員賬號(hào)、歷史配置文件等】
web權(quán)限丟失>>【嘗試對(duì)網(wǎng)站功能點(diǎn)測試】
服務(wù)器權(quán)限丟失>>【進(jìn)行橫移;站庫分離時(shí),從數(shù)據(jù)庫拿到宿主服務(wù)器的權(quán)限;根據(jù)當(dāng)前數(shù)據(jù)庫類型和服務(wù)器的安全性決定】
點(diǎn)到面突破,數(shù)據(jù)庫中可以包含許多信息,這已經(jīng)不是單純SQL注入,可以發(fā)展到其他攻擊面進(jìn)行滲透。
特點(diǎn)注入
語言只決定SQL注入產(chǎn)生概率>>【確定網(wǎng)站使用的語言,根據(jù)不同的語言特性進(jìn)行注入,提高效率】
數(shù)據(jù)庫類型決定SQL注入的過程>>【每種數(shù)據(jù)的語句存在差異,這樣的差異決定注入的思路】
SQL注入需要人工配合>>【工具存在一定的局限性,部分工具對(duì)于數(shù)據(jù)回傳沒有判定從而忽略注入點(diǎn)】
存在防護(hù)設(shè)備下注入>>【判定防護(hù)設(shè)備,可以嘗試“舊瓶裝新酒”對(duì)舊思路加工再注入;分塊、編碼、、垃圾數(shù)據(jù)、帶外、中間等注入】
有目的去注入,才會(huì)使攻擊效率提高。SQL注入通過多維度確定對(duì)方信息,能有效選取payload和思路。
四、常見注入方式
1.盲注
所謂盲注,就是我們?cè)谧⑷脒^程中,無法獲得直接的回顯或者有效信息去判斷注入點(diǎn)是否存在,需要借助一些方法去進(jìn)行驗(yàn)證和獲取返回的數(shù)據(jù)。
1.布爾盲注:執(zhí)行SQL語句后,只會(huì)存在兩種結(jié)果。通過構(gòu)造邏輯表達(dá)式判斷數(shù)據(jù)的具體內(nèi)容。
2.時(shí)間盲注:因?yàn)閿?shù)據(jù)傳輸存在時(shí)間差,可以利用sleep()函數(shù)等,去判斷構(gòu)造的邏輯表達(dá)式是否成功獲取數(shù)據(jù)。
3.報(bào)錯(cuò)盲注:通過數(shù)據(jù)庫的特殊函數(shù)的報(bào)錯(cuò)強(qiáng)制使參數(shù)在報(bào)錯(cuò)頁面輸出。這種函數(shù)往往會(huì)帶出其他信息,可以擴(kuò)展打擊面。
2.堆疊注入
利用數(shù)據(jù)庫特性,進(jìn)行多語句執(zhí)行。
但是限制較大,受API、數(shù)據(jù)庫類型、權(quán)限、網(wǎng)站架構(gòu)等限制。一般多見于CTF比賽中,但是實(shí)際滲透中,如果存在多語句可執(zhí)行,那么可以嘗試,也許有意外收獲。
已知支持?jǐn)?shù)據(jù)庫類型有: mysql、SQL-Server、PostgreSQL。
3.二次注入
二次注入其實(shí)就是,先入數(shù)據(jù)后注入,等同于一次注入。攻擊者先構(gòu)造出特定語句存入數(shù)據(jù)庫,當(dāng)攻擊者對(duì)存入數(shù)據(jù)或者語句進(jìn)行讀取時(shí)出現(xiàn)注入點(diǎn),這就是“二次”所在。
其實(shí)是一次內(nèi)鬼之戰(zhàn),攻擊者第一次輸入的數(shù)據(jù)被認(rèn)為是“安全”時(shí),存入數(shù)據(jù)庫內(nèi)被轉(zhuǎn)義,被轉(zhuǎn)義的數(shù)據(jù)默認(rèn)是安全的。然后第二次輸入時(shí),調(diào)用時(shí)即使輸入數(shù)據(jù)沒被轉(zhuǎn)義,也可能被判定成“安全”,這時(shí)造成二次注入。
4.差異化注入
注入時(shí),需要注意數(shù)據(jù)庫類型和網(wǎng)站架構(gòu)。不同的數(shù)據(jù)庫類型存在差異,利用這種差異進(jìn)行注入攻擊。
access數(shù)據(jù)庫的偏移注入:知道表名而不知道列名時(shí),利用“*”對(duì)其猜解,當(dāng)?shù)竭_(dá)一定長度時(shí)返回正常頁面。
mysql數(shù)據(jù)庫的結(jié)構(gòu)利用:因?yàn)閙ysql數(shù)據(jù)庫的特性,庫名-表名-列名-數(shù)據(jù)層層遞歸,mysql5或以上存在三張?zhí)厥獾谋?#xff08;information_schema.schemata/tables/colusmn),進(jìn)行間接查詢。
sqlite數(shù)據(jù)庫的隱藏表利用:sqlite文件中存在一張隱藏表格 sqlite_master ,該表格記錄下建表時(shí)的信息。
Mongodb數(shù)據(jù)庫閉合注入&數(shù)組綁定注入:mongodb是一種非關(guān)系型數(shù)據(jù)庫,可以利用構(gòu)造數(shù)組后使用ne(等同于>等字符)進(jìn)行注入。
5.基于場景注入
host注入:因?yàn)椴煌Z言和開發(fā)邏輯,獲取IP的方法都是不一樣的。那么在數(shù)據(jù)包中有一個(gè)HOST字段,如果該字段可控,并且獲取到IP地址數(shù)據(jù)被寫入數(shù)據(jù)庫中,那么就有機(jī)會(huì)存在HOST注入。
XFF注入:這個(gè)比較有意思,和XRIP字段一樣,用于記錄訪問者的IP,這個(gè)字段記錄“真實(shí)IP”。但是一旦這個(gè)字段被修改,返回中存在“XXIP無法訪問該資源”等類似語句時(shí),就代表可控,可控也可以搞一波。
SQL注入本質(zhì)上也是一種對(duì)數(shù)據(jù)庫的操作,獲取我們想要的信息。
總結(jié)
以上是生活随笔為你收集整理的【网络安全】SQL注入攻击思路手法总结(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【网络安全】详细记录一道简单面试题的思路
- 下一篇: 【安全漏洞】Struts2漏洞集合总结