sliping beauty -- Zip Slip Attack

<?php
session_start();
if (!$_SESSION["uid"]) {
$_SESSION["uid"] = "guest";
}
if ($_SESSION["uid"] == "admin") {
include "/flag";
}
if ($_FILES["upload"]) {
$path = $_FILES["upload"]["tmp_name"];
$zip = new ZipArchive();
if ($zip->open($_FILES["upload"]["tmp_name"]) === true) {
for ($i = 0; $i < $zip->numFiles; $i++) {
$filename = $zip->getNameIndex($i);
$filename_ = $filename . rand(10000000, 99999999);
if (strlen($filename) > 240) {
exit("file name too long");
}
if (preg_match('/[\x00-\x1F\x7F-\xFF]/', $filename)) {
exit("no hack");
}
if (
copy(
"zip://{$_FILES["upload"]["tmp_name"]}#{$filename}",
"./upload/{$filename_}"
)
) {
echo "{$filename_} uploaded.<br>";
} else {
echo "{$filename_} upload failed.<br>";
}
}
$zip->close();
}
}
highlight_file(__FILE__);
?>
Last updated