ASPホール全接触-階段編
入門編では、SQL注入の判断方法を習得しましたが、本当にウェブサイトの秘密情報を入手するには十分ではありません。次に、どのようにデータベースから取得したいのかを学び続けます。まず、SQL注入の一般的な手順を見てみます。第一節、SQL注入の一般的な手順はまず、環境を判断し、注入点を探し、データベースの種類を判断します。これは入門編ですでに述べました。次に、注入パラメータの種類によって、SQL文の元の姿を再現します。パラメータの種類によって、主に次の3種類に分けられます。(A)ID=49という注入パラメータは数字型です。SQL文の元の姿は大体次の通りです。Select*fromテーブル名whereフィールド=49に注入されたパラメータはID=49 And[照会条件]です。つまり、生成文です。Select*from表名whereフィールド=49 And[照会条件](B)Class=ドラマのように注入されたパラメータは文字型で、SQL文の本来の姿は大体次の通りです。Select*from表名whereフィールド='ドラマ'注入のパラメータはClass=ドラマ'and[検索条件]and'='で、つまり、生成文:Select*fromテーブル名whereフィールド='連続ドラマ'and[検索条件]““=”(℃)検索時にパラメータをフィルタしていません。例えば、keyword=キーワード、SQL文の原形は大体以下の通りです。Select*fromテーブル名whereフィールドlike'%キー'に注入されたパラメータはkeyword='and[検索条件]“%つまり、作成文です。Select*fromテーブル名whereフィールドlike'%and[照会条件]“%=“%”に続いて、検索条件をSQL文に置き換え、テーブル名を推測します。例えば、ID=49 And(Select Count(*)from Admin)==0ページがID=49と同じであれば、条件を付けて成立します。存在しません。このように循環して、表の名前が当てられるまで。表の名前を当てると、Count(*)をCount(フィールド名)に置き換え、フィールド名を同じ原理で推測します。ここに偶然の成分がありますが、表の名前が複雑で不規則だったら、遊んではいけません。はい、この世界には100%の成功ハッカーの技術は存在しません。ハエがシームレスな卵を刺さらないのは、いくら技術が高くても、ハッキングが深いのは他の人のプログラムが厳密に書かれていないからです。ちょっと問題を逸らしました。ところで、SQLServerのライブラリについては、プログラムに表名とフィールド名を教えてもらう方法があります。私たちは高級編で紹介します。最後に、表名と列名の解凍に成功したら、SQL文を使ってフィールドの値を導出します。以下に、最も一般的な方法-Acii逐字復号法を紹介します。この方法は速度が遅いですが、確実に実行可能な方法です。例を挙げます。既知の表Adminにusernameフィールドがあります。まず、第一条の記録を取ります。テスト長:http://www.19cn.com/showdetail.asp?id=49 ;and(select top 1 len(username)from Admin)>0は先に原理を説明します。top 1のusernameの長さが0より大きいと条件が成立します。続いて'1、>#2、>3のようにテストして、条件が成立しないまで、例えば'7が成立します。'8は成立しません。つまり、len=8はもちろん、0,1,2,3から1つずつテストする人はいません。usernameの長さを取得した後、mid(username,N,1)でN番目の文字を切り取り、asc(mid(username,N,1)でASCIIコードを取得します。例えば、id=49 and(select top 1 asc(mid(username,1,1)from Admin)>0も同様に、ASコードを縮小します。折半法で解くことができます。プログラムテストを作成すれば、効率が大きくなります。第二節、SQL注入常用関数にSQL言語の基礎がある人は、SQL注入時の成功率が不慣れな人より高いです。私たちは自分のSQLレベルを向上させる必要があります。特によく使う関数とコマンドがあります。Access:asc(文字)SQLServer:unicode(文字)作用:ある文字のASCIIコードAccess:chr(数字)SQLServer:nchar(数字)作用:ascとは反対にASCIIコードから文字Access:mid(文字列,N,L)SQLSver:substring(N文字列,L文字列)の役割を返します。すなわち、NからN+Lまでの文字列Access:abc(数字)SQLServer:abc(数字)の役割:数字の絶対値(漢字を当てる時に使う)を返すAccess:A between B And C SQLServer:A between B And C作用:AがBとCの間で3番目、AがBに境界しているかどうかを判断する。中国語の処理方法は、注入中に中国語の文字に出会うことがよくあります。中国語の文字に触れると、ドン引きしたくなる人もいます。実は中国語のコードを知っていれば、「中国語恐怖症」はすぐに克服できます。まず常識を言います。Accessでは中国語のASCIIコードはマイナスになる可能性があります。マイナスを取ったらabs()で絶対値を取ります。漢字の文字は変わりません。SQLServerでは、中国語のASCIIは正数ですが、UNICODEのダブルビットコードですので、関数ascii()でASCIIコードを取得することはできません。関数unicode()でunicode値を返し、nchar関数で対応する中国語文字を取得しなければなりません。上の2点を知ったら、中国語でも英語と似ていると思いますか?使用する関数に注意して、解いた範囲が広い以外は、方法はあまり変わりません。