Dutchman Daily
905 subscribers
114 photos
16 videos
18 files
132 links
The other side of me
This is me:
@its_dutchman
Download Telegram
جالب بود
👍4🌚1
ایده‌ای ندارم مشکل این گوشی جدیدم چیه. ولی وقتی که به وایفای خونه وصل میشه، یهو باطریش دقیقه‌ای یک درصد کم میشه و شروع میکنه به شدت داغ شدن.
💩8😐3🤯1🍌1💔1
به هر وایفای دیگه‌ای وصل میشه هیچ مشکلی نداره، فقط وقتی به این وایفای خونه وصل میشه مشکل میخوره.
💩7🤔4🍌1😐1
حتی مثلا وایفای خونه رو با یه گوشی دیگه شیر کنم و وصل به اون گوشیه، بازم مشکلی نمی‌خوره. :/
💩7😐2🍌1
یک سوال CTF که امروز باهاش اشنا شدم، حلشو بعدش میذارم ببینید.
چیز عجیبی نداره، صرفا جالب بود:
.>+,[<-<.[,<<.--+[.<<[
🤓6👌1
کل جوابشم میشه این سایته:
https://esolangs.org/wiki/Binary_Brainfuck
👍1
به باینری برگرده و بعدش اسکی بشه میشه
Dutchman
🍌7🔥21💩1
اونجایی دیگه علاقم به CTF رو از دست دادم که با نیما نشستیم ۲۴ ساعت پای یک سوال pwn که فقط یک solve داشت و هر راهی که می‌رفتیم حل نمیشد و بعد پایان مسابقه فهمیدیم سوال غلط بوده و اون یه تیم هم رندوم فلگ رو سابمیت کرده.
😁8🔥3💩2👍1
امروز پلن Fuzz کردن libgd با استفاده از aflgo عه. با ما همراه باشید.
🔥4👍2💩2
من کلا یک مقدار از نیازمندیم بگم،‌ اینشکلیه که ما یک سری patch داریم که حدس میزنیم اینا آسیب‌پذیرن. اما خب برای اینکه مطمئن شیم هستن یا نه نیاز هست که exploit شن. این exploit کردنشون کار خیلی ساده‌ای نیست چون هم پروژه‌ها گنده‌ن و هم کلا exploit کردن یک پروژه بزرگ خیلی سخته، لذا در نهایت می‌خوایم اونایی رو exploit کنیم که مطمئنیم آسیب‌پذیرن. حالا برای اینکه بفهمیم آسیب‌پذیرن یا نه، می‌خوایم از یک فازر استفاده کنیم که اگر اونجا توی اون نقطه از diff که ما حدس زدیم آسیب‌پذیره، اون پروژه کرش کرد، حالا ما دیگه شروع کنیم به اکسپلویت کردنش.

برای این کار نیاز به یک فازری داریم که دقیقا اون نقطه‌ای که ما مد نظرمون هست رو فاز کنه برامون. حالا فازرها کلا نوع‌های مختلفی دارن و ما به عبارتی فازری می‌خوایم که به اون نقطه برسه (یعنی مطمئن باشیم که اون نقطه و یا در واقع اون node از گراف‌مون داره cover میشه)

این aflgo یک فازریه که کدبیسش همون afl معروفه اما می‌تونه به صورت directed اون جایی که ما خودمون نیاز داریم رو هم فاز کنه.

به عبارتی این توی دیسکپریشن خودشه:
AFLGo is an extension of American Fuzzy Lop (AFL). Given a set of target locations (e.g., folder/file.c:582), AFLGo generates inputs specifically with the objective to exercise these target locations.



درکل فازر جالبیه ولی کار باهاش خیلی سخته. نه داکیومنت درستی داره نه هیچی.
این ریپوشونه:
https://github.com/aflgo/aflgo

اینم مقاله‌شون:
https://mboehme.github.io/paper/CCS17.pdf
🔥6👎1
اون آسیب‌پذیری محتمل هم که دنبالشم اینجاس:
https://github.com/libgd/libgd/blob/master/src/gd_tga.c
خط ۲۵۷

در کل این تابع gdGetBuf آسیب‌پذیره و زیاد هم ازش ریپورت شده مخصوصا برای این پروژه libgd.

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

یک سری آسیب‌پذیری دیگه‌هم داره البته که اگر دوست داشتید می‌تونید برید بخونید توی cve mitre
🔥5👍1👎1
یک چلنج فوق‌ العادههههههههه زیبا. (بینهایت هم gdb یاد می‌گیرید با حلش.) فردا توضیحش میدم چجوری حل میشه. شوخوش.
8👎1
خب برسیم به توضیح این سوال. کد پایتونش رو اگر ببینید، اومده یک لایبرری ایمپورت کرده به اسم gdb.
خب حالا gdb چیه؟gdb یا به عبارتی GNU Debugger یک دیباگری هست که برای زبون‌های سطح پایینی مثل اسمبلی و c و cpp و اینا‌ها هست. می‌دونم که بعضا go یا جاوا هم حتی باهاش دیباگ می‌کنن. کلا یک ابزار خیلی خفنیه که روی سیستم‌های یونیکسی میتونه اجرا شه و یک باینری رو دیباگ کنه.

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

تا یک سری کارای خفن‌تر، مثلا در لحظه (runtime) عوض کردن مقادیر. مثلا ورودی یک تابع اگر هست ۲ اون رو تغییر بدید به ۵. یا در لحظه اگر روی خط ۵ برنامه هستید جامپ کنید برید به خط ۱۰.

کلا تقریبا هرکاریییی که دلتون بخواد با این دیباگر با اون برنامه می‌تونید انجام بدید
👍41👎1
برای حل این سوال حقیقتا یک دانش پایه‌ای از c اگر داشته باشید و با gdb مقداری کار کرده باشید و یک مقدار خیلی کوچک و ریزی هم os بلد باشید (نباشید هم با سرچ در میاد) کار تمومه
👍41👎1
در نهایت مثل باقی سوالا، هدف پیدا کردن فلگ هست.
👍41👎1
اگر کد پایتون رو نگاه کنید، داره چکار میکنه؟ داره
/bin/cat

رو اجرا می‌کنه. بیایید یکم دیپ‌تر شیم که با این کار دقیقا چه اتفاقی میوفته.

دستور cat یک کامند هست که شما باهاش می‌تونید محتوای یک فایل رو بخونید. مثلا cat flag.txt میاد محتوایی که توی فایل flag.txt هست رو براتون چاپ میکنه.

اما خود دستور cat خالی رو اگر بزنید چی میشه؟ اگر دستور cat خالی رو بزنید، هر ورودی‌ای که بهش بدید،‌همونو بهتون خروجی میده. به عبارتی میاد هرچی از stdin هست رو میگیره و میریزه تو stdout
یه نمونه‌ش رو پایین بهتون نشون میدم.
👍51👎1
اینجا من وقتی cat رو زدم، بعدش منتظر ورودی میمونه. من نوشتم hello و همون رو مجدد خروجی داد. من نوشتن dutchman و همون رو مجدد خروجی داد.
👍51👎1
خب بذارید یکم بیشتر باهاش ور بریم. زمانی که دستور cat صدا زده میشه، چه توابعی از libc کال میشن؟ منطقا اگر خیلی ابسترکت نگاه کنیم، باید بیاد اون فایل رو open کنه، read کنه و در نهایت write می‌کنه که ما بتونیم خروجی رو ببینیم. حالا یک دستور trace روی این cat می‌زنیم تا ببینیم واقعا چه توابعی از libc دارن صدا زده می‌شن.
من برای تست یک فایل می‌نویسم به اسم flag که توی اون فایل محتواش رو می‌نویسم hello
👍41👎1🔥1
اگر ببینید واقعا همین اتفاق داره میوفته. یعنی داره open رو صدا میزنه بعد read رو صدا میزنه و بعد write رو
👍31👎1🔥1
بیایید یکم دیپ‌تر شیم باز.
زمانی که دستور open صدا زده میشه، میاد اون فایل رو باز می‌کنه و یک فایل‌دیسکریپتور براش میسازه و الان یک فایل‌دیسکریپتور داریم که یک عددی داره (۰ مال stdin هست و ۱ ماه stdout و ۲ مال stderr) پس زمانی که میخواد flag رو open کنه شماره‌ی فایل‌دیسکریپتور بعدی، میشه ۳. یعنی زمانی که فایل flag رو open کردیم و لینک کردیم به فایل‌دیسکریپتور ۳، حالا تابع read از فایل‌دیسکریپتور ۳ میره شروع میکنه به خوندن و در نهایت هم میره writeش میکنه.
👍31👎1🔥1