
The Super Vulnerable Java Application(SVJA)は、Roniel and DaRon Podcast Showで紹介されているように、非常に一般的な脆弱性を多数内包するよう設計されたApache Strutsアプリケーションです。他の「意図的に脆弱性を持つ」ソフトウェアとは異なり、このソフトウェアは、過度に単純化された形や「キャプチャ・ザ・フラッグ」的な形ではなく、実際に頻繁に見られるのと同じ形で一般的な脆弱性を模倣するように設計されています。このソフトウェアは半定期的に更新・拡張されており、ポッドキャストの一部として一部の脆弱性のデモが行われています。
The RDPS Super Vulnerable Java Applicationは、まさにその名の通り、一般的で、しばしば「複雑」なさまざまな脆弱性を誰でも確認できるように作成された、超脆弱なJavaアプリケーションです。このソフトウェアは、Roniel and DaRon Podcast Show (https://www.youtube.com/channel/UCbj1JFcSJeTuf3qf9GPRemA) の一環として作成されました。オンラインにある他の多くのツールで見られるものよりも現実的な方法で、私たちが頻繁に遭遇する多くの脆弱性を議論し、紹介するためです。実際の悪用例については、ポッドキャストをご覧ください。
このアプリケーションが、数多くの事柄に対して非常に脆弱であることを意図している点を忘れないでください。実行場所には注意し、アクセスできる人を制限してください(Tomcatサーバーはlocalhostのみでリッスンし、常にあなたの個人マシン上でのみ実行してください)。あなたが自分のものを適切に管理できず、あなたのコピーを誰にでも晒してしまい、あなたのデータを盗まれたり、マシンをひどく侵害されたりしても、当方は責任を負いません。このアプリケーションは、安全が確保され、機密情報が一切なく、インターネットに接続されていない仮想マシン(VM)で実行することを推奨します。これを実行しているシステムとそのインスタンスを適切に保護できなければ、おそらくあなたにとって悪い日になるでしょう。適切な保護なしの無防備な肉体関係と同じように、あなたはいつか後悔する立場に自分を置いているだけです。警告されたと思ってください。ただし、プレイは推奨します ;-)
RDPS SVJAは、Reactを実行するJava Struts 2アプリケーションで構成されています。単に mvn clean package を実行することでビルドされます。
これにより、target内にWAR(svja.war)が作成されます。そのWARをTomcatのwebappsフォルダに配置するだけです。デフォルトのTomcatビルドでは、http://127.0.0.1:8080/svja にアクセスしてアプリケーションを利用します。
Tomcat 10以降を実行している場合は、Tomcatのcontext.xml設定ファイルに <Loader jakartaConverter="TOMCAT" /> を追加してください。
利用して手っ取り早く始めたい方のために、ルート (http://127.0.0.1:8080/svja) にはSwagger UIと、使用可能な基本的なOpenAPI仕様 (http://127.0.0.1:8080/svja/specification.yaml) が搭載されています。仕様、ひいてはSwagger UIは表面をなぞるだけに過ぎないことに注意してください(それが安全でないデシリアライゼーションなどの本質ですよね?)。
以下は、システム内の_主要な_脆弱性をアクション別にまとめたものです。
admin:admin (application administrator account)
bill:baker (privileged user account)
bob:barker (basic, read-only user account)
/api/authenticate?user.username=admin&user.password=admin
/api/authenticate?user.username=bill&user.password=baker
/api/authenticate?user.username=bob&user.password=barker
認証後、JSONまたはStrutsのどちらを使用しても、任意のアクションを呼び出すことができます。
GET /svja/api/authenticate?user.username=bill&user.password=baker HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Length: 0
DNT: 1
Connection: close
Cache-Control: max-age=0
GET /svja/api/authenticate HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 61
DNT: 1
Connection: close
Cache-Control: max-age=0
{
"user": {
"username": "bill",
"password": "baker"
}
}
GET /svja/api/authenticate/federated?user.username=bill%40rdps.local&usernameTranslationRegex=%2F%40rdps%5B.%5Dlocal%2F%2F HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Length: 0
DNT: 1
Connection: close
Cache-Control: max-age=0
GET /svja/api/authenticate/federated HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 61
DNT: 1
Connection: close
Cache-Control: max-age=0
{
"user": {
"username": "[email protected]"
},
"usernameTranslationRegex": "/@rdps[.]local//"
}
svjatokenを変更することを忘れないでください。
GET /svja/api/projects?projectId=1 HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Cookie: svjatoken=RaMu5vhFBgL8goV6Ja1ffLnpmcixNuAL7fUP;
Cache-Control: max-age=0
svjatokenを変更することを忘れないでください。
GET /svja/api/projects HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 19
DNT: 1
Connection: close
Cookie: svjatoken=RaMu5vhFBgL8goV6Ja1ffLnpmcixNuAL7fUP;
Cache-Control: max-age=0
{
projectId:1
}
これは進行中の作業であり、さらに多くの脆弱性や機能を計画しています(超脆弱なフロントエンドや他の超脆弱なアプリケーションを含む)。数か月ごとに私たちのところを確認し、Roniel and DaRon Podcast Showでアップデート、実際の悪用例、その他のアイデアをご覧ください。また、脆弱性を緩和または修正する方法を自分で考えてみることをお勧めします... 壊すのは簡単です... 緩和、修正、そして保護することが難しいのです。 幸運を祈り、ハンティングを楽しんでください!