まず、ブルートフォース
ブルートフォースは、一般的に枯渇する方法の基本的な考え方を指し、全体的な状況が確認されるまで、徹底的な方法は、一般的な範囲のタイトルに基づいて回答を決定する条件の一部、およびこの範囲内のすべての可能なシナリオの一つ検証ずつです。対象のすべての条件の遵守を検証する場合場合は、この質問への解決策でした。徹底的な方法は、また、列挙法として知られています。
例:パスワードを推測し、ライブラリーなどをヒット
これは、パスワード辞書の使用で、ブルートフォース法を用いて、溶液のアカウントのパスワードを推測、攻撃の最も広く使用されている方法の一つです。
第二に、ソースコード解析
<PHP? もし(ISSET($ _GET [ 'ログイン'])){ //取得ユーザ名 $ユーザー= $ _GET [ 'ユーザ名']; //取得したパスワード $パス= $ _GET [ 'パスワード']; $パス= MD5($パス); //データベースを確認 = $クエリを"users`` SELECT * FROM WHEREユーザー= '$ユーザ' ANDパスワード= '$パス';"; $結果= mysqli_query($ GLOBALS [ "___ mysqli_ston"]、$クエリ)またはダイ( '<pre>の'((is_object($ GLOBALS [ "___ mysqli_ston"]))mysqli_error($ GLOBALS [ "___ mysqli_ston"])。?: (($ ___ mysqli_res = mysqli_connect_error())$ ___ mysqli_res:偽?)) '</ PRE>');。 ($結果であれば&& //ログイン成功 エコー"<P>パスワード保護された領域へようこそ{$ユーザー} </ P>"; エコー"<IMG SRC = \" {$アバター} \ "/>"; } 他{ //ログインに失敗しました エコー"<PRE> <br />ユーザー名および/またはパスワードを間違って</ PRE>。"; } (?(IS_NULL($ ___ mysqli_res = mysqli_close($ GLOBALS [ "___ mysqli_ston"])))偽:$ ___ mysqli_res)。 } ?>
見ることができるこのソースコードモジュールを観察することで、これは典型的なユニバーサルパスワードです。
それを見ることができるが、サーバはパラメータがログイン設定されているかどうかを確認するために何の防爆機構が存在しない、(PHPに設定されている変数を検出するためISSET関数を、関数は、ブール値、すなわち、真/の偽を返す)、及びパラメータは、ユーザ名、パスワードは任意のフィルタリングをしなかった、明らかにSQLインジェクションの脆弱性があります。
第三に、実際のブラスト
1、burpsuiteキャプチャブラスト
①プロキシの設定
②burpsuite傍受パケットブラストモジュールに送られ、キャプチャ、侵入者に送信し、ユーザ名とパスワードの入力を、すべての変数をクリアするには、[クリア]をクリックし、変数を追加するために追加し、クラスター爆弾(クラスター爆弾)を選択します。
図に示すように③ペイロードを設定し、提供することができます。
④Options設定。50件のスレッドへのブレーク後に起動します。メニューバーに缶侵入スタートクラッキング攻撃開始
別の管理者パスワードは、リターンの長さに基づいて正しいか確認することができます。
2.ハンド注入法
$クエリ= "` users` WHEREユーザー= '$ユーザ' ANDパスワードSELECT * FROM = '$パス';";
ソース小包は、単一のユーザー名とパスワードの引用のために実行しました
①低レベルで、使用管理「#ユーザ名、任意の成功にログオンするためのパスワード
②ユーザー名:「=」1つの任意の管理者のパスワード「または」1
中
出典:
<?PHPの
場合(ISSET($ _GET [ 'ログイン' ])){ // サニタイズユーザ名入力 $ユーザ = $ _GET [ 'ユーザ名' ]。 $ユーザー =((ISSET($ GLOBALS [ "___mysqli_ston"])&& is_object($ GLOBALS [ "___mysqli_ston"]))?mysqli_real_escape_string($ GLOBALS [ "___mysqli_ston"]、 $ユーザー):((でtrigger_error(「[MySQLConverterToo] !このコードは動作しませんmysql_escape_string()の呼び出しを修正。」、E_USER_ERROR))?"": "")); // サニタイズパスワード入力 $パス = $ _GET [ 'パスワード' ]; $パス =((ISSET($ GLOBALS [ "___mysqli_ston"])&& is_object($ GLOBALS [ "___mysqli_ston"]))?mysqli_real_escape_string($ GLOBALS [ "___mysqli_ston"]、 $パス):((でtrigger_error(「[MySQLConverterToo] mysql_escape_string()の呼び出しを修正このコードは仕事をしない"、!。E_USER_ERRORを))? "": "" )); $パス = MD5($パス); データベースを確認 $クエリを = "` users` WHEREユーザー= 'SELECT * FROM $ユーザー ' ANDパスワード= ' $パス ';" ; $結果 = mysqli_query($ GLOBALS [ "___mysqli_ston"]、 $クエリ)またはダイ( '<pre>の'((。is_object($ GLOBALS [ "___mysqli_ston"]))?mysqli_error($ GLOBALS [ "___mysqli_ston"]): (($ ___ mysqli_res = mysqli_connect_error())?$ ___ mysqli_res:偽)。) '</ PRE>' ); && mysqli_num_rows($結果)== 1 ){ // ユーザーを取得詳細 $行 = mysqli_fetch_assoc($結果)。 $アバター = $行 [ "アバター" ]。 // ログイン成功 エコー "<P>パスワード保護された領域へようこそ{ $ユーザー } </ P>" ; エコー "<IMG SRC = \" { $アバター } \ "/>" ; } 他{ // ログインに失敗しました 睡眠(2 )。 エコー"<PRE> <br />ユーザー名および/またはパスワードを間違って</ PRE>。" ; } ((IS_NULL($ ___ mysqli_res = mysqli_close($ GLOBALS [ "___mysqli_ston"])))?偽:$ ___ mysqli_res )。 } ?>
低レベルのコードの比較は、機能の大幅な増加、意志列特別なシンボル(X00、N、R ,,」、」、X1A)をmysql_real_escape_stringの中レベルのコードは、実質的にSQLを耐えることができ、エスケープインジェクション攻撃(ワイドバイト注入を扱うことができる)、しかし、まだ有効な抗吹き付け機構(スリープ(2)それは本当にありません)のメンバーではありません。
SQLインジェクションは、もはや有効ではありませんが、それでもBurpsuiteブラストを使用することができ、かつ低レベルの方法を爆破することは基本的に同じである。が、
高い
<?phpの 場合(ISSET($ _GET [ 'ログイン'])){ //チェックアンチCSRFトークン checkToken($ _REQUEST [ 'user_token']、$ _SESSION [ 'session_token'] 'index.phpの'); //サニタイズユーザ名入力 $ユーザ= $ _GET [ 'ユーザ名']; $ユーザー=にstripslashes($ユーザー)。 $ユーザー=((ISSET($ GLOBALS [ "___ mysqli_ston"])&& is_object($ GLOBALS [ "___ mysqli_ston"]))mysqli_real_escape_string($ GLOBALS [ "___ mysqli_ston"]、$ユーザー):?((でtrigger_error(「[MySQLConverterToo] !このコードはしない仕事mysql_escape_string()の呼び出しを修正する」、E_USER_ERROR))? "": "")); //サニタイズパスワード入力 $パス= $ _GET [ 'パスワード']; $パス=((ISSET($ GLOBALS [ "___ mysqli_ston"])&& is_object($ GLOBALS [ "___ mysqli_ston"]))mysqli_real_escape_string($ GLOBALS [ "___ mysqli_ston"]、$パス):((でtrigger_error(「[MySQLConverterToo] !このコードはしない仕事mysql_escape_string()の呼び出しを修正する」、E_USER_ERROR))? "": "")); $パス= MD5($パス); //チェックデータベース $クエリは= "users`` SELECT * FROM WHEREユーザー= '$ユーザ' ANDパスワード= '$パス';"; $結果= mysqli_query($ GLOBALS [ "___ mysqli_ston"]、$クエリ)またはダイ( '<pre>の'((is_object($ GLOBALS [ "___ mysqli_ston"]))mysqli_error($ GLOBALS [ "___ mysqli_ston"])。?: (($ ___ mysqli_res = mysqli_connect_error())$ ___ mysqli_res:?偽))「<。/ PRE>」); ($ &&結果mysqli_num_rows($結果)== 1)であれば{ //ユーザーの詳細を取得 $行= mysqli_fetch_assoc($結果)。 $アバター= $行[ "アバター"]。 //ログイン成功 エコー"<P>パスワード保護された領域へようこそ{$ユーザー} </ P>"; エコー"<IMG SRC = \" {$アバター} \ "/>"; } {他 //ログインに失敗しました 睡眠(RAND(0、3))。 エコー"<前> <br />ユーザー名および/またはパスワードを間違って</ PRE>"; } (?(IS_NULL($ ___ mysqli_res = mysqli_close($ GLOBALS [ "___ mysqli_ston"])))偽:$ ___ mysqli_res)。 } //トークンアンチCSRF生成 generateSessionTokenを(); ?>
トークン、への高レベルのコードがCSRF攻撃に抵抗するだけでなく、パケットキャプチャによるブラストの難しさを増加することができ、あなたは四つのパラメータが送信され、見ることができたときにログイン認証:ユーザ名、パスワード、ログインおよびuser_token。
一方、高レベルのコードは、(二つの連続バックスラッシュがある場合、除去バックスラッシュ文字列、のみ削除)にstripslashesを使用し、mysql_real_escape_stringのパラメータは、ユーザ名、パスワードを濾過し、脱出、 SQLインジェクションに対するさらなる。
方法:burpsuiteキャプチャ
burpsuiteキャプチャを回し1
侵入者に右クリックし、送信によって送信2.フェッチデータパケット
3.攻撃タイプがピッチフォークに設定され、パスワードとuser_tokenのためのロゴを追加
オプションバーでのGrepを探す4 - エキスを、[追加]をクリックします。そして、要求応答パケットを見ることのために、再フェッチ応答をクリックして、直接抽出する文字列を選択し、自動的に開始および終了識別データの上に満たされると、この値が保存され、後に使用されます。
図5は、変更をねじ込み
前記ペイロードは、代わりに、再帰はgrepをペイロード2可変型を可変パスワード辞書を追加し、わずかに最初の要求の初期ペイロードに格納されたデータで埋めます。
7.startアタック