ソース:
訳:
この投稿は何についてのものですか?
アクセスした多くの Wordpress サイトで /xmlrpc.php ファイルを目にしたことがあるかもしれません。
また、http://site.com/wp /xmlrpc.php にアクセスしたときに表示されるエラー (XML-RPC サーバーは POST リクエストのみを受け入れます) を検索しようとしたこともあるかもしれません。
この投稿では、xmlrpc.php ファイルに関連する一般的な脆弱性を強調してみます。
What is XML-RPC ?
WordPress のXML-RPC は、実際には API または「アプリケーション プログラム インターフェイス」です。
これにより、モバイル アプリ、デスクトップ アプリ、その他のサービスを作成する開発者が WordPress サイトと通信できるようになります。
WordPress が提供する XML-RPC API は、Web インターフェイス経由で WordPress にログインしたときに実行できる多くのことを実行できるアプリケーションを開発者に作成する方法を提供します。
これらには次のものが含まれます。投稿を公開する
投稿を編集する
投稿を削除します。
新しいファイルをアップロードします (投稿用の画像など)
コメントのリストを取得する
コメントの編集
XML-RPC の一般的な脆弱性
XML-RPCに関連する主な弱点はブルートフォース攻撃です:攻撃者は xmlrpc.php. を使用してWordpress にログインしようとします。
これが実際にどのように行われるのか、潜在的な脆弱性がないか Wordpress サイトをテストするときにこれをどのように活用できるのかを見てみましょう。
ブルートフォース攻撃
1. これは、次の場所にある xmlrpc.php を開こうとすると最初に表示される内容。
http://
2. プロキシを開き (私は burp を使用しています)、リクエストを再送信します。
3. ここで最初に行うことは、POST リクエストを送信し、利用可能なすべてのメソッドをリストすることです。
なぜなら、そうすることで、どのようなアクションが実行可能であるかを知ることができ、そのうちの 1 つを攻撃に使用できる可能性があるからです。
すべてのメソッドをリストするには、図に示すように、次の POST データを含む POST リクエストを送信すると、利用可能なすべてのメソッドを含む応答が返されます。
<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>
以下を検索して、利用可能なことがわかった場合は、攻撃を続行できます。
*)wp.getUserBlogs
*)wp.getCategories
*)metaWeblog.getUsersBlogs
注:他にもいくつかの方法がありますが、これらは最も一般的に利用可能であり、これらについては以前に扱ったことがあるため、今覚えている方法についてのみ言及します。
4. ブルートフォースログインを実行するには、POSTリクエストで以下を送信します。有効なユーザー名がわかっている場合は、さらに良いでしょう。
有効なユーザー名のリストを見つけるには、 wp-scan を推奨します。
ほとんどの場合、企業は Wordpress サイトでユーザー名の列挙を阻止しようとしませんが、その理由はわかりません。
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>
5. これで、これを侵入者にロードしてブルートフォースで追い払うことができます。
間違ったパスを入力しても、正しいパスを入力しても 200 OK 応答が返されるため、Intruder を使用している場合は、応答の大きさに基づいてどちらが正しく、どちらが間違っているかを判断する必要があります。
正しくログインした場合の応答は次のようになります。
Other attacks ?
XSPA or simply port scanning !
1. すべてのメソッドをリストし、次を検索します。
「pingback.ping」
2. pingback.ping 文字列を見つけることができた場合は、次に進み、サーバーで ping を取得してみます。
netcat、Python サーバー、nodejs サーバー、または必要なものであれば Apache ログを使用することもできます。 ここでは、nodejs http-server を使用します。
サーバーを起動し、ポストデータで次のリクエストを送信します。
<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
<value><string>http://
</param><param><value><string>http://
</value></param></params>
</methodCall>
ここに記入する薄い部分が 2 つあります
1) サーバーのリンク
2) ping を呼び出すために使用される、WordPress サイトからの有効な投稿のリンク
応答で、faultCode と 0 より大きい値 (<value><int>17</int></value> ) を取得した場合、ポートが開いていることを意味します。
サーバー ログをチェックすることでこれを確認できます。
ほなほな。