Friday, March 30, 2007

(Non-Persistent) Untraceable XSS Attacks (IE & Opera version)

[EDIT]: Due to something I misunderstood ages ago this post is completely useless, so please see: http://kuza55.blogspot.com/2007/03/non-persistent-untraceable-xss-attacks.html Which has been re-written.

Sadly I have an appalling habit of assuming that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way Firefox does things is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r browsers do things when it comes to Javascript, and I am constantly missing things because of it.

Anyway; what I only just remembered is that IE and opera treat target.com and target.com. as separate domains, and even if we can interact with target.com. this is almost completely useless to us.

But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 goal here is not to allow our domain to talk to anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r domain. Our goal here is to not have to send our attack logic to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vulnerable web app, where it will be logged by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server.

We can use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same basic concept as in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last post, but instead of having go.php redirect to something which calls our logic from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 parent, we will need it to look more like this: (Copy and paste it into notepad because it goes off cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 side of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page)







And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n our attack page would have to look something more like this:







I have not tested this, but it should be possible to simply extract cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookie from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domain as demonstrated above, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n set cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same cookie for target.com. but you will run into issues if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication cookies for a subdomain, which you cannot extract, but for most scenarios this should still be workable.

(Non-Persistent) Untraceable XSS Attacks

[EDIT]: Sorry for taking so long to do this, but I've been really busy lately. Anyway, when doing my initial testing with document.domain stuff Firefox threw some errors when I tried to set cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domain to just 'com' - I'm not sure why since this is allowed, and as such this post was needlessly confusing (since I thought you could only set it to 'com.'), and so I've rewritten it (keeping most of it intact), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 old copy is still at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end, but its not really worth reading since its pretty much cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same thing.

When most XSS attacks are conducted cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y simply inject all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack logic right into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domain cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are attacking, this of course gives out information such as servers where cookies are getting logged, or any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r attack logic, because it has been sent to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server, and since it is generally sent via GET, which is see in all server logs. The only exception to this is when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack logic is hosted on anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r site, and a script tag is injected. The problem with this is that it still reveals where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack logic was located, and if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 admin reacts relatively quickly, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack logic can be captured from that server.

Sometimes this is unavoidable, as in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 case of persistent XSS attacks, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y rely on having cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack logic located on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site so that users will be attacked with it, without having to go to anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r site.

But persistent XSS attacks are not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only ones we see, and as such I would like to propose a method that has been used for conducting attacks before, but hasn't (to my knowledge) been used to mask a trail.

It turns out you can set cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 document.domain property to just 'com' if you have a .com domain.

Now, we can use this idea to remove all our attack logic from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site we are attacking with our reflected XSS attacks, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n extract data at will.

The easiest way to implement something like this would be to have two pages on your own .com domain. One to actually interface with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site, and one to use a meta redirect to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reflected XSS hole, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore strip cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 referer header.

And so, by doing this cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site which you are abusing should have no clue as to where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack originated from, except that it came from a .com domain.

The actual html/javascript implementation can be done in several ways, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 easiest is something similar to this:

attack.php :







go.php :






In this we have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack page with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 logic on it, which sets cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 document.domain property when it is loaded, when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iframe gets redirected to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vulnerable page on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target receives no idea what server redirected it cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, it cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n sets cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domain to .com and calls cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 logic() function from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 parent window, which can cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n extract cookie data from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacked domain.

Of course, if you run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same attack for long enough, or have a worm, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n a client-side tracker could be implemented because, just as you can extract data from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target domain, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y can extract data from your domain. Even given this limitations though it is a step that is unlikely to be taken by any admin, but should still be considered.

Furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rmore this should not be put on any site which hosts an actual site because if anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r attacker found such an attack page on a live server since you have set up a system where any .com domain can break cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cross domain boundary.

Old Post:



When most XSS attacks are conducted cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y simply inject all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack logic right into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domain cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are attacking, this of course gives out information such as servers where cookies are getting logged, or any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r attack logic, because it has been sent to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server, and since it is generally sent via GET, which is see in all server logs. The only exception to this is when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack logic is hosted on anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r site, and a script tag is injected. The problem with this is that it still reveals where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack logic was located, and if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 admin reacts relatively quickly, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack logic can be captured from that server.

Sometimes this is unavoidable, as in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 case of persistent XSS attacks, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y rely on having cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack logic located on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site so that users will be attacked with it, without having to go to anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r site.

But persistent XSS attacks are not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only ones we see, and as such I would like to propose a method that has been used for conducting attacks before, but hasn't (to my knowledge) been used to mask a trail.

