Saturday, December 30, 2006

Detecting Logged In Users

I just wanted to comment on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 various ways of checking if people are logged in that I've seen, and propose a (racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r unlikely) method of my own.

Uses for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 knowledge


Personally I'm racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r sceptical about profiling users and don't really see a point to it. The most dangerous application of this that I could come up with is if you check if a person is logged into a bunch of banks, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m off to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate phishing page for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir bank. And phishing is generally only reliable when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user clicks on a valid looking link in a valid looking email - or so we'd hope. So even cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 danger cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re seems limited. Sure, maybe you could provide ads to competing services or something, but unless you've got some great deal or something, you're probably not going to have any luck converting people.

Now sure we could use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se methods to detect whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r a user is logged in before running an XSS/CSRF attack, but unless cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack requires some level of user interaction (like having cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m move cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir mouse over something, even if you make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 element take up cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole screen for a second), you have no need for it. Sure if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack requires user interaction, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n you need to be sure that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user is logged in because 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ý bet365re is a chance that you may raise suspicion, and if you've got more than one XSS/CSRF attack to conduct you can't have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user get suspicious, ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise you might not finish running cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m all.

But I can't think of any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r applications, and those two don't exactly seem like

Jeremiah's Firefox Javascript Error Hack


Jeremiah's idea is great, but like almost everything else, sadly not infallible. I was talking to birdie from sla.ckers.org today and he mentioned to me that he was having no luck getting Jeremiah's Firefox Javascript Error hack to work because all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pages had an identical doctype at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 top of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page, on which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Javascript engine always errored out on and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re were no pdfs or images or ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r resources which were only available to users. So it seems that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is really no need for some elaborate defence where you specify an error handler on your page to override our error handler, or anything similar - you just need to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first couple of lines of each page identical, and what better thing to put cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re than a doctype tag so that you're actually conforming to some standards at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same time.

Timing Attacks


But it didn't stop cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, he also sent me cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following link on using timing attacks to detect whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r users are logged in: http://wasjournal.blogspot.com/2006/12/use-of-time-delay-technique-for.html because he thought it was a better way.

Now while I'd seen it before, I hadn't really thought about it before, and just discounted it as something that might be used, but probably racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r unreliable, so I went and did some test and here are my results when I ran his code:

Time when logged out:
5469, 2781, 2859, 1234, 2906, 1125, 1047, 2734, 5032, 2704

Time when logged in:
672, 2688, 6469, 719, 703, 1859, 688, 1718, 750, 1782

So while cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 average time when logged out is definitely higher, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a great amount of overlap, and chance for error, and this is only on one network connection.

But It got me thinking, how else would I be able to tell that a user is logged in, and i came up with:

Semi-Open Redirects


I was thinking, in what cases can you find anything about what's in an iframe? Well, when its on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same domain as your script is, and what better way to get users onto your domain than to be redirected cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site you are 'attacking'.

Now, just to explain what I mean by Semi-Open. Firstly what is an Open Redirect? An open redirect is one where you can send anyone anywhere, essentially one where you do no validation on who you send where. Now my definition of a Semi-Open redirect is one who will send certain people anywhere, more specifically logged in users anywhere. You can probably see where I'm going with this. The only ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r possible definition is sending everyone to only certain places, but thats completely useless to an attacker.

So if we find a Semi-Open redirect we can place it in an iframe, and if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user is logged in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y will be redirected to our domain, and we will be able to get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iframe's location, ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise we'll just error out.

Now, while I would have loved to have a example of an Semi-Open Redirect for everyone (I don't like posts without examples or PoC's), but I don't know where ro when I will actually find one, so I'll do cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next best thing, I'll post a link to someone else's PoC, which has already been patched....Ok, so its not second best, or anywhere near second best, but its close enough for this article: http://lists.grok.org.uk/pipermail/full-disclosure/2006-September/049285.html



