mirror of
https://github.com/calebstewart/pwncat.git
synced 2024-11-27 19:04:15 +01:00
Added processes enumeration for Windows
This commit is contained in:
parent
895744a6bd
commit
95d7e393bc
91
pwncat/modules/windows/enumerate/system/processes.py
Normal file
91
pwncat/modules/windows/enumerate/system/processes.py
Normal file
@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from typing import Any, Dict, List
|
||||
|
||||
import pwncat
|
||||
import rich.markup
|
||||
from pwncat import util
|
||||
from pwncat.db import Fact
|
||||
from pwncat.modules import ModuleFailed
|
||||
from pwncat.modules.enumerate import EnumerateModule, Schedule
|
||||
from pwncat.platform import PlatformError
|
||||
from pwncat.platform.windows import PowershellError, Windows
|
||||
|
||||
|
||||
class ProcessData(Fact):
|
||||
def __init__(
|
||||
self,
|
||||
source,
|
||||
process_name: str,
|
||||
pid: int,
|
||||
session_name: str,
|
||||
status: str,
|
||||
user_name: str,
|
||||
):
|
||||
super().__init__(source=source, types=["system.processes"])
|
||||
|
||||
self.process_name: str = process_name
|
||||
|
||||
self.pid: int = pid
|
||||
|
||||
self.session_name: str = session_name
|
||||
|
||||
self.status: str = status
|
||||
|
||||
self.user_name: str = user_name
|
||||
|
||||
def title(self, session):
|
||||
out = f"[cyan]{rich.markup.escape(self.process_name)}[/cyan] (PID [blue]{self.pid}[/blue]) status [yellow]{rich.markup.escape(self.status)}[/yellow] as user [magenta]{self.user_name}[/magenta]"
|
||||
if "NT AUTHORITY\\SYSTEM" in self.user_name:
|
||||
out = out.replace("[magenta]", "[red]").replace("[/magenta]", "[/red]")
|
||||
if self.status == "Unknown":
|
||||
out = f"[dim]{out}[/dim]"
|
||||
return out
|
||||
|
||||
|
||||
class Module(EnumerateModule):
|
||||
"""Enumerate the current Windows Defender settings on the target"""
|
||||
|
||||
PROVIDES = ["system.processes"]
|
||||
PLATFORM = [Windows]
|
||||
|
||||
def enumerate(self, session):
|
||||
|
||||
proc = session.platform.Popen(
|
||||
["tasklist", "/V", "/FO", "CSV"],
|
||||
stderr=pwncat.subprocess.DEVNULL,
|
||||
stdout=pwncat.subprocess.PIPE,
|
||||
text=True,
|
||||
)
|
||||
|
||||
# Process the standard output from the command
|
||||
with proc.stdout as stream:
|
||||
for line in stream:
|
||||
line = line.strip()
|
||||
|
||||
if (
|
||||
not line
|
||||
or '"Image Name","PID","Session Name","Session#","Mem Usage","Status","User Name","CPU Time","Window Title"'
|
||||
in line
|
||||
):
|
||||
continue
|
||||
|
||||
(
|
||||
process_name,
|
||||
pid,
|
||||
session_name,
|
||||
_,
|
||||
_,
|
||||
status,
|
||||
user_name,
|
||||
_,
|
||||
_,
|
||||
) = (x.strip('"') for x in line.split('",'))
|
||||
|
||||
pid = int(pid)
|
||||
|
||||
yield ProcessData(
|
||||
self.name, process_name, pid, session_name, status, user_name
|
||||
)
|
||||
|
||||
proc.wait()
|
Loading…
Reference in New Issue
Block a user