Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Tooltip Helper info in every label for easy to understand #315

Open
wants to merge 3 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added GetLauncherDownload API endpoint
- Added Grunt FileBrowser
- Added back missing GetNetShares task
- Added Tooltip Helper info in every label for easy to understand

### Changed
- Disallow Administrators from changing other user's passwords
Expand Down
38 changes: 37 additions & 1 deletion Covenant/Components/Launchers/LauncherForm.razor
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@
</div>
<div class="form-group col-md-3">
<label for="ImplantTemplateId">ImplantTemplate</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>ImplantTemplate</b> is the type of implant that the launcher will generate.
</div>
</a>
<select id="ImplantTemplateId" name="ImplantTemplateId" @onchange="(e => OnImplantTemplateChanged(e))" class="form-control">
@foreach (var ImplantTemplate in ApplicableImplantTemplates)
{
Expand All @@ -53,7 +58,13 @@
</div>
<div class="form-row">
<div class="form-group col-md-3">
<label for="DotNetVersion">DotNetVersion</label><br />
<label for="DotNetVersion">DotNetVersion</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>DotNetVersion</b> of the implant that will be generated. You'll be limited to a choice of the <b>DotNetVersion</b>s compatible with the chosen <b>ImplantTemplate</b>.
</div>
</a>
<br />
<select id="DotNetVersion" name="DotNetVersion" @bind="Launcher.DotNetVersion" class="selectpicker show-menu-arrow" data-dropup-auto="false" data-width="auto">
@foreach (string n in GetApplicableDotNetVersions())
{
Expand Down Expand Up @@ -137,30 +148,55 @@
{
<div class="form-group">
<label for="SMBPipeName">SMBPipeName</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>SMBPipeName</b> is the name of the named pipe that the Grunt will bind to and listen on. This option is only relavent when using the SMB <b>CommType</b>, and will only be displayed if you have selected the SMB <b>CommType</b>.
</div>
</a>
<input id="SMBPipeName" name="SMBPipeName" @bind="@Launcher.SMBPipeName" class="form-control">
<div class="text-danger"><ValidationMessage For="() => Launcher.SMBPipeName" /></div>
</div>
}
<div class="form-row">
<div class="form-group col-md-3">
<label for="Delay">Delay</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>Delay</b> is the time that the Grunt will sleep in-between each poll of the server. A larger <b>Delay</b> value will result in stealthier communication, but increase the time it takes to task a Grunt.
</div>
</a>
<input id="Delay" name="Delay" @bind="@Launcher.Delay" class="form-control" type="number">
<div class="text-danger"><ValidationMessage For="() => Launcher.Delay" /></div>
</div>
<div class="form-group col-md-3">
<label for="JitterPercent">JitterPercent</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>JitterPercent</b> is the percentage of variability in the <b>Delay</b> value.
</div>
</a>
<input id="JitterPercent" name="JitterPercent" @bind="Launcher.JitterPercent" class="form-control" type="number">
<div class="text-danger"><ValidationMessage For="() => Launcher.JitterPercent" /></div>
</div>
<div class="form-group col-md-3">
<label for="ConnectAttempts">ConnectAttempts</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>ConnectAttempts</b> is the number of consective times a Grunt will attempt to poll the listener before quitting. If a Grunt cannot reach the listener and fails to successfully poll the listener more times than the <b>ConnectAttempts</b> value, it will quit.
</div>
</a>
<input id="ConnectAttempts" name="ConnectAttempts" @bind="Launcher.ConnectAttempts" class="form-control" type="number">
<div class="text-danger"><ValidationMessage For="() => Launcher.ConnectAttempts" /></div>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-3">
<label for="KillDate">KillDate</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>KillDate</b> is the date at which a Grunt will quit and stop calling back to the listener.
</div>
</a>
<input id="KillDate" name="KillDate" @bind="Launcher.KillDate" class="form-control">
<div class="text-danger"><ValidationMessage For="() => Launcher.KillDate" /></div>
</div>
Expand Down
25 changes: 25 additions & 0 deletions Covenant/Components/Listeners/BridgeListenerForm.razor
Original file line number Diff line number Diff line change
Expand Up @@ -15,31 +15,56 @@
<div class="form-row">
<div class="form-group col-md-4">
<label for="BindAddress">BindAddress</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>BindAddress</b> is the local ip address that the listener will bind to. This can be helpful in cases where the Covenant host has multiple NICs. Usually, this value will be <b>0.0.0.0</b>.
</div>
</a>
<input id="BindAddress" name="BindAddress" @bind="@Listener.BindAddress" disabled="@Disabled" class="form-control">
<div class="text-danger"><ValidationMessage For="() => Listener.BindAddress" /></div>
</div>
<div class="form-group col-md-4">
<label for="BindPort">BindPort</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>BindPort</b> is the local port that the listener will bind to. This is the port that the C2Bridge will connect to.
</div>
</a>
<input id="BindPort" name="BindPort" @bind="@Listener.BindPort" disabled="@Disabled" class="form-control" type="number">
<div class="text-danger"><ValidationMessage For="() => Listener.BindPort" /></div>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-4">
<label for="ConnectPort">ConnectPort</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
<b>ConnectPort</b> is the <b>callback</b> port that Grunts will be directly connecting to. This is the port the C2Bridge should listen on.
</div>
</a>
<input id="ConnectPort" name="ConnectPort" @bind-value="Listener.ConnectPort" @bind-value:event="oninput" disabled="@Disabled" class="form-control" type="number">
<div class="text-danger"><ValidationMessage For="() => Listener.ConnectPort" /></div>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-4">
<label for="ConnectAddresses_0_">ConnectAddress</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>ConnectAddress</b> is the <b>callback</b> address that Grunts will be directly connecting to. This should be the external address of the C2Bridge, or if you are using redirectors this should be the address that points to the external redirector.
</div>
</a>
<input id="ConnectAddresses_0_" name="ConnectAddresses[0]" @bind="@Listener.ConnectAddresses[0]" disabled="@Disabled" class="form-control">
<div class="text-danger"><ValidationMessage For="() => Listener.ConnectAddresses" /></div>
</div>
</div>
<div class="form-group">
<label for="ProfileId">BridgeProfile</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>BridgeProfile</b> determines the behavior of Grunt and Listener communication.
</div>
</a>
<select id="ProfileId" name="ProfileId" @bind="Listener.ProfileId" class="form-control">
@foreach (var Profile in Profiles)
{
Expand Down
38 changes: 38 additions & 0 deletions Covenant/Components/Listeners/HttpListenerForm.razor
Original file line number Diff line number Diff line change
Expand Up @@ -12,34 +12,62 @@
</div>
<div class="form-group">
<label for="Name">Name</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext"> The <b>Name</b> of the listener that will be used throughout the interface. Pick something recognizable!</div>
</a>
<input id="Name" name="Name" @bind="@Listener.Name" disabled="@Disabled" class="form-control">
<div class="text-danger"><ValidationMessage For="() => Listener.Name" /></div>
</div>
<div class="form-row">
<div class="form-group col-md-4">
<label for="BindAddress">BindAddress</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>BindAddress</b> is the local ip address that the listener will bind to. This can be helpful in cases where the Covenant host has multiple nics. Usually, this value will be <b>0.0.0.0</b>.
</div>
</a>
<input id="BindAddress" name="BindAddress" @bind="@Listener.BindAddress" disabled="@Disabled" class="form-control">
<div class="text-danger"><ValidationMessage For="() => Listener.BindAddress" /></div>
</div>
<div class="form-group col-md-4">
<label for="BindPort">BindPort</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>BindPort</b> is the local port that the listener will bind to.
</div>
</a>
<input id="BindPort" name="BindPort" @bind="@Listener.BindPort" disabled="@Disabled" class="form-control" type="number">
<div class="text-danger"><ValidationMessage For="() => Listener.BindPort" /></div>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-4">
<label for="ConnectPort">ConnectPort</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>ConnectPort</b> is the *callback* port that Grunts will be directly connecting to. This also represents the port portion of the <b>Urls</b>.
</div>
</a>
<input id="ConnectPort" name="ConnectPort" @bind-value="Listener.ConnectPort" @bind-value:event="oninput" disabled="@Disabled" class="form-control" type="number">
<div class="text-danger"><ValidationMessage For="() => Listener.ConnectPort" /></div>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-4 mb-0">
<label for="ConnectAddresses_0_">ConnectAddresses</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>ConnectAddresses</b> are the <b>callback</b> addresses, and represents the hostname portion of the <b>Url</b>. You must specify at least one <b>ConnectAddress</b> and can specify as many as you would like. You can specify multiple <b>ConnectAddresses</b> for failure prevention. Grunts will attempt to connect to each of these <b>ConnectAddresses</b> and will use the first one that succeeds. If you are using redirectors, this should be the url that points to the external redirector.
</div>
</a>
</div>
<div class="form-group col-md-4 mb-0">
<label for="Urls_0_">Urls</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>Urls</b> are the <b>callback</b> URLs, and are the urls that Grunts will be directly connecting to. The URLs are calculated based on a combination of the <b>ConnectAddresses</b>, <b>BindPort</b>, and <b>UseSSL</b> values, and should be of the form: <b>http(s)://connectaddress:bindport</b>. The <b>Urls</b> are calculated for you, you should not need to manually edit these values.
</div>
</a>
</div>
</div>
@for (int i = 0; i < Listener.ConnectAddresses.Count; i++)
Expand Down Expand Up @@ -74,6 +102,11 @@
<div class="form-row">
<div class="form-group col-md-3">
<label for="UseSSL">UseSSL</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>UseSSL</b> value determines if the listener should use the HTTPS or HTTP protocol. If <b>UseSSL</b> value is true, an <b>SSLCertificate</b> needs to be provided.
</div>
</a>
<select id="UseSSL" name="UseSSL" @onchange="(e => UpdateUseSSL(e))" disabled="@Disabled" class="form-control form-control-sm">
@if (Listener.UseSSL)
{
Expand Down Expand Up @@ -115,6 +148,11 @@
</div>
<div class="form-group">
<label for="ProfileId">HttpProfile</label>
<a href="#" class="tooltips-info">
<div class="tooltiptext">
The <b>HttpProfile</b> determines the behavior of Grunt and Listener communication.
</div>
</a>
<select id="ProfileId" name="ProfileId" @bind="Listener.ProfileId" class="form-control">
@foreach (var Profile in Profiles)
{
Expand Down
78 changes: 77 additions & 1 deletion Covenant/wwwroot/css/covenant.css
Original file line number Diff line number Diff line change
Expand Up @@ -296,4 +296,80 @@ main {

.dropdown-menu > a:hover {
background-color: rgba(0,0,0,0.1);
}
}


a.tooltips-info {
position: relative;
display: inline;
}

a.tooltips-info:before
{
content: '?';
display: inline-block;
font-family: sans-serif;
font-weight: bold;
text-align: center;
width: 2.1ex;
height: 2.1ex;
font-size: 1.7ex;
line-height: 1.8ex;
border-radius: 1.2ex;
margin-right: 4px;
padding: 1px;
color: black;
background: white;
border: 1px solid black;
text-decoration: none;
}

a.tooltips-info:hover:before
{
color: white;
background: black;
border-color: white;
text-decoration: none;
}

a.tooltips-info .tooltiptext {
opacity: 0;
bottom: 30px;
left: 50%;
margin-left: -76px;
position: absolute;
color: #FFFFFF;
background: #000000;
line-height: 30px;
text-align: justify;
visibility: hidden;
border-radius: 6px;
box-shadow: 0px 0px 0px #800000;
max-height: 300px;
max-width: 1000px;
min-height: 50px;
min-width: 600px;
display: block;
padding: 6px;
}
a.tooltips-info .tooltiptext:after {
content: '';
position: absolute;
top: 100%;
left: 50%;
margin-left: -8px;
width: 0; height: 0;
/*
border-top: 8px solid #000000;
border-right: 8px solid transparent;
border-left: 8px solid transparent;
*/
}
a:hover.tooltips-info .tooltiptext {
visibility: visible;
opacity: 0.8;
bottom: 30px;
left: 50%;
margin-left: -76px;
z-index: 999;
}