So in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end, while most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se ideas are racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cool (especially Jeremiah's), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y don't seem to be always reliable or even useful to me.

Anyway, I hope everyone found this little burst of two posts interesting, because I'm awful at coming up with new ideas worth posting about regularly, but keep your eye peeled, I'm working on some interesting HTTP Response Splitting Payloads which I'll be posting once I get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m working on Firefox and Opera 9 (something changed between Opera 8 and 9). If anyone who reads this is familiar with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Firefox source and would be willing to help me work out why things aren't working, please shoot me an email, I've been sitting on this idea for more than a month, and working PoCs for IE and opera 8 for at least 3 weeks....

Using TinyURL For Storage (includes PoC)

Note: To skip to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PoC click here.

I recently read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following post about trying to write something that took advantage of pdp's article of using tinyURL for storage: http://michaeldaw.org/news/news-221206/

Sadly at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time I hadn't actually read pdp's article (http://www.gnucitizen.org/blog/cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365-attack-of-cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365-tiny-urls/) furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first couple of lines, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 title seemed racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r self explanatory. Anyway, I wanted to write a comment to that post, but it didn't want to let me, maybe that's because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 comments are moderated or something, so here's what I wanted to write:

Sure, you can't directly link to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m and have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to redirect to data URLS, you need a different type of redirect (http://kuza55.blogspot.com/2006/11/not-all-redirection-scripts-are-created.html) for that to work. And anyway, if Location headers could redirect users to data URLs cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we'd have yet anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r XSS vector to deal with.

What you can do though is create URLs with your data in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m like this one: http://tinyurl.com/ye9kbd which redirects to http://www.google.com/search?q=data:text/html;base64,PHNjcmlwdD4NCmFsZXJ0KCd0ZXN0Jyk7DQo8L3NjcmlwdD4=

But that still leaves us with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem of having a cross-domain browser security policy, whereby we can't even find out where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 URL redirected to, unless its on our site. But since we're already attacking a site, we can easily just create a tinyURL with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 query string.

So lets say you were conducting an XSS attack against www.example.com you could submit http://www.example.com/#data:text/html;base64,PHNjcmlwdD4NCmFsZXJ0KCd0ZXN0Jyk7DQo8L3NjcmlwdD4= to tinyURL, get a URL back, put cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tinyURL in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 src attribute of an invisible iframe, 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 onLoad event (or something else, onLoad is just easy to work with) to parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 location, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n simply use that data as you need to.

And since we're using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 # symbol to separate our data, it won't show up in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site's logs, since everything after it shouldn't sent by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser.

But a more profitable method would probably be to simply post your data on a site with an insecure crossdomain.xml file, and use flash to make arbitrary requests to read that data.


Anyway, even though its taking up most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post, its not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 important part, I also got bored and wrote a PoC for pdp's idea (which is exactly cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same as mine actually, but I should have read his article, :S). It needs to be run on localhost for it to work, well, eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r that or you need to change cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tinyurls to reflect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site you're hosting it on, and you need to make sure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 len argument is correct, I'm using 18 because http://localhost/# is 18 characters in length. Anyway, here's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual code:







Note: The code WILL break if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first request to TinyURL (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 URL Encoded script) takes too long and finishes after cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual content has been loaded, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CheckContentLoaded function uses cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 function stored on TinyURL.

Also, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code could probably be made half its size by removing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 functions to get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script, and making cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remaining two functions which get data from Tinyurl a little bit more agile, but its a PoC, making it work efficiently is a task left to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reader, :p

Sunday, December 24, 2006

MySpace Non-Alpha-Non-Digit XSS 0day

It seems that MySpace has finally understood cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 issue here, which is good news, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir filter is written is working against cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, or at least thats what I'm guessing from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 results I'm getting.

Anyway, here's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exploit:



As you can see if you run that moz-binding is changed to .., and we are left with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following:



So from this I think we can quite safely assume that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y have a few separate modules which have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir go at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code in order, and if something gets changed to something dangerous, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 module that would filter that particular dangerous code out has already run (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 non-alpha-non-digit filtering module), 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 code is allowed through.

Isn't black box auditing fun? You end up making guesses that are quite often so very wrong but fit your results, :p.