MYSQL注入天書之基礎知識

來源:互聯網
上載者:User

標籤:

第一部分/page-1 Basic Challenges

Background-1 基礎知識

此處介紹一些mysql注入的一些基礎知識。

(1)注入的分類---仁者見仁,智者見智。

下面這個是阿德瑪表哥的一段話,個人認為分類已經是夠全面了。理解不了跳過,當你完全看完整個學習過程後再回頭看這段。能完全理解下面的這些每個分類,對每個分類有屬於你的認知和瞭解的時候,你就算是小有成就了,當然僅僅是sql注入上。

基於從伺服器接收到的響應?

▲基於錯誤的SQL注入

▲聯集查詢的類型

▲堆查詢注射

▲SQL盲注

?基於布爾SQL盲注

?基於時間的SQL盲注

?基於報錯的SQL盲注

基於如何處理輸入的SQL查詢(資料類型)?

?基於字串

?數字或整數為基礎的

基於程度和順序的注入(哪裡發生了影響)

★一階注射

★二階注射

一階注射是指輸入的注射語句對WEB直接產生了影響,出現了結果;二階注入類似儲存型XSS,是指輸入提交的語句,無法直接對WEB應用程式產生影響,通過其它的輔助間接的對WEB產生危害,這樣的就被稱為是二階注入.
基於注入點的位置上的?

▲通過使用者輸入的表單域的注射。

▲通過cookie注射。

▲通過伺服器變數注射。?(基於頭部資訊的注射)

?

(2)系統函數

介紹幾個常用函數:
1. version()——MySQL版本
2. user()——資料庫使用者名稱
3. database()——資料庫名
4. @@datadir——資料庫路徑
5. @@version_compile_os——作業系統版本

  1. 字串串連函數

    函數具體介紹 http://www.cnblogs.com/lcamry/p/5715634.html

  2. concat(str1,str2,...)——沒有分隔字元地連接字串
    2. concat_ws(separator,str1,str2,...)——含有分隔字元地連接字串
    3. group_concat(str1,str2,...)——串連一個組的所有字串,並以逗號分隔每一條資料
    說著比較抽象,其實也並不需要詳細瞭解,知道這三個函數能一次性查出所有資訊就行了。
  3. 一般用於嘗試的語句

    Ps:--+可以用#替換,url提交過程中Url編碼後的#為%23

    or 1=1--+

    ‘or 1=1--+

    "or 1=1--+

    )or 1=1--+

    ‘)or 1=1--+

    ") or 1=1--+

    "))or 1=1--+

    一般的代碼為:

    $id=$_GET[‘id‘];

    $sql="SELECT * FROM users WHERE id=‘$id‘ LIMIT 0,1";

    此處考慮兩個點,一個是閉合前面你的 ‘ 另一個是處理後面的 ‘ ,一般採用兩種思路,閉合後面的引號或者注釋掉,注釋掉採用--+ 或者 #(%23)

  4. union操作符的介紹

    UNION 操作符用於合并兩個或多個 SELECT 語句的結果集。請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的資料類型。同時,每條 SELECT 語句中的列的順序必須相同。

    SQL UNION 文法

    SELECT column_name(s) FROM table_name1

    UNION

    SELECT column_name(s) FROM table_name2

    注釋:預設地,UNION 操作符選取不同的值。如果允許重複的值,請使用 UNION ALL。

    SQL UNION ALL 文法

    SELECT column_name(s) FROM table_name1

    UNION ALL

    SELECT column_name(s) FROM table_name2

    另外,UNION 結果集中的列名總是等於 UNION 中第一個 SELECT 語句中的列名。

    (6)sql中的邏輯運算

    這裡我想說下邏輯運算的問題。

    提出一個問題Select * from users where id=1 and 1=1; 這條語句為什麼能夠選擇出id=1的內容,and 1=1到底起作用了沒有?這裡就要清楚sql語句執行順序了。

    同時這個問題我們在使用萬能密碼的時候會用到。

    Select * from admin where username=‘admin‘ and password=‘admin‘

    我們可以用 ‘or 1=1# 作為密碼輸入。原因是為什嗎?

    這裡涉及到一個邏輯運算,當使用上述所謂的萬能密碼後,構成的sql語句為:

    Select * from admin where username=‘admin‘ and password=‘‘or 1=1#‘

    Explain:上面的這個語句執行後,我們在不知道密碼的情況下就登入到了admin使用者了。

    原因是在where子句後,我們可以看到三個條件陳述式 username=‘admin‘ and password=‘‘or 1=1。三個條件用and和or進行串連。在sql中,我們and的運算優先順序大於or的元算優先順序。因此可以看到 第一個條件(用a表示)是真的,第二個條件(用b表示)是假的,a and b = false,第一個條件和第二個條件執行and後是假,再與第三個條件or運算,因為第三個條件1=1是恒成立的,所以結果自然就為真了。因此上述的語句就是恒真了。

    ?

    ?

    ?

    ?

    ?

    ①Select * from users where id=1 and 1=1;

    ②Select * from users where id=1 && 1=1;

    ③Select * from users where id=1 & 1=1;

    上述三者有什麼區別?①和②是一樣的,表達的意思是 id=1條件和1=1條件進行與運算。

    ③的意思是id=1條件與1進行&位操作,id=1被當作true,與1進行 & 運算 結果還是1,再進行=操作,1=1,還是1(ps:&的優先順序大於=)

    Ps:此處進行的位元運算。我們可以將數轉換為二進位再進行與、或、非、異或等運算。必要的時候可以利用該方法進行注入結果。例如將某一字元轉換為ascii碼後,可以分別與1,2,4,8,16,32.。。。進行與運算,可以得到每一位的值,拼接起來就是ascii碼值。再從ascii值反推回字元。(運用較少)

    (7)注入流程

    我們的資料庫儲存的資料按照的形式,一個資料庫當中有很多的資料表,資料表當中有很多的列,每一列當中儲存著資料。我們注入的過程就是先拿到資料庫名,在擷取到當前資料庫名下的資料表,再擷取當前資料表下的列,最後擷取資料。

    現在做一些mysql的基本操作。啟動mysql,然後通過查詢檢查下資料庫:

    show?databases;

    這個實驗用到的資料庫名為security,所以我們選擇security來執行命令。

    use?security;

    我們可以查看下這個資料庫中有哪些表

    show?tables;

    現在我們可以看到這裡有四張表,然後我們來看下這張表的結構。

    desc?emails;

    在繼續進行前台攻擊時,我們想討論下系統資料庫,即information_schema。所以我們使用它

    use?information_schema

    讓我們來看下錶格。

    show?tables;

    現在我們先來枚舉這張表

    desc?tables;

    現在我們來使用這個查詢:

    select?table_name?from?information_schema.tables?where?table_schema?=?"security";

    使用這個查詢,我們可以下載到表名。

    Mysql有一個系統資料庫information_schema,儲存著所有的資料庫的相關資訊,一般的,我們利用該表可以進行一次完整的注入。以下為一般的流程。

    猜資料庫

    select schema_name from information_schema.schemata

    猜某庫的資料表

    select table_name from information_schema.tables where table_schema=‘xxxxx‘

    猜某表的所有列

    Select column_name from information_schema.columns where table_name=‘xxxxx‘

    擷取某列的內容

    Select *** from ****

    上述知識參考用例:less1-less4

MYSQL注入天書之基礎知識

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.