As trev found out, it is possible for a site in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 .com TLD to set cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir document.domain value to '.com.', and this allows it to share details with any site which also sets its document.domain value to '.com.'.

Now, we can use this idea to remove all our attack logic from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site we are attacking with our reflected XSS attacks, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n extract data at will.

The easiest way to implement something like this would be to have two pages on your own .com domain. One to actually interface with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site, and one to use a meta redirect to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reflected XSS hole, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore strip cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 referer header.

And so, by doing this cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site which you are abusing should have no clue as to where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack originated from, except that it came from a .com domain.

The actual html/javascript implementation can be done in several ways, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 easiest is something similar to this:

attack.php :







go.php :






In this we have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack page with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 logic on it, which sets cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 document.domain property when it is loaded, when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iframe gets redirected to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vulnerable page on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target receives no idea what server redirected it cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, it cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n sets cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domain to .com. and calls cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 logic() function from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 parent window, which can cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n extract cookie data from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacked domain.

Of course, if you run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same attack for long enough, or have a worm, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n a client-side tracker could be implemented because, just as you can extract data from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target domain, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y can extract data from your domain. Even given this limitations though it is a step that is unlikely to be taken by any admin, but should still be considered.

Furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rmore this should not be put on any site which hosts an actual site because if anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r attacker found such an attack page on a live server, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y could easily conduct attacks similar to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one against MySpace described in trev's post.

[EDIT]: Sorry guys; false alarm. This doesn't fully work against IE and Opera because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y treat target.com and target.com. as separate domains,and so store cookies separately. I have figured out a way to overcome this, which I've posted here: http://kuza55.blogspot.com/2007/03/non-persistent-untraceable-xss-attacks_30.html so that anyone who has already seen this post will hopefully notice cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second one.

Monday, March 26, 2007

Partially stopping sites breaking out of frames in Mozilla

I've been looking for ways to stop sites breaking out of frames for a long time now, and haven't been able to find anything.

And I still haven't been able to get anything working cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way I'd like it to, but since I don't have much time cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se days I thought I'd throw this out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re to see if anyone could figure something out. What I'm trying here is to be able to execute XSS attacks within iframes against sites which break out of iframes at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 top of each page, but sadly I'm having almost no real success.

Using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 idea that I used to implement this; http://kuza55.blogspot.com/2007/03/trapping-mozilla-for-phishing.html, it is possible to stop site breaking out of frames.

Using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following code:







But while it is possible to stop http://hackthissite.org from breaking out of an iframe, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 moment we call cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 stop(); function, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iframe also stops loading. So any XSS attacks after cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 frame breaking code will not be executed.

So as you can see I haven't been able to figure anything out which will stop cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 top window being changed, but not stop cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iframe being loaded. Hopefully someone else will have more luck.

Tuesday, March 20, 2007

Trapping Mozilla For Phishing

I was looking at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 onbeforeunload event handler today in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hopes of finding a way to attack/implement Martin Johns' paper SessionSafe: Implementing XSS Immune Session Handling (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's also some discussion about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 paper here: http://sla.ckers.org/forum/read.php?13,7607), and while I didn't find anything useful cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, I did find a way to entrap, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore conduct phishing attacks against more aware Mozilla users.

Before delving into an explanation, here's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code which I'll explain:




Please go to bankofamerica.com





Anyway; when using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 onbeforeunload event handler it is still possible to access cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 window object, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore still possible to set time-outs.

In our time-outs, we can call cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 stop() function. When cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 stop(); function is called cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 location bar is not reset, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore will display cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 URL cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user entered.

The next thing we would like to do would be to add some data to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page which makes it look like a phishing site. Sadly (or Luckily depending on your view point), when you call cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 document.write() function, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 location bar is reset, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore we must use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DOM to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing page disappear, and add our new page.

Simple Enough.

One thing you should note though, is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a bug in Firefox where, if you enter, say, google, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n press Ctrl+Enter, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n go to anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r tab, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n return, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 address bar will read "google" racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than "http://www.google.com/", but its not a very likely scenario, so should not be much cause for concern. And furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rmore it is (to my knowledge) impossible to find out where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user is going, so I do not think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are many uses ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than a phishing page like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 example provided.

You also cannot force cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to programmatically go to a page, and stop that and have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 URL changed. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 URL is changed programmatically only when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser successfully loads cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page.

Oh, and AFAIK a slightly similar (in terms of effect, not implementation) vuln in IE is still unpatched: http://lcamtuf.coredump.cx/ietrap/

P.S. This was tested on Firefox 2.0.0.2