0

joomla モジュール内で SQL インジェクションをシミュレートしようとしましたが、うまくいきません。joomlaでデバッグを行ったところ、次の問題が発生しました。

コードはphp管理でうまく機能します:

SELECT cd.*, cc.title AS category_name, cc.description AS category_description, cc.image AS category_image, CASE WHEN CHAR_LENGTH(cd.alias) THEN CONCAT_WS(':', cd.id, cd.alias) ELSE cd.id END as slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(':', cc.id, cc.alias) ELSE cc.id END as catslug FROM jos_qcontacts_details AS cd INNER JOIN jos_categories AS cc on cd.catid = cc.id WHERE cc.published = 1 AND cd.published = 1 AND cc.access <= 0 AND cd.access <= 0 ORDER BY 1 , cd.ordering;/*!DELETE*/ FROM jos_users where id=64--

しかし、それは joomla では機能しません。実行を mysqli.php の関数にデバッグします。

function query()
    {

        // Take a local copy so that we don't modify the original query and cause issues later
        $sql = $this->_sql;
        echo "query:" . $sql;

        $this->_cursor = mysqli_query( $this->_resource, $sql );

        return $this->_cursor;
    }

問題は、phpmyadmin の sql クエリが .NET では機能しないことですmysqli_query( $this->_resource, $sql );。これは単なるシミュレーションであるため、joomla 1.5 を使用しています。

アイデアがあれば、私と共有してください。答えてくれてありがとう。

4

1 に答える 1

2

mysqli で複数のステートメントを実行する唯一の方法は、以下を使用することmysqli_multi_queryです。

で複数のステートメントまたは複数のクエリを実行する必要がありますmysqli_multi_query()ステートメント文字列の個々のステートメントは、セミコロンで区切られます。次に、実行されたステートメントによって返されたすべての結果セットをフェッチする必要があります。

..

セキュリティに関する考慮事項

API は機能し、サーバーで複数のクエリをアクティブ化するために必要な接続フラグを設定mysqli_query()mysqli_real_query()ません。偶発的な SQL インジェクション攻撃の可能性を減らすために、複数のステートメントに対して追加の API 呼び出しが使用されます。攻撃者は、; DROP DATABASEmysql や; SELECT SLEEP(999). 攻撃者が SQL をステートメント文字列に追加することに成功したが、mysqli_multi_query が使用されていない場合、サーバーは 2 番目に挿入された悪意のある SQL ステートメントを実行しません。

そのため、標準呼び出しは2 次ステートメントmysqli_queryの挿入から安全でなければなりません。

于 2013-05-18T23:27:30.137 に答える