2017-03-22 9 views
0

私は現在、友人のコードを使いこなしています(彼はWebアプリケーションをテストするために100%権限を与えました)、私はコードのいくつかの部分を見ることができる脆弱性を発見しました。しかし、さまざまなファジング/手動テスト技術を使って悪用しようとすると、私は冗長なエラーを得ることができず、クエリを使用して認証をバイパスすることもできません。私は--cookie = ""フラグを使ってsqlmapを使ってこれを悪用しようとしましたが、成功しませんでした。このコード行はSQLI攻撃の脆弱性がありますか?

私は$トークン変数は「の間に包まれていません」ので、私は、次の追加と考えていたことを認識しています:1 OR 1 = 1「 - (動作しませんでした)

これまでのところ、私が持っています唯一のリターンとしてmysqli_resultオブジェクトを取得することができた:。

mysqli_result Object 
(
    [current_field] => 0 
    [field_count] => 5 
    [lengths] => 
    [num_rows] => 0 
    [type] => 0 
) 
//which, by the way, changes values depending upon what I input/fuzz. 

    <?php 

include_once("mysql.php"); 

$ck = $_COOKIES; 
if(isset($ck["session"])){ 
    $token = $ck['session']; 
    $conn->query("SELECT * FROM sessions WHERE token=$token AND loggedin=1"); 
    if ($result->num_rows > 0) { 
    header("Location: account.php"); 
    } 
} 

?> 
+3

はい、そうです。パラメータ化する。 – chris85

答えて

4

はい、そのコード行がSQLインジェクションに対して脆弱である

あなたは脆弱性を公開しますパターンを求めている場合は、ちょうど考えます文字列'token'を入力してください。

その後、生成されたSQLは次のようになります。

SELECT * FROM sessions WHERE token=token AND loggedin=1 

または、1 OR 1=1 --が含まれ、--でクエリが可能ことができるように、コメントを開始するには:

SELECT * FROM sessions WHERE token=1 OR 1=1 -- AND loggedin=1 

-

この脆弱性をさらに悪用する限り、ハッカーには迅速に把握するためのツールが用意されています。

時間を費やす必要はありません。 の準備文とバインドプレースホルダを使用してコードをリファクタリングして、脆弱性を修正してください。

この脆弱性が存在する場合、この同じ開発者は、コード全体でSQLインジェクションの脆弱性を膨らませている可能性が非常に高いです。すべてのコードは修復が必要です。

関連する問題