Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2024-57521-RuoYi-SQLi — CVE-2024-57521の静的コード監査。RuoYi-Vueのジェネレータモジュールにおける認証済みSQLインジェクションで、ソースからシンクへの分析と%0bフィルタバイパスPoCを含む。 | Kitploit
ツール/GitHubGitHub/xs2024770/cve-2024-57521-ruoyi-sqli
静的コード分析 (SAST)脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティ論文と研究学習と教育
GitHubxs2024770/cve-2024-57521-ruoyi-sqli

CVE-2024-57521-RuoYi-SQLi

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2024-57521の静的コード監査。RuoYi-Vueのジェネレータモジュールにおける認証済みSQLインジェクションで、ソースからシンクへの分析と%0bフィルタバイパスPoCを含む。

リポジトリを見る
9時間27分前未レビュー

🛡️ CVE-2024-57521 RuoYi-Vue 認証後SQLインジェクション脆弱性監査ノート

0. プロジェクト宣言

本リポジトリはセキュリティ研究および教育目的でのみ使用されます。本文書の技術を未授权の攻撃行為に利用しないでください。すべてのテストはローカルの静的コード監査環境で完了しています。


1. 脆弱性概要

  • CVE番号:CVE-2024-57521
  • 影響コンポーネント:RuoYi-Vue 権限管理システム(ruoyi-generator モジュール)
  • 影響バージョン:<= v4.7.9
  • 脆弱性タイプ:認証後SQLインジェクション(ブラインドSQLインジェクション / CWE-89)
  • CVSSスコア:10.0 (Critical)
  • 監査方式:純粋な静的コード監査(ソースコード分析)

2. データフロー監査分析 (Source → Filter → Sink)

2.1 Source(ユーザー入力入口)

  • ファイル位置:ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java

重要コード:

root@kitploit:~
@PostMapping("/createTable")
public AjaxResult createTableSave(@RequestParam("sql") String sql, @RequestParam("tplWebType") String tplWebType)
{
    try
    {
        SqlUtil.filterKeyword(sql); // 在进入业务前调用过滤器

分析:バックエンド管理者はHTTP POSTリクエストのsqlパラメータを通じて任意のデータベーステーブル作成文を渡すことができます。入口点ではユーザー入力に対する十分な制限が行われておらず、直接後続のフィルター処理に渡されます。

スクリーンショット証拠: 03-SqlUtil-filterKeyword

2.2 Filter(フィルターの致命的欠陥)

· ファイル位置:ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java

核心欠陥コード:

root@kitploit:~
// 第16行:黑名单定义,注意关键词带有【尾随空格】
public static String SQL_REGEX = "\u0008|%0A|and |extractvalue|updatexml|sleep|information_schema|exec...";

// 第61-66行:过滤逻辑
String normalizedValue = value.replaceAll("\\p{Z}|\\s", ""); // 先清空了输入里的所有空格
String[] sqlKeywords = StringUtils.split(SQL_REGEX, "\\|");
for (String sqlKeyword : sqlKeywords)
{
    if (StringUtils.indexOfIgnoreCase(normalizedValue, sqlKeyword) > -1)
    {
        throw new UtilException("请求参数包含敏感关键词" + sqlKeyword + ",可能存在安全风险");
    }
}

欠陥分析:フィルターはまず replaceAll("\p{Z}|\s", "") を実行し、入力内のすべての空白文字を削除します。しかし、ブラックリスト SQL_REGEX 内のキーワード(例:"and "、"select ")には末尾にスペースが付いています。これによりマッチングが必然的に失敗し、攻撃者がキーワードの後に %0b(垂直タブ)をスペースの代わりに使用するだけで、ブラックリストチェックを完全にバイパスできます。

スクリーンショット証拠:

02-SqlUtil-SQL_REGEX 01-GenController-createTableSave

2.3 Sink(危険点)

· ファイル位置:ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml

重要コード:

root@kitploit:~
<update id="createTable">
    ${sql}
</update>

分析:MyBatis の ${} は安全なプリコンパイル #{} ではなく、文字列を直接連結します。これにより、フィルターをバイパスした悪意のあるSQLがデータベースに送られ実行されます。これは典型的な「ブラックリストフィルタリング + 安全でない連結」の組み合わせ脆弱性です。

スクリーンショット証拠:

04-GenTableMapper-createTable

3. PoCロジックと悪用の考え方

3.1 バイパス手法

· 方法:攻撃者は %0b(MySQL の垂直タブ、\s のマッチング範囲に含まれる)を SQL 文内のスペースの代わりに使用します。

3.2 完全な実行チェーン分析

  1. HTTP で %0b を含む Payload を送信:CREATE table xxx as SELECT%0b111 FROM sys_job WHERE 1=0 AND%0bIF(<条件>, 1, 1/0);
  2. Payload が filterKeyword メソッドに入り、%0b が \s にマッチして削除され、文字列は select111 と andIF になります。
  3. ブラックリストは "select "(スペース付き)であるため、"select111".indexOf("select ") は -1 を返し、ブラックリストのブロックを正常にバイパスします。
  4. 危険なパラメータが MyBatis に入り、${sql} がそれをデータベースに連結します。
  5. MySQL が解析する際、%0b は有効な空白文字と見なされ、SQL が正常にインジェクション実行されます。

3.3 ブラインドインジェクション自動化の考え方

· 検出原理:IF(<条件>, 1, 1/0) をブラインドSQLインジェクションの検出器として使用します。 · 条件が偽:ゼロ除算エラーが発生し、サーバーは HTTP 500 を返します。 · 条件が真:正常でエラーなし。 · 抽出方法:二分法を使用してデータベースデータをビット単位で推測できます。


4. まとめと修正提案

4.1 脆弱性の原因まとめ

この脆弱性は、典型的な「不完全な修正」によるバイパスです。開発者は以前の同種のSQLインジェクションを修正する際にブラックリスト機構を導入しましたが、ブラックリストがスペースに依存していることを見落とし、スペースを削除する前処理ロジックがブラックリストのマッチング条件を破壊し、最終的に新たなバイパス(CVE-2024-57521)を引き起こしました。

4.2 修正提案

· ブラックリスト機構の廃止:ブラックリストに依存せず、ホワイトリスト機構こそが安全の基盤です。 · プリコンパイルの使用:MyBatis の ${sql} を #{} プリコンパイル方式に変更します。動的にSQLを渡す必要がある場合(テーブル作成、Order Byなど)、厳格な抽象構文木(AST)解析または厳格なパラメータ検証を使用すべきです。 · フィルターの改善:ブラックリストを使用する必要がある場合、ブラックリストキーワードの末尾スペースを除去し、比較前に統一的な正規化(小文字への統一、%0b などをスペースに置換)を行う必要があります。


5. 参考リンク

· NVD - CVE-2024-57521 · RuoYi-Vue Gitee リポジトリ

ツールをダウンロード