AtlasC2/TeamServer/Controllers/Implants/ImplantsController.cs

74 lines
2.3 KiB
C#

using System;
using Microsoft.AspNetCore.Mvc;
using APIModels.Requests;
using TeamServer.Services;
using TeamServer.Models;
namespace TeamServer.Controllers.Implants
{
[ApiController]
[Route("[controller]")]
public class ImplantsController : ControllerBase
{
private readonly IImplantService _implants;
public ImplantsController(IImplantService implants) { _implants = implants; }
[HttpGet]
public IActionResult GetImplants(){
var implants = _implants.GetImplants();
return Ok(implants);
}
[HttpGet("{implantId}")]
public IActionResult GetImplant(string implantId)
{
var implant = _implants.GetImplant(implantId);
if (implant is null) { return NotFound($"{implantId} not found"); }
return Ok(implant);
}
[HttpGet("{implantId}/tasks")]
public IActionResult ReturnTasks(string implantId)
{
var implant = _implants.GetImplant(implantId);
if (implant is null) { return NotFound($"{implantId} not found"); }
var taskOuts = implant.GetTaskOut();
return Ok(taskOuts);
}
[HttpGet("{implantId}/tasks/{taskId}")]
public IActionResult ReturnTask(string implantId, string taskId)
{
var implant = _implants.GetImplant(implantId);
if (implant is null) { return NotFound($"{implantId} not found"); }
var taskOut = implant.ReturnTaskOut(taskId);
if(taskOut is null) { return NotFound($"{taskId} not found"); }
return Ok(taskOut);
}
[HttpPost("{implantId}")]
public IActionResult TaskImplant(string implantId, [FromBody] ImplantTaskRequest req)
{
var implant = _implants.GetImplant(implantId);
if(implant is null) { return NotFound($"{implantId} not found"); }
var task = new ImplantTask() { Id = Guid.NewGuid().ToString() , Command = req.Command , Args = req.Args, File = req.File};
implant.TaskQueue(task);
var root = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{HttpContext.Request.Path}";
var path = $"{root}/tasks/{task.Id}";
return Created(path, task);
}
}
}