PEASS-ng/winPEAS/winPEASexe/winPEAS/Helpers/Beaprint.cs
makikvues 1eb12a5852 - fixed wlan enumeration - if wlanapi.dll is unsupported, try to use netsh
- added support to log to file
- updated check for modifiable services
- updated documentation
2021-09-21 21:02:52 +02:00

430 lines
18 KiB
C#

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Threading;
namespace winPEAS.Helpers
{
internal static class Beaprint
{
public static string GRAY = "\x1b[1;37m";
public static string DGRAY = "\x1b[1;90m";
static string RED = "\x1b[1;31m";
public static string LRED = "\x1b[1;31m";
static string GREEN = "\x1b[1;32m";
static string LGREEN = "\x1b[1;32m";
public static string YELLOW = "\x1b[33m";
static string LYELLOW = "\x1b[1;33m";
static string BLUE = "\x1b[34m";
public static string LBLUE = "\x1b[1;34m";
static string MAGENTA = "\x1b[1:35m";
//static string LMAGENTA = "\x1b[1;35m";
static string CYAN = "\x1b[36m";
static string LCYAN = "\x1b[1;36m";
//static string REDYELLOW = "\x1b[31;103m";
public static string NOCOLOR = "\x1b[0m";
public static string ansi_color_bad = RED;
public static string ansi_color_good = GREEN;
public static string ansi_color_gray = GRAY;
public static string ansi_color_yellow = YELLOW;
public static string ansi_users_active = CYAN;
public static string ansi_users_disabled = BLUE;
public static string ansi_current_user = MAGENTA;
private static string Advisory =
"winpeas should be used for authorized penetration testing and/or educational purposes only." +
"Any misuse of this software will not be the responsibility of the author or of any other collaborator. " +
"Use it at your own networks and/or with the network owner's permission.";
private static string Version = "ng";
/////////////////////////////////
///////// PRINT THINGS /////////
/////////////////////////////////
public static void PrintBanner()
{
Console.WriteLine(BLUE + string.Format(@"
{0}*((,.,/((((((((((((((((((((/, */
{0},/*,..*((((((((((((((((((((((((((((((((((,
{0},*/((((((((((((((((((/, .*//((//**, .*(((((((*
{0}(((((((((((((((({2}**********/{1}########## {0}.(* ,(((((((
{0}(((((((((((/{2}********************/{1}####### {0}.(. (((((((
{0}((((((..{2}******************{3}/@@@@@/{2}***/{1}###### {0}./(((((((
{0},,....{2}********************{3}@@@@@@@@@@{2}(***,{1}#### {0}.//((((((
{0}, ,..{2}********************{3}/@@@@@%@@@@{2}/********{1}##{0}((/ /((((
{0}..(({1}###########{2}*********{3}/%@@@@@@@@@{2}/************{0},,..((((
{0}.({1}##################(/{2}******{3}/@@@@@{2}/***************{0}.. /((
{0}.({1}#########################(/{2}**********************{0}..*((
{0}.({1}##############################(/{2}*****************{0}.,(((
{0}.({1}###################################(/{2}************{0}..(((
{0}.({1}#######################################({2}*********{0}..(((
{0}.({1}#######(,.***.,(###################(..***.{2}*******{0}..(((
{0}.({1}#######*(#####((##################((######/({2}*****{0}..(((
{0}.({1}###################(/***********(##############({0}...(((
{0}.(({1}#####################/*******(################{0}.((((((
{0}.((({1}############################################{0}(..((((
{0}..((({1}##########################################{0}(..(((((
{0}....(({1}########################################{0}( .(((((
{0}......(({1}####################################{0}( .((((((
{0}((((((((({1}#################################{0}(../((((((
{0}(((((((((/{1}##########################{0}(/..((((((
{0}(((((((((/,. ,*//////*,. ./(((((((((((((((.
{0}(((((((((((((((((((((((((((((/", LGREEN, GREEN, BLUE, NOCOLOR) + NOCOLOR);
Console.WriteLine();
Console.WriteLine(LYELLOW + "ADVISORY: " + BLUE + Advisory);
Console.WriteLine();
}
public static void PrintMarketingBanner()
{
// Twitter
// Patreon link
Console.WriteLine(GREEN + string.Format(@"
/---------------------------------------------------------------------------\
| {1}Do you like PEASS?{0} |
|---------------------------------------------------------------------------|
| {3}Become a Patreon{0} : {2}https://www.patreon.com/peass{0} |
| {3}Follow on Twitter{0} : {2}@carlospolopm{0} |
| {3}Respect on HTB{0} : {2}SirBroccoli & makikvues{0} |
|---------------------------------------------------------------------------|
| {1}Thank you!{0} |
\---------------------------------------------------------------------------/
", GREEN, BLUE, RED, YELLOW) + NOCOLOR);
}
public static void PrintInit()
{
if (Checks.Checks.Banner)
{
PrintBanner();
}
Console.WriteLine(YELLOW + " WinPEAS" + GREEN + Version + NOCOLOR + YELLOW + " by @carlospolopm, makikvues(makikvues2[at]gmail[dot]com)" + NOCOLOR);
PrintMarketingBanner();
PrintLegend();
Console.WriteLine();
LinkPrint("https://book.hacktricks.xyz/windows/checklist-windows-privilege-escalation", "You can find a Windows local PE Checklist here:");
}
static void PrintLegend()
{
Console.WriteLine(YELLOW + " [+] " + GREEN + "Legend:" + NOCOLOR);
Console.WriteLine(RED + " Red" + GRAY + " Indicates a special privilege over an object or something is misconfigured" + NOCOLOR);
Console.WriteLine(GREEN + " Green" + GRAY + " Indicates that some protection is enabled or something is well configured" + NOCOLOR);
Console.WriteLine(CYAN + " Cyan" + GRAY + " Indicates active users" + NOCOLOR);
Console.WriteLine(BLUE + " Blue" + GRAY + " Indicates disabled users" + NOCOLOR);
Console.WriteLine(LYELLOW + " LightYellow" + GRAY + " Indicates links" + NOCOLOR);
}
public static void PrintUsage()
{
Console.WriteLine(YELLOW + " [*] " + GREEN + "WinPEAS is a binary to enumerate possible paths to escalate privileges locally" + NOCOLOR);
Console.WriteLine(LBLUE + " quiet" + GRAY + " Do not print banner" + NOCOLOR);
Console.WriteLine(LBLUE + " notcolor" + GRAY + " Don't use ansi colors (all white)" + NOCOLOR);
Console.WriteLine(LBLUE + " domain" + GRAY + " Enumerate domain information" + NOCOLOR);
Console.WriteLine(LBLUE + " systeminfo" + GRAY + " Search system information" + NOCOLOR);
Console.WriteLine(LBLUE + " userinfo" + GRAY + " Search user information" + NOCOLOR);
Console.WriteLine(LBLUE + " processinfo" + GRAY + " Search processes information" + NOCOLOR);
Console.WriteLine(LBLUE + " servicesinfo" + GRAY + " Search services information" + NOCOLOR);
Console.WriteLine(LBLUE + " applicationsinfo" + GRAY + " Search installed applications information" + NOCOLOR);
Console.WriteLine(LBLUE + " networkinfo" + GRAY + " Search network information" + NOCOLOR);
Console.WriteLine(LBLUE + " windowscreds" + GRAY + " Search windows credentials" + NOCOLOR);
Console.WriteLine(LBLUE + " browserinfo" + GRAY + " Search browser information" + NOCOLOR);
Console.WriteLine(LBLUE + " filesinfo" + GRAY + " Search files that can contains credentials" + NOCOLOR);
Console.WriteLine(LBLUE + " eventsinfo" + GRAY + " Display interesting events information" + NOCOLOR);
Console.WriteLine(LBLUE + " wait" + GRAY + " Wait for user input between checks" + NOCOLOR);
Console.WriteLine(LBLUE + " debug" + GRAY + " Display debugging information - memory usage, method execution time" + NOCOLOR);
Console.WriteLine(LBLUE + " log[=logfile]" + GRAY + $" Log all output to file defined as logfile, or to \"{Checks.Checks.DefaultLogFile}\" if not specified" + NOCOLOR);
Console.WriteLine();
Console.WriteLine(LCYAN + " Additional checks (slower):");
Console.WriteLine(LBLUE + " -lolbas" + GRAY + $" Run additional LOLBAS check" + NOCOLOR);
Console.WriteLine(LBLUE + " -linpeas=[url]" + GRAY + $" Run additional linpeas.sh check for default WSL distribution, optionally provide custom linpeas.sh URL\n" +
$" (default: {Checks.Checks.LinpeasUrl})" + NOCOLOR);
}
/////////////////////////////////
/// DIFFERENT PRINT FUNCTIONS ///
/////////////////////////////////
public static void GreatPrint(string toPrint)
{
// print_title
Console.WriteLine();
Console.WriteLine();
int halfTotal = 60;
//Console.WriteLine(LCYAN + " " + new String('=', halfTotal - toPrint.Length) + "(" + NOCOLOR + YELLOW + toPrint + LCYAN + ")" + new String('=', halfTotal - toPrint.Length) + NOCOLOR);
Console.WriteLine($"{LCYAN}════════════════════════════════════╣ {GREEN}{toPrint}{LCYAN} ╠════════════════════════════════════{NOCOLOR}");
}
public static void MainPrint(string toPrint)
{
// print_2title
Console.WriteLine();
//Console.WriteLine(YELLOW + " [+] " + GREEN + toPrint + NOCOLOR);
Console.WriteLine($"{LCYAN}╔══════════╣ {GREEN}{toPrint}{NOCOLOR}");
}
public static void LinkPrint(string link, string comment = "")
{
// print_info
//Console.WriteLine(YELLOW + " [?] " + LBLUE + comment + " " + LYELLOW + link + NOCOLOR);
Console.WriteLine($"{LCYAN}╚ {LBLUE}{comment} {LYELLOW}{link}{NOCOLOR}");
}
public static void InfoPrint(string toPrint)
{
// print_info
//Console.WriteLine(YELLOW + " [i] " + LBLUE + toPrint + NOCOLOR);
Console.WriteLine($"{LCYAN}╚ {LBLUE}{toPrint}{NOCOLOR}");
}
public static void NotFoundPrint()
{
GrayPrint(" Not Found");
}
public static void GoodPrint(string to_print)
{
Console.WriteLine(GREEN + to_print + NOCOLOR);
}
public static void BadPrint(string to_print)
{
Console.WriteLine(RED + to_print + NOCOLOR);
}
public static void ColorPrint(string to_print, string color)
{
Console.WriteLine(color + to_print + NOCOLOR);
}
public static void GrayPrint(string to_print)
{
Console.WriteLine(DGRAY + to_print + NOCOLOR);
}
internal static void PrintDebugLine(string log)
{
Console.WriteLine(YELLOW + " [Debug] " + log + NOCOLOR);
Console.WriteLine();
}
public static void PrintLineSeparator()
{
GrayPrint(" =================================================================================================");
Console.WriteLine();
}
public static void PrintException(string message)
{
GrayPrint($" [X] Exception: {message}");
}
public static void AnsiPrint(string to_print, Dictionary<string, string> ansi_colors_regexp)
{
if (to_print.Trim().Length > 0)
{
foreach (string line in to_print.Split('\n'))
{
string new_line = line;
foreach (KeyValuePair<string, string> color in ansi_colors_regexp)
{
new_line = Regexansi(new_line, color.Value, color.Key);
}
Console.WriteLine(new_line);
}
}
}
internal static void NoColorPrint(string message)
{
AnsiPrint(message, new Dictionary<string, string>());
}
static string Regexansi(string to_match, string color, string rgxp)
{
if (to_match.Length == 0 || color.Length == 0 || rgxp.Length == 0)
return to_match;
Regex regex = new Regex(rgxp);
foreach (Match match in regex.Matches(to_match))
{
if (match.Value.Length > 0)
to_match = to_match.Replace(match.Value, NOCOLOR + color + match.Value + NOCOLOR);
}
return to_match;
}
public static void DictPrint(Dictionary<string, string> dicprint, Dictionary<string, string> ansi_colors_regexp, bool delete_nulls, bool no_gray = false)
{
foreach (KeyValuePair<string, string> entry in dicprint)
{
if (delete_nulls && string.IsNullOrEmpty(entry.Value.Trim()))
{
continue;
}
string value = entry.Value;
string key = entry.Key;
string line = "";
if (!no_gray)
{
line = ansi_color_gray + " " + key + ": " + NOCOLOR + value;
}
else
{
line = " " + key + ": " + value;
}
foreach (KeyValuePair<string, string> color in ansi_colors_regexp)
{
line = Regexansi(line, color.Value, color.Key);
}
Console.WriteLine(line);
}
}
public static void DictPrint(Dictionary<string, string> dicprint, bool delete_nulls)
{
if (dicprint.Count > 0)
{
foreach (KeyValuePair<string, string> entry in dicprint)
{
if (delete_nulls && string.IsNullOrEmpty(entry.Value))
{
continue;
}
Console.WriteLine(ansi_color_gray + " " + entry.Key + ": " + NOCOLOR + entry.Value);
}
}
else
{
NotFoundPrint();
}
}
public static void DictPrint(List<Dictionary<string, string>> listdicprint, bool delete_nulls)
{
if (listdicprint.Count > 0)
{
foreach (Dictionary<string, string> dicprint in listdicprint)
{
DictPrint(dicprint, delete_nulls);
PrintLineSeparator();
}
}
else
{
NotFoundPrint();
}
}
public static void DictPrint(Dictionary<string, object> dicprint, bool delete_nulls)
{
if (dicprint != null)
{
Dictionary<string, string> results = new Dictionary<string, string>();
foreach (KeyValuePair<string, object> entry in dicprint)
{
results[entry.Key] = string.Format("{0}", entry.Value);
}
DictPrint(results, delete_nulls);
}
else
{
NotFoundPrint();
}
}
public static void DictPrint(List<Dictionary<string, string>> listdicprint, Dictionary<string, string> colors, bool delete_nulls, bool no_gray = false)
{
if (listdicprint.Count > 0)
{
foreach (Dictionary<string, string> dicprint in listdicprint)
{
DictPrint(dicprint, colors, delete_nulls, no_gray);
PrintLineSeparator();
}
}
else
{
NotFoundPrint();
}
}
public static void ListPrint(List<string> list_to_print)
{
if (list_to_print.Count > 0)
{
foreach (string elem in list_to_print)
{
Console.WriteLine(" " + elem);
// printf ${BLUE}"═╣ "$GREEN"$1"$NC #There is 1 "═"
}
}
else
{
NotFoundPrint();
}
}
public static void ListPrint(List<string> list_to_print, Dictionary<string, string> dic_colors)
{
if (list_to_print.Count > 0)
{
foreach (string elem in list_to_print)
{
AnsiPrint(" " + elem, dic_colors);
}
}
else
{
NotFoundPrint();
}
}
//////////////////////////////////
/// Delete Colors (nocolor) :( ///
/// //////////////////////////////
public static void DeleteColors()
{
GRAY = "";
RED = "";
LRED = "";
GREEN = "";
LGREEN = "";
YELLOW = "";
LYELLOW = "";
BLUE = "";
LBLUE = "";
MAGENTA = "";
//LMAGENTA = "";
CYAN = "";
LCYAN = "";
//REDYELLOW = "";
NOCOLOR = "";
ansi_color_bad = "";
ansi_color_good = "";
ansi_color_gray = "";
ansi_color_yellow = "";
ansi_users_active = "";
ansi_users_disabled = "";
ansi_current_user = "";
}
}
}