وبشل (Web Shell) یک اسکریپت مخرب کوچک است که مهاجم پس از سوءاستفاده از باگ یک افزونه، قالب نالشده یا فرم آپلود آسیبپذیر، روی هاست بارگذاری میکند. این اسکریپت یک پنل مدیریت مخفی به هکر میدهد تا فایلها را بخواند، پایگاه داده را بدزدد یا هاست شما را به عضوی از باتنت تبدیل کند. در این راهنما روش ردیابی و ریشهکن کردن آن را مرور میکنیم.
وبشل کجا پنهان میشود؟
مهاجمان معمولاً اسکریپتهایشان را در پوشههایی میگذارند که دسترسی نوشتن دارند یا در دید نیستند:
- پوشهٔ آپلودها (مثل
wp-content/uploads/در وردپرس) داخل پوشههای ماهها و سالهای قدیمی. - پوشههای موقت مثل
/tmpیاwp-content/upgrade/. - به صورت تزریق در فایلهای قانونی سیستم مثل
index.php،wp-config.phpیاwp-blog-header.php. - تغییر نام به فایلهای فریبنده مثل
class-wp-cache.phpیاbackup-temp.php.
دستورات ترمینال برای ردیابی فوری
اگر دسترسی SSH یا ترمینال cPanel دارید، با این دستورات فایلهای مشکوک را شکار کنید:
۱. پیدا کردن فایلهای PHP در پوشهٔ آپلود
در یک ساختار استاندارد، پوشهٔ uploads فقط باید شامل عکس، ویدیو یا فایلهای مستندات باشد و هیچ فایل PHP قانونی نباید آنجا زندگی کند:
find /path/to/public_html/wp-content/uploads/ -type f -name "*.php*"۲. جستوجوی توابع خطرناک و کدهای مبهمسازیشده (Obfuscated)
وبشلها معمولاً کدهایشان را با Base64 یا توابع اجرای دستورات سیستمی پنهان میکنند:
grep -rEi "(eval\s*\(|base64_decode\s*\(|gzinflate\s*\(|shell_exec\s*\(|passthru\s*\()" \
--include="*.php" /path/to/public_html/wp-content/۳. پیدا کردن فایلهایی که اخیراً دستکاری شدهاند
اگر سایت امروز به هم ریخته، فایلهای PHP تغییریافته در ۲ روز گذشته را پیدا کنید:
find /path/to/public_html/ -type f -name "*.php" -mtime -2 -lsاسکن اتوماتیک با Maldet و ClamAV
ابزار LMD (Linux Malware Detect) یکی از پویشگرهای متنباز شناختهشده برای سرورهای وب است. نصبش دسترسی root میخواهد، پس روی سرور مجازی یا اختصاصی خودتان کار میکند؛ روی هاست اشتراکی cPanel از اسکنر خود پنل (اگر ارائهدهنده گذاشته باشد) استفاده کنید یا از پشتیبانی هاست اسکن بخواهید:
# نصب و بهروزرسانی الگوهای ویروس
cd /tmp && curl -O https://www.rfxn.com/downloads/maldetect-current.tar.gz
tar -xzf maldetect-current.tar.gz && cd maldetect-*
sudo ./install.sh
sudo maldet --update-signatures
# اسکن کامل پوشه وبسایت
maldet -a /var/www/html/
# مشاهده گزارش نتایج
maldet --reportبستن راه برگشت: ممنوعیت اجرای PHP در پوشه آپلود
حتی اگر هکر باز هم بتواند فایلی در پوشهٔ آپلودها بارگذاری کند، با قرار دادن یک فایل .htaccess داخل پوشهٔ uploads مانع اجرای آن در وبسرور شوید:
# در فایل wp-content/uploads/.htaccess (Apache 2.4 و LiteSpeed)
<FilesMatch "\.(?:php[0-9]?|phtml|phar)$">
Require all denied
</FilesMatch>در وبسرور Nginx نیز این محدودیت را در بلوک سرور قرار دهید:
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}تنظیم پرمیشنهای استاندارد
فایلهای هاست هرگز نباید با پرمیشن 777 اجرا شوند. مجوزهای استاندارد را بازیابی کنید:
# همهٔ پوشهها 755
find /var/www/html -type d -exec chmod 755 {} \;
# همهٔ فایلها 644
find /var/www/html -type f -exec chmod 644 {} \;
# فایل حساس تنظیمات دیتابیس محدودتر باشد (اگر سایت خطا داد، 640 بگذارید)
chmod 600 /var/www/html/wp-config.phpمنابع
- مستندات امنیتی OWASP: شناسایی و مقابله با Web Shell owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload
- مخزن رسمی Linux Malware Detect (Maldet) github.com/rfxn/linux-malware-detect
- راهنمای رسمی وردپرس: پاکسازی سایت هکشده (FAQ My Site Was Hacked) wordpress.org/documentation/article/faq-my-site-was-hacked