質問5- [SUCTF2019] EasySQL

件名アドレス:https//buuoj.cn/challenges

問題解決のアイデア

最初のステップ:タイトル、入力フィールドを入力します。タイトルから、SQLインジェクション攻撃であることがわかります。

ここに画像の説明を挿入

ステップ2:SQLステートメントをテストする

  1. 入力1' or '1'='1テストに抜け穴があり、ブロックされていることが判明したかどうか
    ここに画像の説明を挿入

  2. スタックインジェクションの脆弱性があるかどうかを確認します。入力により、1;show tables;#スタックの脆弱性があることがわかりました。
    ここに画像の説明を挿入

  3. スタックインジェクションを使用してフラグを表示してみてください。フラグがブロックされていることがわかりました。
    ここに画像の説明を挿入

  4. 情報を読んでヒントをselect $post['query']||flag from Flag得る||論理的でない、または

|| 具体语法规则为:
当两个操作数都为非 NULL 值时,如果有任意一个操作数为非零值,则返回值为 1,否则结果为 0;
当有一个操作数为NULL 时,如果另一个操作数为非零值,则返回值为 1,否则结果为NULL;
假如两个操作数均为 NULL 时,则返回值为 NULL
  1. テストステートメント1;set sql_mode=PIPES_AS_CONCAT;select 1は、プログラムの実行効果を次のようにします。
select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag

フラグを取得します:flag {27e56243-45c5-4c26-9c74-7b31521e9c13}
ここに画像の説明を挿入

その中でPIPES_AS_CONCAT 将 || 视为字符串的连接操作符而非 "或" 运算符

予期しない解決策について

シールド*がないため、入力*,1にフラグを立てることもできます

おすすめ

転載: blog.csdn.net/qq_37589805/article/details/115370118