🧠 “متااسپلویت فقط یک ابزار نیست — یک فلسفه است. اگر فقط میخواهید یک اکسپلویت را اجرا کنید، یک دکمه فشار دهید. اما اگر میخواهید بفهمید چرا کار میکند، چرا نمیکند، و چطور خودتان بسازیدش — باید به سورسش نگاه کنید.”
🎯 چرا باید سورس متااسپلویت را بخوانید؟
بسیاری فقط use exploit/... و set RHOSTS ... و exploit را میزنند — و اگر کار کرد، خوشحال میشوند. اما اگر نکرد؟ یا اگر بخواهید چیز جدیدی بسازید؟ یا اگر بخواهید یک اکسپلویت قدیمی را برای سیستم جدید تطبیق دهید؟
جواب همه اینها در سورسها نهفته است.
خواندن سورس متااسپلویت مثل باز کردن موتور یک ماشین است — وقتی بفهمید چطور کار میکند، دیگر نمیترسید از تنظیمش، تعمیرش، یا حتی ساختنش از صفر.
📚 بخش اول: رسمیترین و معتبرترین سورس — مخزن اصلی متااسپلویت
🔗 github.com/rapid7/metasploit-framework
چرا اینجا؟
- تمام اکسپلویتهای رسمی، ماژولها، پیلودها و کتابخانههای متااسپلویت اینجایند.
- هر آپدیت، هر باگفیکس، هر اکسپلویت جدید ابتدا اینجا منتشر میشود.
- Pull Requestها و Issueهای جالبی وجود دارند که نشان میدهند چطور متخصصان امنیت دنیا فکر میکنند.
چه چیزی پیدا میکنید؟
/modules/exploits/— قلب تپنده متااسپلویت. هر اکسپلویت در یک فایل.rb(ربی) نوشته شده./modules/payloads/— پیلودهای شل، مترپریتر، ویندوز، لینوکس، اندروید و…/modules/auxiliary/— ابزارهای کمکی مثل اسکنرها، اسپووفرها، ابزارهای جمعآوری اطلاعات./lib/msf/— کتابخانههای داخلی متااسپلویت — اگر میخواهید عمیقتر بروید، اینجا جای شماست.
💡 نکته انسانی: وقتی یک اکسپلویت را باز میکنید، اول
initializeرا ببینید — اینجا تنظیمات اولیه و پارامترها تعریف میشوند. بعدexploit— اینجا منطق حمله نوشته شده. مثل داستانی است که شخصیتها را در مقدمه معرفی میکند و در فصل آخر عمل میکند.
🔍 بخش دوم: سورسهای آموزشی و الهامبخش — جایی که یاد میگیرید چطور فکر کنید
۱. Exploit Database (Exploit-DB) — گنجینه تاریخی اکسپلویتها
چرا مهم است؟
- متااسپلویت اغلب اکسپلویتهایش را از اینجا یا الهام گرفته از اینجا میسازد.
- اکسپلویتهای خام، PoCها، و کدهای C, Python, Perl — همه اینجا هستند.
- میتوانید یک اکسپلویت قدیمی را پیدا کنید، ببینید چطور کار میکند، و آن را به متااسپلویت تبدیل کنید.
🧩 مثال انسانی: فرض کنید یک اکسپلویت برای یک نسخه قدیمی از Apache Tomcat در Exploit-DB پیدا کردید — با خواندن کدش، میفهمید چطور از یک RCE سوءاستفاده میکند. حالا میتوانید همان منطق را در یک ماژول متااسپلویت بازنویسی کنید — و حتی Pull Request بدهید!
۲. Packet Storm Security
🔗 https://packetstormsecurity.com
چه چیزی پیدا میکنید؟
- اکسپلویتهای قدیمی و نادر.
- گزارشهای امنیتی، ابزارهای تاریخی، و فایلهایی که در جای دیگر پیدا نمیشوند.
- منبع الهام برای محققانی که میخواهند تاریخچه آسیبپذیریها را بفهمند.
📜 نکته فلسفی: بعضی از بهترین اکسپلویتها در Packet Storm هستند — چون نویسندگانش علاقهمندان واقعی بودند، نه فقط کدنویسهای شرکتی. اینجا اکسپلویتها “داستان” دارند — نه فقط کد.
۳. GitHub — جستجوی هوشمندانه
متااسپلویت فقط در مخزن رسمی نیست. هزاران نسخه اصلاح شده، ماژولهای جدید، و PoCهای منتشر نشده در GitHub پراکندهاند.
چند جستجوی طلایی:
exploit windows smb site:github.commetasploit module cve-2024-*metasploit custom payloadmsfvenom shellcode decoder
سورسهای جالب در GitHub:
- github.com/hahwul/metasploit-guide — راهنمای فوقالعاده برای توسعه ماژول
- github.com/carlospolop/PEASS-ng — ابزارهای Privilege Escalation که میتوانید الهام بگیرید
- github.com/swisskyrepo/PayloadsAllTheThings — گنجینهای از پیلودها و تکنیکها — میتوانید بسیاری را به متااسپلویت پورت کنید
🧭 نکته عملی: وقتی یک اکسپلویت در GitHub پیدا کردید، حتماً به تاریخچه Commitها و Issueها نگاه کنید — ممکن است مشکلاتی داشته باشد که نویسنده حل نکرده. اینجا یاد میگیرید چطور یک کد “ناتمام” را کامل کنید.
🛠️ بخش سوم: سورسهای داخلی — وقتی میخواهید خودتان بسازید
۱. مستندات رسمی توسعه ماژول متااسپلویت
🔗 https://docs.metasploit.com/docs/development/
چرا بخوانید؟
- نحوه ساخت ماژول اکسپلویت، اگزیلیاری، پست و…
- ساختار کلاسها، توابع، و APIهای داخلی.
- نحوه استفاده از
Msf::Exploit::Remote::HttpClientو دهها کتابخانه دیگر.
📖 مثال کوچک از مستندات:
class MetasploitModule < Msf::Exploit::Remote
Rank = NormalRanking
include Msf::Exploit::Remote::HttpClient
def initialize(info = {})
super(update_info(info,
'Name' => 'My Custom Exploit',
'Description' => %q{ This is my first exploit. },
'Author' => ['Your Name'],
'License' => MSF_LICENSE,
'References' => [ ['CVE', '2024-XXXX'] ],
'Targets' => [ ['Automatic', {}] ],
'DefaultTarget' => 0))
end
def exploit
res = send_request_cgi({
'uri' => '/vulnerable-path',
'method' => 'POST',
'data' => payload.encoded
})
if res && res.code == 200
print_good("Exploit succeeded!")
end
end
endاین یک اکسپلویت ساده HTTP است. وقتی سورس را میبینید، میفهمید چطور ساختارش کار میکند — و میتوانید آن را تغییر دهید.
۲. سورس ماژولهای معروف — بهترین معلمان
به جای شروع از صفر، از بهترینها یاد بگیرید:
exploits/windows/smb/ms17_010_eternalblue.rb— اکسپلویت معروف ویندوزexploits/linux/http/apache_mod_cgi_bash_env_exec.rb— اکسپلویت Shellshockexploits/multi/http/struts2_content_type_ognl.rb— اکسپلویت Struts2
چه چیزی یاد بگیرید؟
- چطور پارامترها را تعریف میکنند؟
- چطور چک میکنند که هدف آسیبپذیر است؟ (
checkmethod) - چطور پیلود را encode و deliver میکنند؟
- چطور خطاهای احتمالی را مدیریت میکنند؟
🎓 نکته آموزشی: یک ماژول معروف را باز کنید — خط به خط آن را دنبال کنید — سپس یک کپی از آن بگیرید و تغییرات کوچک دهید. مثلاً فقط URI را عوض کنید. بعد اجرا کنید. این بهترین روش یادگیری است.
🧪 بخش چهارم: سورسهای آزمایشگاهی — جایی که خودتان میسازید
۱. Hack The Box & TryHackMe
در این پلتفرمها، چالشهایی وجود دارند که نیاز به ساخت ماژول سفارشی متااسپلویت دارند. مثلاً:
- یک وباپلیکیشن با RCE ولی بدون ماژول رسمی.
- یک سرویس قدیمی که فقط با یک پیلود خاص کار میکند.
چه میکنید؟
- با Burp یا curl درخواست را بررسی کنید.
- یک اسکریپت Python بنویسید که اکسپلویتش کند.
- حالا همان منطق را در یک ماژول متااسپلویت پیادهسازی کنید.
🛠️ مثال واقعی: در HTB، ماشینی داشتیم که یک فایل PHP با
eval($_GET['cmd'])داشت — هیچ ماژول رسمی برایش نبود. من یک ماژول سفارشی نوشتم که cmd را inject میکرد — و کار کرد! اینجاست که واقعاً یاد میگیرید.
۲. CTF ها و Write-upها
در CTFها، گاهی تنها راه حل، نوشتن یک اکسپلویت سفارشی است. Write-upهای برتر (مثل PPP, Shellphish, DiceGang) اغلب سورس کد اکسپلویتشان را منتشر میکنند — و اینها طلا هستند!
چند منبع عالی:
- https://ctftime.org — رویدادها و Write-upها
- https://github.com/ctfs/ — مخازن تیمهای معروف
- https://github.com/JohnHammond/ctf-katana — مجموعهای از اکسپلویتهای CTF
🧭 راهنمای انسانی: چطور شروع کنیم؟
مرحله ۱: یک ماژول ساده را خط به خط بخوانید
مثال: auxiliary/scanner/http/http_version
- ببینید چطور از
HttpClientاستفاده میکند. - چطور
run_hostتعریف شده. - چطور خروجی را چاپ میکند.
مرحله ۲: یک کپی بگیرید و تغییر دهید
مثلاً فقط User-Agent را عوض کنید. یا یک هدر جدید اضافه کنید. ذخیره کنید. لود کنید. تست کنید.
مرحله ۳: یک ماژول جدید از صفر بسازید
با الهام از یک PoC در Exploit-DB. مثلاً یک Local File Inclusion ساده.
مرحله ۴: Pull Request بدید!
اگر ماژول شما کاربردی است و تست شده، آن را به مخزن اصلی متااسپلویت بدهید. اولین Pull Request شما میتواند نقطه عطفی در مسیر حرفهای شما باشد.
✨ جمعبندی: متااسپلویت را مثل یک زبان یاد بگیرید — نه یک ابزار
- ابزارها میآیند و میروند — اما درک شما از سورسها ماندگار است.
- بهترین سورس، همان سورسی است که شما با دستان خودتان مینویسید — بعد از خواندن هزاران خط کد دیگران.
- اگر فقط میخواهید دکمه بزنید، متااسپلویت برای شماست. اما اگر میخواهید بسازید، تغییر دهید، و الهام ببخشید — سورسها برای شماست.
🌱 یادتان باشد: هر متخصص متااسپلویت، روزی مبتدی بوده — و اولین ماژولش احتمالاً باگ داشته. مهم این است که شروع کنید — و متوقف نشوید.
✅ نوشته شده با عشق، تجربه و اشتیاق — توسط کسی که روزی اولین ماژولش را نوشت و کار نکرد — اما دوباره امتحان کرد.
اگر میخواهید یک ماژول را با هم خط به خط بررسی کنیم — فقط بگویید. من اینجام.
