Regular expression Denial of Service - ReDoS
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
正規表現サービス拒否攻撃 (ReDoS) は、誰かが正規表現(テキスト内のパターンを検索し一致させる方法)の動作の弱点を利用することで発生します。時には、正規表現が使用されると非常に遅くなることがあります。特に、処理対象のテキストが大きくなると、その遅さはひどくなります。この遅さは、テキストサイズのわずかな増加でも急速に悪化することがあります。攻撃者はこの問題を利用して、正規表現を使用するプログラムが長時間正常に動作しないようにすることができます。
詳細はhttps://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoSを確認してください。
悪意のある正規表現パターンとは、作成された入力に引っかかり、DoSを引き起こすことができるものです。悪意のある正規表現パターンは、通常、繰り返しを伴うグループ化や、繰り返しまたは選択肢が重なり合う繰り返しグループを含みます。悪意のあるパターンのいくつかの例は次のとおりです:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} for x > 10
これらはすべて、入力 aaaaaaaaaaaaaaaaaaaaaaaa!
に対して脆弱です。
CTF(またはバグバウンティ)では、正規表現が一致する機密情報(フラグ)を制御しているかもしれません。その場合、正規表現が一致した場合にページをフリーズ(タイムアウトまたは長い処理時間)させることが有用です。そうすることで、文字列を1文字ずつ流出させることができます:
この投稿では、このReDoSルールを見つけることができます: ^(?=<flag>)((.*)*)*salt$
例: ^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
この解説では、次のものが見つかります: <flag>(((((((.*)*)*)*)*)*)*)!
この解説では、次のように使用されました: ^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
以下は、入力と正規表現の両方を制御するReDoSの例です:
AWSハッキングを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、練習する:HackTricks Training GCP Red Team Expert (GRTE)