crlf
13.12.2017, 17:35
В процессе поиска на bugs.php.net (https://bugs.php.net/) краша под свой случай, накопилось много различных реализаций. К сожаленю, я всё ещё в поисках, поэтому предлагаю постить здесь различные примеры и, по возможности, обсуждать их.
Различные кейсы могут быть полезны для возможности оставления временных файлов, развития дальнейшей атаки на интерпретатор и других хитрых штук
Потестить на различных версиях пыха можно здесь (https://3v4l.org/).
Следующие примеры тестились на LinuxсPHP 5.6.32.
PHP:
PHP:
PHP:
PHP:
PHP:
f=$foo=$d=newbad;unserialize(serialize($foo));gc_c ollect_cycles();
?>
PHP:
e=$this;$this->ob0ect=new\stdClass;}public function__destruct(){//
if(!$this->ob0ect)(0);var_dump($this);}}classSomeContainer{pu blic functionrun(){newSegfaultScenario;}}$contain er=newSomeContainer();$container->run();gc_collect_cycles();
?>
PHP:
newImage(1,1,'black');
// This works fine
$it=$im->getPixelIterator();
$row=$it->getCurrentIteratorRow();
$rgb=$row[0]->getColor();
var_dump($rgb);
// This crashes with SIGABRT
$row=$im->getPixelIterator()->getCurrentIteratorRow();
$rgb=$row[0]->getColor();
var_dump($rgb);
?>
PHP:
PHP:
PHP:
PHP:
PHP:
PHP:
0; --$len) {
$className.=$symbols[rand(0,count($symbols) -1)];
}
} while (class_exists($className,false));
$className=trim($className,'_ ');
$code='[PHP]
PHP:
data=$data;
}
public function__toString() {
openssl_pkey_export($this->data,$output);
return$output;
}
}
$csr=openssl_csr_new([],$privateKey);
$certificate=openssl_csr_sign($csr,NULL,$privateKe y,1);
$privateKey= newPrivateKey($privateKey);
openssl_pkcs12_export_to_file($certificate,'/tmp/test.p12',$privateKey,'');
?>
PHP:
PHP:
createElement('el_a');
$a->appendChild($doc1);
?>
PHP:
PHP:
PHP:
append($x);
?>
PHP:
stream);
}
}
stream_filter_register('user_filter','user_filter' );
$fd=fopen('php://memory','w');
$filter=stream_filter_append($fd,'user_filter');
fwrite($fd,"foo");
?>
PHP:
Различные кейсы могут быть полезны для возможности оставления временных файлов, развития дальнейшей атаки на интерпретатор и других хитрых штук
Потестить на различных версиях пыха можно здесь (https://3v4l.org/).
Следующие примеры тестились на LinuxсPHP 5.6.32.
PHP:
PHP:
PHP:
PHP:
PHP:
f=$foo=$d=newbad;unserialize(serialize($foo));gc_c ollect_cycles();
?>
PHP:
e=$this;$this->ob0ect=new\stdClass;}public function__destruct(){//
if(!$this->ob0ect)(0);var_dump($this);}}classSomeContainer{pu blic functionrun(){newSegfaultScenario;}}$contain er=newSomeContainer();$container->run();gc_collect_cycles();
?>
PHP:
newImage(1,1,'black');
// This works fine
$it=$im->getPixelIterator();
$row=$it->getCurrentIteratorRow();
$rgb=$row[0]->getColor();
var_dump($rgb);
// This crashes with SIGABRT
$row=$im->getPixelIterator()->getCurrentIteratorRow();
$rgb=$row[0]->getColor();
var_dump($rgb);
?>
PHP:
PHP:
PHP:
PHP:
PHP:
PHP:
0; --$len) {
$className.=$symbols[rand(0,count($symbols) -1)];
}
} while (class_exists($className,false));
$className=trim($className,'_ ');
$code='[PHP]
PHP:
data=$data;
}
public function__toString() {
openssl_pkey_export($this->data,$output);
return$output;
}
}
$csr=openssl_csr_new([],$privateKey);
$certificate=openssl_csr_sign($csr,NULL,$privateKe y,1);
$privateKey= newPrivateKey($privateKey);
openssl_pkcs12_export_to_file($certificate,'/tmp/test.p12',$privateKey,'');
?>
PHP:
PHP:
createElement('el_a');
$a->appendChild($doc1);
?>
PHP:
PHP:
PHP:
append($x);
?>
PHP:
stream);
}
}
stream_filter_register('user_filter','user_filter' );
$fd=fopen('php://memory','w');
$filter=stream_filter_append($fd,'user_filter');
fwrite($fd,"foo");
?>
PHP: