PDA

View Full Version : سوال: مشکل با dll injection در ويندوز 64 بيتی



negative60
جمعه 20 تیر 1393, 22:48 عصر
تو يکی از تست هام برا اينجکت کردن يک dll در ويندوز سون 64 بيتی متوجه شدم برای اينجکت dll به يک پروسه 64 بيتی هم dll هم برنامه اينجکتور بايد 64 بيتی کامپايل شده باشن و تو همين ويندوز برای اينکه بتونم به يک پروسه 32 بيتی dll اينجکت کنم هم dll و هم برنامه اينجکتور بايد 32 بيتی کامپايل شده باشند
خوب اين خيلی قضيه رو پيچيده ميکنه آيا ميشه به يک طريقی برنامه اينجکتور بتونه هم به پروسه های 32 و هم 64 بيتی dll تزريق کنه؟ چه بايد کرد؟


و يک سؤال ديگه تو سرچ هايی که داشتم هم در سايت های خارجی هم فارسی گفته شده بود تابع CreateRemoteThread در ويندوز ويستا و سون کار نميکنه و بايد از تابع NtCreateThreadEx استفاده کرد اما تو تست هايی که کردم تابع CreateRemoteThread تو ويندوز سون مشکلی نداشت و کار کرد

#target
شنبه 21 تیر 1393, 02:06 صبح
والا منم همین فکرو میکنم راهی فعلا ندارم بشه به دو تا نوع پروسه اینجکت کرد چون بهرحال توابعی که در پروشه 32 بیتی هستند آدرساشون و رجیسترا 32 بیت و اونور همه 64 ! (منطقا فکر نمیکنم بشه ... ؟)

سوال دوم هم چرا کار نکنه ! یا نیاز اون یه Administrator و هم Session ها رو گفتن ؟

negative60
شنبه 21 تیر 1393, 02:48 صبح
بعضی از آنتی ويروس ها و يا برنامه هايی که نياز دارند به پروسه های مختلف کد تزريق کنند چطور در سيستم های 64 بيتی فعاليت ميکند که هم پروسه های 32 و هم 64 بيتی رو تحت پوشش قرار ميدن؟:متفکر:




سوال دوم هم چرا کار نکنه ! یا نیاز اون یه Administrator و هم Session ها رو گفتن ؟

من که تست کردم بدون نياز به دسترسی ادمين کار ميکنه اما تو يه مقاله (http://www.exploit-db.com/wp-content/themes/exploit/docs/30240.pdf) و چند تا فروم ايرانی و خارجی (http://www.rohitab.com/discuss/topic/39535-code-injections-beginner-and-advanced/) هم به همين مسأله اشاره کرده بودن که CreateRemoteThread
در ويندوز ويستا و سون به درستی کار نميکنه.

#target
شنبه 21 تیر 1393, 02:55 صبح
دلیل درست کار نکردن اینه که پروسه ای که میخواد اون تابع رو فراخوانی کنه فقط میتونه به پروسه هایی که تو Session خودش هستن ترد بسازه (سرویس ها مثلا Session شماره صفر هستن برنامه های کاربر ی جای دیگه .. احتمال میدم منظورش اینه )

مطمینی آنتی ویروس ها و برنامه ها فقط با ی پروسه 32 بیت این کارو میکنن ؟ (این طور برنامه ها اصولا کرنل هم ی درایوری دارن ! )

negative60
شنبه 21 تیر 1393, 03:21 صبح
مطمینی آنتی ویروس ها و برنامه ها فقط با ی پروسه 32 بیت این کارو میکنن ؟ (این طور برنامه ها اصولا کرنل هم ی درایوری دارن ! )

نه مطمئن نيستم :لبخند:, منظورم آنتی ويروس های معروف نبود برنامه های سطح پاينتر بود الان يکی از اين دست برنامه ها رو تو ويندوز 64 بيتی باز کردم دو تا پروسه برای خودش ايجاد کرده که يکيش 64 بيتی اجرا شده احتمالاً پروسه های 64 بيتی با همين تزريق ميشن و 32 بيتی ها هم توسط خودش.

چطور ميشه تشخيص داد که پروسه اي که ميخوايم بهش تزريق کنيم از نوع 32 بيتی هست يا 64 ؟

negative60
شنبه 21 تیر 1393, 03:53 صبح
از اين طريق (http://msdn.microsoft.com/en-us/library/ms684139.aspx) ميشه نوع 32 يا 64 بيتی پروسه ها رو تشخيص داد.
پس تا اينجا راه حل اين شد که يک اينجکتور 64 بيتی هم بايد همراه برنامه اصلی در ويندوز های 64 بيتی اجرا بشه و پروسه های 32 بيتی توسط خود برنامه و با dll خودش اينجکت بشن و 64 بيتی ها هم توسط اينجکتور با dll 64 بيتی تزريق بشن. (اگه اشتباه بود تصيح کنيد)
اگر کسی راه حل ديگه اي داشت خوشحال ميشم بشنوم.



ممنون تارگت عزيز که وقت گذاشتی.

kernel.programmer
شنبه 21 تیر 1393, 15:29 عصر
سلام

ببینین این لینکا کمکی میکنه

http://stackoverflow.com/questions/494284/createremotethread-32-64-and-or-64-32

https://raw.githubusercontent.com/OpenWireSec/metasploit/master/external/source/meterpreter/source/common/arch/win/i386/base_inject.c