نام کاربری: leviathan2
رمز عبور: ougahZi8Ta
پورت: 2223
هاست: leviathan.labs.overthewire.org (176.9.9.172)
وقتی وارد شدم یک ls کردم تا ببینم چه چیزایی داخل فولدر هست:
دیدم که یک اسکریپت به نام printfile وجود داره که قابل اجرا هم هست و setuid هم داره پس در قدم بعد سعی کردم رمز عبور کاربر leviathan3 رو از /etc/leviathan_pass/leviathan3/ بگیرم:
قابل هضم نبود که به این آسونیا هم باشه! یک ltrace روش انجام دادم تا کال های لایبرری هاشو ببینم:
یک فانکشن به اسم access استفاده میشه که با توجه به گوگل کردنم٬ فایلی که بهش داده میشه رو بررسی میکنه تا ببینه اجازه دسترسی بهش داریم یا نه. ولی یک چیز جالب توی همون صفحه پیدا کردم:
چیز مهمی که نوشته اینه که این تابع یک مشکل امنیتی داره و اون مشکل اینه که کاربر شاید بین فاصله ای که این تابع فایل رو چک میکنه تا وقتی که فایل باز میشه٬ این فایل رو عوض کنه! اونم با استفاده از لینک کردن!
پس به یک نقشه فکر کردم و نتیجه گرفتم چندتا دستور رو در یک مدت معینی اجرا کنم و وقتی اجرا میشه این اسکریپت رو اجرا کنم تا بتونم رمز عبور رو ازش بگیرم:
در دستور اول یک فایل میسازم٬ در دستور دوم اون فایل رو لینک میکنم به فایلی که رمز عبور داخلشه٬ در دستور سوم هم فایل رو پاک میکنم و این دستور ها هر ۰.۱ ثانیه اجرا میشه. وقتی اینو اجرا گذاشتم٬ همزمان اون اسکریپت رو اجرا کردم چندبار تا رمز عبور رو بهم بده:
و بعد چندین بار اجرا کردن تونستم پسورد رو بگیرم.