                                              _     _ 
                                             (_)   | |
  ___  _ __ ___   ___  __ _  __ _   ___  _ __ _  __| |
 / _ \| '_ ` _ \ / _ \/ _` |/ _` | / _ \| '__| |/ _` |
| (_) | | | | | |  __/ (_| | (_| || (_) | | _| | (_| |
 \___/|_| |_| |_|\___|\__, |\__,_(_)___/|_|(_)_|\__,_|
                       __/ |                          
                      |___/                           

OMEGA|ZINE RELEASE
       04

Author: d4y4x || d4y4x74@gmail.com
Online @ www.omega.or.id :: http://ezine.omega.or.id

== [Proof Of Concept] How to ByPass Session With Jsoup ==


Kata Pengantar
--------------
	Alhamdulillah, Puji serta syukur kehadirat Allah SWT yang telah melimpahkan segala
	karunia & hidayahNya,sehingga penulis masih diberikan kesempatan untuk melakukan aktifitas.
	Shalawat serta salam untuk junjungan Nabi Besar Muhammad SAW, yang telah membawa kita 
	dari zaman kegelapan menuju zaman kemenangan. 
		
Tujuan
------
	Grabbing HTML / Ajax Page 

Masalah
-------
	Session Protection

Tools
-----
	JDK 1.5 higher -> http://www.oracle.com
	IDE Java (Netbeans / Eclipse) -> optional
	JSoup -> http://www.jsoup.org
	Firefox Browser -> http://www.firefox.org
	Addons Firebug -> http://www.getfirebug.com

	
Pembahasan
----------
	Kita menggunakan aplikasi web menggunakan PHP sebagai simulasi. Berikut ini kode programnya,
	yang saya ambil dari sebuah sumber(phpmysimplelogin-0.3-frozenade.co.nr).
	
	+------------+
	|database.sql|
	+------------+
	--
	-- Database: `phpmysimplelogin`
	--
	-- --------------------------------------------------------

	--
	-- Table structure for table `user`
	--

		CREATE TABLE IF NOT EXISTS `user` (
		`username` varchar(25) NOT NULL,
		`password` varchar(255) NOT NULL
		) ENGINE=MyISAM DEFAULT CHARSET=latin1;

	--
	-- Dumping data for table `user`
	--

		INSERT INTO `user` (`username`, `password`) VALUES
		('admin', '21232f297a57a5a743894a0e4a801fc3');
	
	
	+----------+
	|config.inc|
	+----------+
	<?php
	$hostname = 'localhost';        // Your MySQL hostname.
	$dbname   = 'phpmysimplelogin'; // Your database name.
	$username = 'root';             // Your database username.
	$password = '';                 // Your database password. If your database has no password, leave it empty.

		// Let's connect to host
		mysql_connect($hostname, $username, $password) or DIE('Connection to host is failed, perhaps the service is down!');
		// Select the database
		mysql_select_db($dbname) or DIE('Database name is not available!');

	?>
	
	
	+---------+
	|index.php|
	+---------+
	<?php session_start(); // Inialize session

		// Check, if user is already login, then jump to secured page
		if (isset($_SESSION['username'])) {
        header('Location: securedpage.php');
			}

	?>
	<html>
	<head>
	<title>PHPMySimpleLogin 0.3</title>
	</head>
	<body>

	<h3>User Login</h3>

	<table border="0">
	<form method="POST" action="loginproc.php">
	<tr><td>Username</td><td>:</td><td><input type="text" name="username" size="20"></td></tr>
	<tr><td>Password</td><td>:</td><td><input type="password" name="password" size="20"></td></tr>
	<tr><td>&nbsp;</td><td>&nbsp;</td><td><input type="submit" value="Login"></td></tr>
	</form>
	</table>
	</body>
	</html>
	
	
	+-------------+
	|loginproc.php|
	+-------------+
	<?php session_start(); // Inialize session

		// Include database connection settings
		include('config.inc');

		// Retrieve username and password from database according to user's input
		$login = mysql_query("SELECT * FROM user WHERE (username = '" . mysql_real_escape_string($_POST['username']) . "') and (password = '" . mysql_real_escape_string(md5($_POST['password'])) . "')");

		// Check username and password match
		if (mysql_num_rows($login) == 1) {
      
		// Set username session variable
        $_SESSION['username'] = $_POST['username'];
     
		// Jump to secured page
        header('Location: securedpage.php');
			}
	else {
			// Jump to login page
			header('Location: index.php');
		}
	?>
	
	
	+---------------+
	|securedpage.php|
	+---------------+
	<?php session_start(); // Inialize session

		// Check, if username session is NOT set then this page will jump to login page
		if (!isset($_SESSION['username'])) {
        header('Location: index.php');
		}
	?>
	<html>
	<head>
	<title>Secured Page</title>
	</head>
	<body>

	<p>This is secured page with session: <b><?php echo $_SESSION['username']; ?></b>
	<br>You can put your restricted information here.</p>
	<p><a href="logout.php">Logout</a></p>

	</body>
	</html>
	
	
	+----------+
	|logout.php|
	+----------+
	<?php session_start(); // Inialize session

		// Delete certain session
		unset($_SESSION['username']);
		
		// Delete all session variables
		session_destroy();

		// Jump to login page
		header('Location: index.php');
	?>


	Setelah tools dan medianya sudah siap, saatnya kita eksekusi. Semisal, aplikasi web yang sudah kita buat berada
	di halaman -> http://localhost/phpmysimplelogin
	
	Di POC kali ini kita ingin membaca halaman securedpage.php yang berada di alamat ->
	http://localhost/phpmysimplelogin/securedpage.php tapi ternyata selalu ada pengecekan session, sehingga kita otomatis 
	langsung di alihkan ke alamat -> http://localhost/phpmysimplelogin/index.php

	
Solusi
------
	Buka halaman http://localhost/phpmysimplelogin/index.php kemudian masukan username: admin dan passwod: admin.
	Setelah masuk ke halaman http://localhost/phpmysimplelogin/securedpage.php buka firebug kemudian lihat di 
	securedpage.php maka akan terdapat ini

		Cookie:PHPSESSID=ib2d12ok8o7hc24inhvhdr1830

	kemudian kita lihat di loginproc.php maka akan terlihat parameter apa saja yg dikirim, dan untuk kasus ini
	hanya username dan password.
	
	
Kesimpulan
----------
	1.loginproc.php digunakan untuk melakukan validasi
	2.kita butuh Session ID agar bisa membaca halaman securedpage.php

	Setelah melewati serangkaian penelitian dan ujicoba, sekarang saatnya kita ke tahap finishing

	+---------------+
	|JSoup in action|
	+---------------+
	import java.io.File;
	import org.jsoup.Connection;
	import org.jsoup.Connection.Method;
	import org.jsoup.Jsoup;
	import org.jsoup.nodes.Document;
	import org.jsoup.nodes.Element;


	public class LoginByPass {

    public static void main(String[] args) {

        try {

    Connection.Response res = Jsoup.connect("http://localhost/phpmysimplelogin/loginproc.php").data("username", "admin", "password", "admin").method(Method.POST).execute();



            Document doc = res.parse();
            String sessionId = res.cookie("PHPSESSID"); // you will need to check what the right cookie name is

            System.out.println("Cookie : " + sessionId);
            Document doc2 = Jsoup.connect("http://localhost/phpmysimplelogin/securedpage.php").cookie("PHPSESSID", sessionId).get();
            System.out.println(doc2.html());
	} catch (Exception e) {
            e.printStackTrace();
            System.err.println(e.toString());
        }
	 }
	}

DONE!
	
	
Penulis ingin mengucapkan terima kasih kepada 
	- Khairunnisa Amalia, yang Insya Allah sebentar lagi kita akan hidup bersama dalam ikatan
	  cinta yang suci dan halal,amin.
	- Omicron yang bersedia memuat artikel ini di ezine omega
	- Xdhix, Phebe, 54v0y yang masih tetap militan membesarkan komunitas CP 27 dari awal berdiri
	  hingga menjelang 3 tahun.
	- http://cp27.web.id, http://omega.or.id, http://devilzc0de.org/, dan semua komunitas yang 
	  pernah kusinggahi. I miss U all..

	"Tujuan Kami Hanyalah Pengetahuan, Karena Pengetahuan Adalah Kekuatan"
	CP 27 Manifesto
	
	
	kritik & saran kirimkan ke d4y4x74@gmail.com
	