ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

26.09.2013, 19:19
|
|
Новичок
Регистрация: 21.06.2005
Сообщений: 1
Провел на форуме: 0
Репутация:
0
|
|
Сообщение от Always
http://np.com.ua/search.html?keywords=1'+order+by+2+--+
http://np.com.ua/search.html?keywords=1'+union+SELECT+1,2+--+
Как быть?
Используется несколько запросов с одним и тем же параметром
Код:
Input->get('keywords') ) {
/* Входные данные не фильтруются должным образом--->*/ $title = $this->Input->get('keywords');
} else if ( $this->Input->post('keywords') ) {
/* Въодные данные не фильтруются должным образом(пост)--->*/ $title = $this->Input->post('keywords');
}
$total = 0;
/* first inject ---->>*/ $db = $this->Database->execute(" SELECT id,pid,title,short_comment FROM tl_msm_catalog_item WHERE title LIKE '%". $title ."%' OR short_comment LIKE '%". $title ."%' ");
$total += $db->numRows;
$array = array();
while ( $db->next() ) {
$view = str_replace("", "", $db->short_comment);
$view = str_replace("", "", $view);
$array[] = array(
'title' => $db->title,
'href' => $this->generateFrontendUrl('','thermal-aid/ccategory/'.$db->pid.'/product/'.$db->id.'/'.$this->setTranslite($db->title)),
'short' => $view,
);
}
/* second inject ---->>*/ $db32 = $this->Database->execute(" SELECT id,pid,title FROM tl_msm_catalog WHERE title LIKE '%". $title ."%' ");
$total += $db32->numRows;
while ( $db32->next() ) {
$array[] = array(
'title' => $db32->title,
'href' => $this->generateFrontendUrl('','thermal-aid/category/'.$db32->pid.'/scategory/'.$db32->id)
);
}
/* another one ----->>*/ $db1 = $this->Database->execute(" SELECT id,pid,title,short_about FROM tl_msm_mclass_file WHERE title LIKE '%". $title ."%' OR short_about LIKE '%". $title ."%' ");
$total += $db1->numRows;
Код:
/* system/libraries/Input.php */
public function get($strKey, $blnDecodeEntities=false)
{
$strCacheKey = $blnDecodeEntities ? 'getDecoded' : 'getEncoded';
if (!isset($this->arrCache[$strCacheKey][$strKey]))
{
$varValue = $_GET[$strKey];
if (is_null($varValue))
{
return $varValue;
}
$varValue = $this->stripSlashes($varValue);
$varValue = $this->decodeEntities($varValue);
$varValue = $this->xssClean($varValue, true);
$varValue = $this->stripTags($varValue);
if (!$blnDecodeEntities)
{
$varValue = $this->encodeSpecialChars($varValue);
}
$this->arrCache[$strCacheKey][$strKey] = $varValue;
}
return $this->arrCache[$strCacheKey][$strKey];
}
/**
* Return a $_POST parameter
* @param string
* @param boolean
* @return mixed
*/
public function post($strKey, $blnDecodeEntities=false)
{
$strCacheKey = $blnDecodeEntities ? 'postDecoded' : 'postEncoded';
if (!isset($this->arrCache[$strCacheKey][$strKey]))
{
$varValue = $this->findPost($strKey);
if (is_null($varValue))
{
return $varValue;
}
$varValue = $this->stripSlashes($varValue);
$varValue = $this->decodeEntities($varValue);
$varValue = $this->xssClean($varValue, true);
$varValue = $this->stripTags($varValue);
if (!$blnDecodeEntities)
{
$varValue = $this->encodeSpecialChars($varValue);
}
$this->arrCache[$strCacheKey][$strKey] = $varValue;
}
return $this->arrCache[$strCacheKey][$strKey];
}
protected function stripSlashes($varValue)
{
if (is_null($varValue) || $varValue == '')
{
return $varValue;
}
// Recursively clean arrays
if (is_array($varValue))
{
foreach ($varValue as $k=>$v)
{
$varValue[$k] = $this->stripSlashes($v);
}
return $varValue;
}
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
{
$varValue = stripslashes($varValue);
}
return $varValue;
}
protected function decodeEntities($varValue)
{
if (is_null($varValue) || $varValue == '')
{
return $varValue;
}
// Recursively clean arrays
if (is_array($varValue))
{
foreach ($varValue as $k=>$v)
{
$varValue[$k] = $this->decodeEntities($v);
}
return $varValue;
}
// Preserve basic entities
$varValue = $this->preserveBasicEntities($varValue);
$varValue = html_entity_decode($varValue, ENT_COMPAT, $GLOBALS['TL_CONFIG']['characterSet']);
return $varValue;
}
protected function stripTags($varValue, $strAllowedTags='')
{
if (is_null($varValue) || $varValue == '')
{
return $varValue;
}
// Recursively clean arrays
if (is_array($varValue))
{
foreach ($varValue as $k=>$v)
{
$varValue[$k] = $this->stripTags($v, $strAllowedTags);
}
return $varValue;
}
$varValue = str_replace(array(''), array('<!--', '<![', '-->'), $varValue);
$varValue = strip_tags($varValue, $strAllowedTags);
$varValue = str_replace(array('<!--', '<![', '-->'), array(''), $varValue);
return $varValue;
}
protected function xssClean($varValue, $blnStrictMode=false)
{
if (is_null($varValue) || $varValue == '')
{
return $varValue;
}
// Recursively clean arrays
if (is_array($varValue))
{
foreach ($varValue as $k=>$v)
{
$varValue[$k] = $this->xssClean($v);
}
return $varValue;
}
// Return if var is not a string
if (is_bool($varValue) || is_null($varValue) || is_numeric($varValue))
{
return $varValue;
}
// Validate standard character entites and UTF16 two byte encoding
$varValue = preg_replace('/(&#*\w+)[\x00-\x20]+;/i', '$1;', $varValue);
$varValue = preg_replace('/(&#x*)([0-9a-f]+);/i', '$1$2;', $varValue);
// Remove carriage returns
$varValue = preg_replace('/\r+/', '', $varValue);
// Replace unicode entities
$varValue = utf8_decode_entities($varValue);
// Remove NULL characters
$varValue = preg_replace('/\0+/', '', $varValue);
$varValue = preg_replace('/(\\\\0)+/', '', $varValue);
$arrKeywords = array
(
'/\bj\s*a\s*v\s*a\s*s\s*c\s*r\s*i\s*p\s*t\b/is', // javascript
'/\bv\s*b\s*s\s*c\s*r\s*i\s*p\s*t\b/is', // vbscript
'/\bv\s*b\s*s\s*c\s*r\s*p\s*t\b/is', // vbscrpt
'/\bs\s*c\s*r\s*i\s*p\s*t\b/is', //script
'/\ba\s*p\s*p\s*l\s*e\s*t\b/is', // applet
'/\ba\s*l\s*e\s*r\s*t\b/is', // alert
'/\bd\s*o\s*c\s*u\s*m\s*e\s*n\s*t\b/is', // document
'/\bw\s*r\s*i\s*t\s*e\b/is', // write
'/\bc\s*o\s*o\s*k\s*i\s*e\b/is', // cookie
'/\bw\s*i\s*n\s*d\s*o\s*w\b/is' // window
);
// Compact exploded keywords like "j a v a s c r i p t"
foreach ($arrKeywords as $strKeyword)
{
$arrMatches = array();
preg_match_all($strKeyword, $varValue, $arrMatches);
foreach ($arrMatches[0] as $strMatch)
{
$varValue = str_replace($strMatch, preg_replace('/\s*/', '', $strMatch), $varValue);
}
}
$arrRegexp[] = '/]*[^a-z](]*>/is';
$arrRegexp[] = '/]*[^a-z]document\.cookie[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]vbscri?pt\s*:[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]expression\s*\([^>]*>/is';
// Also remove event handlers and JavaScript in strict mode
if ($blnStrictMode)
{
$arrRegexp[] = '/vbscri?pt\s*:/is';
$arrRegexp[] = '/javascript\s*:/is';
$arrRegexp[] = '/]*[^a-z]alert\s*\([^>]*>/is';
$arrRegexp[] = '/]*[^a-z]javascript\s*:[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]window\.[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]document\.[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onabort\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onblur\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onchange\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onclick\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onerror\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onfocus\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onkeypress\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onkeydown\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onkeyup\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onload\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onmouseover\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onmouseup\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onmousedown\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onmouseout\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onreset\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onselect\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onsubmit\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onunload\s*=[^>]*>/is';
$arrRegexp[] = '/]*[^a-z]onresize\s*=[^>]*>/is';
}
return preg_replace($arrRegexp, '', $varValue);
}
protected function encodeSpecialChars($varValue)
{
if (is_null($varValue) || $varValue == '')
{
return $varValue;
}
// Recursively clean arrays
if (is_array($varValue))
{
foreach ($varValue as $k=>$v)
{
$varValue[$k] = $this->encodeSpecialChars($v);
}
return $varValue;
}
$arrSearch = array('#', '', '(', ')', '\\', '=');
/* replacing (, ), backslash, etc ------>> */ $arrReplace = array('#', '', '(', ')', '\', '=');
return str_replace($arrSearch, $arrReplace, $varValue);
}
Как наглядно показано, функция stripslashes используется весьма своевременно, что позволяет игнорировать включенный magic_quotes http://np.com.ua/phpinfo.php
Но, в свою очередь, происходит реплейс скобок, что не позволяет нам должным образом конструировать запрос
Код:
public function execute()
{
$arrParams = func_get_args();
if (is_array($arrParams[0]))
{
$arrParams = array_values($arrParams[0]);
}
$this->replaceWildcards($arrParams);
$strKey = md5($this->strQuery);
// Try to load the result from cache
if (isset(self::$arrCache[$strKey]) && !self::$arrCache[$strKey]->isModified)
{
return self::$arrCache[$strKey]->reset();
}
$objResult = $this->query();
// Cache the result objects
if ($objResult instanceof Database_Result)
{
self::$arrCache[$strKey] = $objResult;
}
return $objResult;
}
public function query($strQuery='')
{
if (!empty($strQuery))
{
$this->strQuery = $strQuery;
}
// Make sure there is a query string
if ($this->strQuery == '')
{
throw new Exception('Empty query string');
}
// Execute the query
/* Наш эксепшн ----->> */ if (($this->resResult = $this->execute_query()) == false)
{
throw new Exception(sprintf('Query error: %s (%s)', $this->error, $this->strQuery));
}
// No result set available
if (!is_resource($this->resResult) && !is_object($this->resResult))
{
$this->debugQuery();
return $this;
}
// Instantiate a result object
$strClass = DB_DRIVER . '_Result';
$objResult = new $strClass($this->resResult, $this->strQuery);
$this->debugQuery($objResult);
return $objResult;
}
Раскручивание еррор/блайнд/тайм байсед весьма огранничеено, учитывая что скобкам наступает фаталити. А классика обрывается из-за нескольких запросов. Чтобы найти выход из этой ситуации, придется подумать, либо написать мне в пм
Сообщение от infoseller
Инъекция в MSSQL, фильтрация всех спецсимволов - (),;`"':[]@ hex не помогает, подсказки есть?
На каком уровне идет фильтрация?
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|