なんと、コマンドがデータベースを直接ハッキングしたのです。

なんと、コマンドがデータベースを直接ハッキングしたのです。

SQLマップ

shigen最近、侵入ツールについて研究しましたsqlMapこれは、SQL インジェクション攻撃と侵入テストを自動化するための人気のあるオープン ソース ツールです。これは、Web アプリケーションの SQL インジェクションの脆弱性を検出して悪用するように特別に設計されています。SQLMap には、SQL インジェクションの脆弱性を自動的に検出して悪用し、データベースの機密情報を取得し、データの抽出、変更、削除などのさまざまなデータベース操作を実行するための豊富な機能セットが備わっています。MySQL、Oracle、SQLite、Microsoft SQL Server など、さまざまなデータベース管理システム (DBMS) をサポートしています。エラーベースのインジェクション、フェデレーテッド クエリ インジェクション、ブール ブラインド インジェクション、時間的ブラインド インジェクションなど、複数のインジェクション手法もサポートされています。これらの手法を使用すると、さまざまな種類の SQL インジェクションの脆弱性を自動的に検出して悪用できます。

正式なアドレスは次のとおりです: sqlmap コード アドレス

sqlmapはデータベースに直接接続します

sqlMap以下はデータベースに接続してデータベースのバージョン情報を取得する場合です。

python3 sqlmap.py -d 'mysql://root:[email protected]:3306/security' -f --banner

sqlmapはデータベースに直接接続します

単一の URL のプローブ

ここでは、特にテストに使用されるインターフェイスが記述されてshigenいますspring bootsqlMap

    @GetMapping(value = "findById2")
    public Result<User> findById2(@RequestParam(value = "id", defaultValue = "1", required = false) String id) {
    
    
        User user = userMapper.findById2(id);
        return Result.ok(user);
    }

idこのコードは読みにくいものではないと思いますが、私のインターフェイスは、この文字列型のパラメータを取得し、データベースからデータをクエリしてそれを返すというものです。

データベースの ORM フレームワークが採用されておりmybatis plus、データベース部分を操作するためのコードもここに置きます。

@Select("select * from user where id = ${id}")
User findById2(@Param("id") String id);

慎重なパートナーはすでに問題を発見していると思います。

次はステージに上がってくださいsqlMap

python3 sqlmap.py -u 'http://127.0.0.1:9000/penetration/findById2?id=20' -dbs

奇跡の瞬間を目撃せよ

すぐに結果に行きます!

すべてのデータベースを取得する

コンソールはすべてのローカル データベースを出力し、正確かつ完全です。怖くないですか。最初は信じられず、shigenめまいだと思いました。

コンソールによって出力された情報を調べてみましたpayload。そのパラメータは次のとおりですid= 2 and 5685=5685。これは単なるケースです。実行中に、常に条件の後に続くsqlmapこのようなステートメントが多数挿入されます。where

URL検出

これは明らかなケースで、常にand条件の後に条件を追加することで、SQL が可能な限りデータをクエリして、狂ったように挑発したり調べたりできるようにします。

==>  Preparing: select * from user where id = ?
==> Parameters: 20) AND 6535=9250 AND (2651=2651(String)

ただし--dbs、これはsqlMapコマンドや関数の氷山の一角にすぎず、次のような強力な機能もあります。

  Enumeration:
    These options can be used to enumerate the back-end database
    management system information, structure and data contained in the
    tables

    -a, --all           Retrieve everything
    -b, --banner        Retrieve DBMS banner
    --current-user      Retrieve DBMS current user
    --current-db        Retrieve DBMS current database
    --passwords         Enumerate DBMS users password hashes
    --dbs               Enumerate DBMS databases
    --tables            Enumerate DBMS database tables
    --columns           Enumerate DBMS database table columns
    --schema            Enumerate DBMS schema
    --dump              Dump DBMS database table entries
    --dump-all          Dump all DBMS databases tables entries
    -D DB               DBMS database to enumerate
    -T TBL              DBMS database table(s) to enumerate
    -C COL              DBMS database table column(s) to enumerate

皆さんに 1 つずつ試してもらうつもりはありません。ここで事例を示します--tables。確かに、ローカル データベース内のすべてのデータ テーブルがスキャンされています。つまり、seata4 つのテーブルです。

すべてのテーブル構造を取得する

多くの乾物を見逃さないように、さらなるユースケース スキルshigenが引き続き共有されます。ようこそ!评论 点赞 在看 关注

** また、静かに言及します: SQLMap は強力なツールですが、使用する場合は法律と倫理を遵守する必要があります。結局のところ、うっかり局内でしゃがんでしまうと、データの価値がわかります。**しかも、現在データがダウンしており、人々 (クラウド サービス) が監視し、データをチェックし、人々 (クラウド サービス) が記録を持っているため、隠れる場所はありません。

追記

この記事はここで終わると思いますか?また、質問も共有したいと思います。コードの脆弱性はどのようにして発見され、データベースに直接攻撃されたのですか? あまり責めることはできませんsqlMapが、世界中のデータベースは安全ではありません。重要なのはここです${id}

集中

  • ${id}これは文字列置換方式であり、パラメータ値を SQL ステートメントに直接埋め込むため、セキュリティ上のリスクがあります。
  • #{id}これは、コンパイル済みのパラメーター プレースホルダー メソッドであり、パラメーター値はプレースホルダーを通じて渡され、パラメーターのバインドはデータベース ドライバーによって実行されるため、より安全で信頼性が高くなります。

ここでのプリコンパイル済みパラメータは、最初に学習したものと少し似ていますprepareStatementmybatisまたは、mybatis plus最下層は次のように処理されます。

  1. プレースホルダーの生成: MyBatis はのパラメーター名#{id}を使用しid、さまざまなデータベース ベンダーに従って対応するプレースホルダーを生成します。たとえば、MySQL データベースの場合、プレースホルダは?、Oracle データベースの場合、プレースホルダは:1:2などになります。
  2. パラメータのバインド: MyBatis は、生成されたプレースホルダにパラメータ値をバインドします。このプロセスは、基礎となるデータベース ドライバーによって完了します。データベース ドライバーは、準備されたステートメント (PreparedStatement) を使用してこれらのプレースホルダーを処理し、パラメーター値をプレースホルダーに安全にバインドします。

したがって、Alibaba を含む多くの企業仕様ではjava开发手册、プレースホルダーの使用を明確に規定しています#{}

以上が今日の内容のすべてですが、合わせshigenて毎日が違います!

おすすめ

転載: blog.csdn.net/weixin_55768452/article/details/132536861