Dutchman Daily
909 subscribers
114 photos
16 videos
18 files
133 links
The other side of me
This is me:
@its_dutchman
Download Telegram
لینکدین رو درک‌نمی‌کنم. نمی‌دونم به درد چی می‌خوره حتی. چرا مردم توش پست میذارن. چرا اصلا خودم اونجا اکانت دارم.
👍10🤡4👎1🥰1🤝1
این چلنج CTF حدود ۱۱ ساعت طول کشید و فاینالی حل شد.
بعد از پایان مسابقه یه دیتای خوبی ازش میدم.
👍6😘1
خب یه سوال دیگه بعد از حدود ۱۲ ساعت با همکاری صادق در نهایت حل شد.
این سوالش خیلیییی خوب بود اینم بهتون می‌گم.
🥰8😘1
سر این سواله تا الان خیلی وقت گذاشتم و خیلی راجبش خوندم ولی داره حل نمیشه :(
۳ساعته دارم وقت راجب آسیب‌پذیری‌هاش می‌خونم و تست می‌کنم ولی نمیشه که نمیشه :(
اگه این هم مثل قبلیا به جواب نرسه واقعا ناراحت می‌شم.
در نهایت از بین حدود ۹۰۰تا تیم ۱۱ام شدیم.
🔥17👏3🗿2💔1
Dutchman Daily
خب یه سوال دیگه بعد از حدود ۱۲ ساعت با همکاری صادق در نهایت حل شد. این سوالش خیلیییی خوب بود اینم بهتون می‌گم.
خب بریم سراغ این.
سوال چی بود؟ سوال صرفا یک فایل زیپ بود با حجم تقریبی ۱۹ مگابایت.
ما خیلی روش وقت گذاشتیم ولی به طور خلاصه می‌گم که چجوری حل شد.

زیپ رو که اکسترکت می‌کردیم، یک فایل حدود ۵۰۰ مگابایتی داخلش بود که اون یک فایل با فرمت xfs بود (فایل سیستم)

مطابق همیشه اول روش یک strings ران کردیم و همچنین روش binwalk ران کردیم و شروع کردیم به دیتا کشیدن ازش ولی خب چیز خیلی زیادی ازش گیرمون نیومد. البته یک شعری هم بود توش که نوشته بود:

In the digital deep, where cold shadows creep,
An ocean of zeros, in silence profound.
From the ether's expanse, without a glance,
The null terminator, its presence resound.

A specter of void, so subtly deployed,
Invisible terrors that weave and confound.
Through binary seas, a malevolent breeze,
A storm of nothing, where hopes run aground.

But closer it draws, with its unyielding jaws,
The null terminator, the end of all codes.
And I, just a byte, in this infinite night,
Await the silence where everything erodes.

The zeros surround me, an army so vast,
Each one a specter in the ghostly parade.
These hollow companions, with emptiness lined,
Form ranks on the horizon, a spectral brigade.

Their numbers are countless, their presence defined
By the void that they carry, and the chill they pervade.
No drumbeat disturbs, yet I feel confined,
In the grasp of the zeros, where light starts to fade.
🔥2
خلاصه وقتی با strings و binwalk کار به جایی نرسید، دیگه mountش کردیم و دیدیم که بله وقتی mount میشه یک سری عکس هست و همین شعره که با strings درش آورده بودیم.

دیگه خلاصه یه اسکریپت زدیم و روی عکس‌ها strings زدیم و binwalk زدیم و exiftool زدیم ببینیم به جایی میرسه یا نه که متاسفانه بازم به جایی نرسید.

یکی از عکسا با نام:
void_dread.jpg
باز نمی‌شد و وقتی روش properties می‌زدیم یک حجم خیلی عجیبی داشت. حجمش 9.2EB (اگزا بایت) که میشه 9,223,372,032,559,808,513 bytes
و به عبارتی میشه:
۹میلیون و ۲۰۰ ترابایت!

که خب وقتی دستور dd روش می‌زدیم دیدم حجمی که اشغال کرده کلا حدود چند مگابایته ولی وقتی properties زدیم دیدیم اینقدر حجم نشون میده و خب مشخص بود که همین فایله باید جواب باشه
عکس‌های mount شده از اون فایل‌سیستمه
اطلاعات فایل void_dread.jpg
🤔1
این فایل رو عملا نمیشد هیچ دستوری روش ران کرد، نه strings و نه binwalk و نه هیچ چیز دیگه. چرا؟ چون فایل خیلی بزرگه و محتواش نمی‌تونه لود شه توی مموری. اگر یک اسکریپت میزدیم که بخوایم ۱۰ گیگ ۱۰ گیگ ازش بخونیم فقط (یعنی بیاریم تو مموری و بریزیم بیرون)، حدود ۱ روز کامل فقط طول می‌کشید. (لیترالی ۲۴ ساعت!) حالا بهتون میگم چجوری به این رسیدم.

ما یک مقدار زیادی سرچ کردیم که ببینیم چکارش میشه کرد. بعد از تایم خوبی سرچ و اینا ما رسیدیم به یک چیزی به اسم sparse file
حالا sparse file چیه؟ اینجا می‌تونید ببینید:
https://en.wikipedia.org/wiki/Sparse_file#:~:text=In%20computer%20science%2C%20a%20sparse,file%20itself%20is%20partially%20empty.

اگر زبون هیربد رو هم بهتر می‌فهمید،‌ چیزی که هیربد گفت:
Hirbod Behnam
همینی که عملا نصف فایل ۰ هست و جا نمیگیره؟
Hirbod Behnam
fallocate

Hirbod Behnam
این qcow2 هم همین طوری هست فکر حنم

خلاصه، یک فایلیه که محتوا داره‌ها، ولی اومدن با x00\ یا همون صفر یا به طور دقیق‌تر nullbyte پرش کردن. یعنی تقریبا 9.2E بایت صفر گذاشتن برای این فایله ولی خب جایی اشغال نمی‌کنن روی سیستم.

ما فهمیدیم sparse file چیه ولی خیلی باز به چیزی نرسیدیم. در یک حرکت من اومدم روی فایله hexdump زدم و دیدم تا یه آدرسی رو می‌خونه و از یه جایی به بعد دیگه گیر می‌کنه و نمی‌خونه. خب مشخص بود که اونجا به صفرها رسیده. اومدم در یک حرک همه‌ی این محتواهای قبل از صفر رو خوندم و ریختم در یک فایل مجزا، و خب بله. معنادار بودن و یک عکس ساخته شد.
🤯3
اطلاعات hexdump روی اون فایل. اون اخرش دیگه گیر‌میکنه و داره به صفرها می‌رسه. پس تا آدرس 0064a80 عملا دیتای واقعی هست.
👏4
این اسکریپت پایتونی بود که عکس رو ساختم:

f = open("void_dread.jpg", "rb")
data = f.read(int("0064a80", 16))
f2 = open("/home/dutchman/Desktop/data.jpg", "wb")
f2.write(data)
👌4
این هم عکسی که ازش ساخته شد
🔥8
روی این عکسه هم هرچقدر باز آنالیز همیشگی مثل strings و سایز چیزا رو تکرار کردیم جواب نداد.

ما خلاصه چندساعت هی وقت می‌ذاشتیم و دنبال می‌گشتیم ولی به چیزی نمی‌رسیدیم. یه سری از کارهامون هم الکی بود ولی خب دیگه مشخص نبود اولش که درسته یا نه. مثلا یه سری کارهای forensicای روی عکس می‌کردم. r g b شو تغییر می‌دادم. با toolهای آنلاین روش سرچ می‌کردم (چون حس می‌کردم که ممکنه توی عکس قایم کرده باشن) خلاصه نشد که نشد و چند ساعت هدر رفت اینجا

در نهایت ما برگشتیم به همون شعره، توی شعره که باز دقت کردیم دیدیم حدودا معنیش اینه که از بین هیچی یه چی پیدا میشه. و تقریبا معنیش این بود که از بین اون صفرها یه چی پیدا میشه.

من این فکر زد به سرم که برم شروع کنم ۱۰ گیگ ۱۰ گیگ لود کنم فایل رو و بیارم توی مموری و ببینم به جز این چندهزار بایت اول که برای عکس بود و بعدش به صفرها می‌رسید، توی اون صفرها یه جایی اون وسطش باید باز یه دیتایی باشه. یعنی اول یه عالمه صفره بعد یه سری دیتا بعد باز یه عالمه صفر. من یک اسکریپت زدم که شروع کنه ۱۰ گیگ ۱۰ گیگ بخونه و ببینه همش صفره یا نه و اگر نبود دیتا رو بده به ما.
اینجوری شد که من فهمیدم خیلی طول میکشه. حدود ۸ ساعت گذشت و حدود یک سوم فایل تازه خونده شده بود. در کل این ۸ ساعت هم ۱۶ گیگ رم از من درگیر بود.

خلاصه فهمیدیم که این راهش نیست. بعد از ۸ ساعت من کد رو قطع کردم و باز گشتم ببینم چجوری میشه محتوای یک sparse file رو خوند. (کاری که باید اولش میکردم ولی حماقت کردم که نکردم)
و فهمیدم با دستوری lseek خیلی راحت میشه دیتاها رو پیدا کرد. خلاصه یک اسکریپت زدم و تمام رنج‌هایی که توشون دیتا بود و صفر نبود رو با lseek پیدا کردم.
🔥5
خلاصه یک اسکریپت در stackoverflow پیدا کردم که دیتاهایی رو که در sparse file وجود دارن پیدا می‌کرد:
https://stackoverflow.com/questions/46100881/sparse-files-how-to-find-contents

بعد که ران کردم rangeهایی که دیتا داشتن توی اون sparse file پیدا شد. اولین range خب برای همون عکسی بود که ازش پیدا کردم. دومین رنج که یه رنج طولانی بود یک دیتایی بود که هنوز نمی‌دونستم چیه ولی خب حدسم این بود که باید باشه. سومین range هم فقط یه بایت دیتا بود که مشخص بود به درد نمی‌خوره.

خلاصه من دومین range رو برداشتم دیتاش رو و ریختم توی یک فایل جدا. شروع کردم روش strings و binwalk و این‌ها باز و مثل همیشه دیدم هیچ flagای توش نیست و خیلی ناراحت کننده بود دیگه. تا الان حدود ۱۰ ساعت وقت صرف همین سوال شده بود و حل نشده بود هنوز.

یک hexedit روی این دیتایی که بین صفرها بود زدم و خب یه چیز جالبی دیدم.
🔥3
اون رنج‌هایی که دیتا داشتن. (دومی ببینید ادرسش رو چقدر زیاده. قشنگ باید حدود 4EB خونده میشد تا بهش برسیم)
🔥4
محتوای اون دیتاهای رنج وسط
🔥4
چیزی که مشخص بود این بود که این فایل PNGعه. ولی عکسش درست نبود و نمیشد بازش کرد. من دیدم خیلی صفر توی این عکس هست و حدسم این بود که اومدن باز رندوم صفر گذاشتن که خراب شه. اومدم یک اسکریپت نوشتم و هرچی صفر بود رو برداشتم و فایل رو مجدد ساختم ولی باز هم عکس نمایش داده نمیشد.

دیگه خیلی اعصابم خورد شده بود. حدود ۱۱ ساعت تا الان رفته. هیچی نخوابیدم. میگرنم گرفته. الانم باید میرفتم سرکار و نمی‌تونستم روش وقت بذارم.

من دیگه پیام دادم به صادق که من تا الان اینکارا رو کردم و نشد که نشد و دیگه دارم روانی میشم و بیا روش ببین باید چکارش کنیم تا حل شه.

بعد یکی دو ساعت دیدم صادق پیام داد که حل شد. راهشم همین بود ولی نباید همه‌ی صفرها رو پاک می‌کردیم. باید یکی درمیون بایت‌ها رو که صفر بودن پاک می‌کردیم. وقتی که همه‌ی صفرها رو پاک می‌کردم باعث میشد یه سری صفر که مال فایل هستن هم خراب شن و باید صرفا یکی درمیون بایت‌ها رو پاک می‌کردیم.

بعدش که یکی درمیون پاک شد، دیتای نهایی رو ریختیم تو یه فایل و عکس جدید ساخته شد.
2
عکس نهایی
🔥20