sploitset ftpwn mounts ftp directory on breach

This commit is contained in:
Michael 2017-08-02 09:30:39 -04:00
parent 52319b29ee
commit 10d2c0bbaa
4 changed files with 66 additions and 1 deletions

View file

@ -21,6 +21,27 @@ namespace ShiftOS.Frontend.Apps
public void OnLoad()
{
if(Hacking.CurrentHackable != null)
{
if (Hacking.CurrentHackable.VectorsUnlocked.Contains(Objects.SystemType.FileServer))
{
if(Mounts.Count > 2)
{
Mounts.RemoveAt(2);
}
var dir = new Objects.ShiftFS.Directory();
dir.Name = $"{Hacking.CurrentHackable.Data.SystemName} (ftp)";
Mounts.Add(dir);
foreach (var loot in Hacking.CurrentHackable.ServerFTPLoot)
{
if(!FileExists("2:/" + loot.LootName))
{
var bytes = Hacking.GetLootBytes(loot.PointTo);
}
}
}
}
Width = 720;
Height = 480;
_fList = new GUI.ListBox();

View file

@ -11,6 +11,37 @@ namespace ShiftOS.Frontend
{
public class HackableProvider : IHackableProvider
{
public byte[] FindLootBytes(string id)
{
foreach(var res in typeof(Properties.Resources).GetProperties(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static))
{
if(res.Name == id)
{
var obj = res.GetValue(null);
if(obj is System.Drawing.Image)
{
var img = (obj as System.Drawing.Bitmap);
using(var memstr = new System.IO.MemoryStream())
{
img.Save(memstr, System.Drawing.Imaging.ImageFormat.Png);
return memstr.ToArray();
}
}
else if(obj is System.IO.UnmanagedMemoryStream)
{
var ms = obj as System.IO.MemoryStream;
return ms.ToArray();
}
else if(obj is string)
{
var bytes = Encoding.UTF8.GetBytes(obj.ToString());
return bytes;
}
}
}
return null;
}
public Hackable[] GetHackables()
{
return JsonConvert.DeserializeObject<Hackable[]>(Properties.Resources.Hackables);

View file

@ -51,12 +51,12 @@ namespace ShiftOS.Frontend
string Port = args["port"].ToString();
string ExploitName = args["id"].ToString();
var ExploitID = Hacking.AvailableExploits.FirstOrDefault(x => x.ID == ExploitName);
Console.WriteLine(ExploitID.ExploitName);
if (ExploitID == null)
{
Console.WriteLine("[sploitset] invalid exploit.");
return;
}
Console.WriteLine(ExploitID.ExploitName);
var ExploitTarget = Hacking.CurrentHackable.PortsToUnlock.First(x => x.Value.ToString() == Port);
if (ExploitTarget == null)
{

View file

@ -81,6 +81,18 @@ namespace ShiftOS.Engine
}
}
public static byte[] GetLootBytes(string lootid)
{
foreach (var type in ReflectMan.Types.Where(x => x.GetInterfaces().Contains(typeof(IHackableProvider))))
{
var @interface = (IHackableProvider)Activator.CreateInstance(type, null);
var bytes = @interface.FindLootBytes(lootid);
if (bytes != null)
return bytes;
}
throw new NaughtyDeveloperException("Seems like the loot system's trying to work without any loot. This isn't normal.");
}
public static void InitHack(Objects.Hackable data)
{
var hsys = new HackableSystem();
@ -212,6 +224,7 @@ namespace ShiftOS.Engine
Objects.Payload[] GetPayloads();
Objects.Port[] GetPorts();
Objects.Loot[] GetLoot();
byte[] FindLootBytes(string lootid);
}
public class HackableSystem