Skip to content
This repository has been archived by the owner on Apr 7, 2024. It is now read-only.
/ kbdintrat Public archive

PoC rat which gets tasking using ssh keyboard-interactive authentication

License

Notifications You must be signed in to change notification settings

magisterquis/kbdintrat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KbdIntRat

Silly little RAT which makes regular SSH connections to a C2 server, gets a shell script as the question in keyboard-interactive authentication, and sends output as the answer.

The same binary works both as a implant and server (with the -server flag).

For legal use only.

Configuration

Most configuration is done via command-line options. Please run the program with -h to see a listing of all available options. Defaults can be changed near the top of main() in kbdintrat.go, though it is not expected that this will be necessary very often.

Implant ID

The ID the implant uses is set via the -id flag. This is, of course, a bad idea to do at runtime as it'll show up in a process listing. To avoid this, the main.ImplantID variable can be set at compile time to bake in a implant ID, like

go build -ldflags "-X main.ImplantID=kittens"

This can be used to build per-target implants. The following shell function can be used to make this a bit easier:

function build {
        if [ -z "$1" ]; then
                echo "Usage: build name" >&2
                return 1
        fi
        o=kbdintrat.$1
        go build -v -i -ldflags "-X main.ImplantID=$1" -o $o
        sha256 $o
}

Only characters in [A-Za-z_-] can be used in implant IDs. If no ID is specified either with -id at runtime or by setting main.ImplantID at compile time, a random 64-bit unsigned integer expressed in base36 will be used.

Tasking

Each time an implant checks in to the server, a file in the tasking directory which has same name as the implant ID will be checked for tasking. If one exists and isn't empty, its contents will be sent to the implant for execution. In other words, to task the implant named kittens to send back a a process listing, assuming the tasking directory is named tasking, the following command may be used:

echo 'ps auwwwfux' >> tasking/kittens

The tasking directory may be changed with the -tasking command-line option.

Output

Tasking output is put in files with the same name as the implants' IDs in the output directory, by default -output and changeable with the -output command-line option. To get the ouptut from the previous example (tasking kittens to list processes), the following command may be used:

cat output/kittens

Output is appended to the end of pre-existing output files.

Output files are created when implants first connect and have their timestamps updated upon each connection. This can be used to get a good idea of what's been calling back with just ls -lart.

Server Key

The implant will check the server's key fingerprint against the one specified on the command line. There is an example key, id_rsa included with the source. Its fingerprint is the default used by the implant to authenicate the server. Please use your own.

The fingerprint is checked by the client. It is the same as the fingerprint printed with OpenSSH's VisualHostKey option. Fingerprint checking can be skipped with -fingerprint ignore.

About

PoC rat which gets tasking using ssh keyboard-interactive authentication

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published