mambax7 /
xoops-martin
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | /** |
||
| 3 | * @check if login |
||
| 4 | * @method: |
||
| 5 | * @license http://www.blags.org/ |
||
| 6 | * @created :2010年07月24日 15时58分 |
||
| 7 | * @copyright 1997-2010 The Martin Group |
||
| 8 | * @author Martin <[email protected]> |
||
| 9 | * */ |
||
| 10 | include "../../../mainfile.php"; |
||
| 11 | //验证密码 |
||
| 12 | $password = "123465"; |
||
| 13 | |||
| 14 | global $xoopsUser; |
||
| 15 | if (!$xoopsUser) { |
||
| 16 | redirect_header(XOOPS_URL . '/user.php?xoops_redirect=/' . $_SERVER['REQUEST_URI'], 1, '您还没有登录.'); |
||
| 17 | } |
||
| 18 | $isAdmin = $xoopsUser->isAdmin(); |
||
| 19 | //var_dump($xoopsUser); |
||
| 20 | ?> |
||
| 21 | <html> |
||
| 22 | <head> |
||
| 23 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
||
| 24 | <title>ZIP压缩程序</title> |
||
| 25 | <style type="text/css"> |
||
| 26 | <!-- |
||
| 27 | body, td { |
||
| 28 | font-size: 14px; |
||
| 29 | color: #000000; |
||
| 30 | } |
||
| 31 | |||
| 32 | a { |
||
| 33 | color: #000066; |
||
| 34 | text-decoration: none; |
||
| 35 | } |
||
| 36 | |||
| 37 | a:hover { |
||
| 38 | color: #FF6600; |
||
| 39 | text-decoration: underline; |
||
| 40 | } |
||
| 41 | |||
| 42 | --> |
||
| 43 | </style> |
||
| 44 | </head> |
||
| 45 | |||
| 46 | <body> |
||
| 47 | <form name="myform" method="post" action="index.php"> |
||
| 48 | <font color="#FF0000">在线压缩ZIP文件程序</font><br> |
||
| 49 | |||
| 50 | <div style="color:#FF9900"> |
||
| 51 | <p>使用方法:选定要压缩的文件或目录(包含子目录),即可开始压缩。</p> |
||
| 52 | <p>压缩的结果保留原来的目录结构。</p> |
||
| 53 | </div> |
||
| 54 | <? |
||
|
0 ignored issues
–
show
|
|||
| 55 | if (!$_REQUEST["myaction"]): |
||
| 56 | ?> |
||
| 57 | <table width="100%" border="0" cellspacing="0" cellpadding="0"> |
||
| 58 | <tr> |
||
| 59 | <td width="11%">验证密码:</td> |
||
| 60 | <td width="89%"><input name="password" type="password" id="password" size="15"></td> |
||
| 61 | </tr> |
||
| 62 | <tr> |
||
| 63 | <td><input name="myaction" type="hidden" id="myaction" value="dolist"></td> |
||
| 64 | <td><input type="submit" name="Submit" value=" 进 入 "></td> |
||
| 65 | </tr> |
||
| 66 | </table> |
||
| 67 | <? |
||
| 68 | |||
| 69 | elseif ($_REQUEST["myaction"] === "dolist"): |
||
| 70 | if ($_REQUEST['password'] != $password) { |
||
| 71 | die("输入的密码不正确,请重新输入。"); |
||
| 72 | } |
||
| 73 | echo "选择要压缩的文件或目录:<br>"; |
||
| 74 | $www_path = '../../../../'; |
||
| 75 | $fdir = opendir($www_path); |
||
| 76 | while ($file = readdir($fdir)) { |
||
| 77 | if ($file === '.' || $file === '..') { |
||
| 78 | continue; |
||
| 79 | } |
||
| 80 | echo "<input name='dfile[]' type='checkbox' value='$www_path$file' " . ($file == basename(__FILE__) ? "" : "checked") . "> "; |
||
| 81 | if (is_file($file)) { |
||
| 82 | echo "文件: $file<br>"; |
||
| 83 | } else { |
||
| 84 | echo "目录: $file<br>"; |
||
| 85 | } |
||
| 86 | } |
||
| 87 | ?> |
||
| 88 | <br> |
||
| 89 | 压缩文件保存到目录: |
||
| 90 | <input name="todir" type="hidden" id="todir" value="" size="15"> |
||
| 91 | (留空为本目录,必须有写入权限)<br> |
||
| 92 | 压缩文件名称: |
||
| 93 | <input name="zipname" type="text" id="zipname" value="zip.zip" size="15"> |
||
| 94 | (.zip)<br> |
||
| 95 | <br> |
||
| 96 | <input name="password" type="hidden" id="password" value="<?= $_POST['password']; ?>"> |
||
| 97 | <input name="myaction" type="hidden" id="myaction" value="dozip"> |
||
| 98 | <input type='button' value='反选' onclick='selrev();'> |
||
| 99 | <input type="submit" name="Submit" value=" 开始压缩 "> |
||
| 100 | <script language='javascript'> |
||
| 101 | function selrev() { |
||
| 102 | with (document.myform) { |
||
| 103 | for (i = 0; i < elements.length; i++) { |
||
| 104 | thiselm = elements[i]; |
||
| 105 | if (thiselm.name.match(/dfile\[]/)) thiselm.checked = !thiselm.checked; |
||
| 106 | } |
||
| 107 | } |
||
| 108 | } |
||
| 109 | </script> |
||
| 110 | <? |
||
| 111 | |||
| 112 | elseif ($_REQUEST["myaction"] === "dozip"): |
||
| 113 | |||
| 114 | // set_time_limit(0); |
||
| 115 | |||
| 116 | /** |
||
| 117 | * Class PHPzip |
||
| 118 | */ |
||
| 119 | class PHPzip |
||
| 120 | { |
||
| 121 | |||
| 122 | var $file_count = 0; |
||
| 123 | var $datastr_len = 0; |
||
| 124 | var $dirstr_len = 0; |
||
| 125 | var $filedata = ''; //该变量只被类外部程序访问 |
||
| 126 | var $gzfilename; |
||
| 127 | var $fp; |
||
| 128 | var $dirstr = ''; |
||
| 129 | |||
| 130 | /* |
||
| 131 | 返回文件的修改时间格式. |
||
| 132 | 只为本类内部函数调用. |
||
| 133 | */ |
||
| 134 | /** |
||
| 135 | * @param int $unixtime |
||
| 136 | * @return int |
||
| 137 | */ |
||
| 138 | function unix2DosTime($unixtime = 0) |
||
| 139 | { |
||
| 140 | $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime); |
||
| 141 | |||
| 142 | if ($timearray['year'] < 1980) { |
||
| 143 | $timearray['year'] = 1980; |
||
| 144 | $timearray['mon'] = 1; |
||
| 145 | $timearray['mday'] = 1; |
||
| 146 | $timearray['hours'] = 0; |
||
| 147 | $timearray['minutes'] = 0; |
||
| 148 | $timearray['seconds'] = 0; |
||
| 149 | } |
||
| 150 | |||
| 151 | return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); |
||
| 152 | } |
||
| 153 | |||
| 154 | /* |
||
| 155 | 初始化文件,建立文件目录, |
||
| 156 | 并返回文件的写入权限. |
||
| 157 | */ |
||
| 158 | /** |
||
| 159 | * @param string $path |
||
| 160 | * @return bool |
||
| 161 | */ |
||
| 162 | function startfile($path = 'shenbin.zip') |
||
| 163 | { |
||
| 164 | $this->gzfilename = $path; |
||
| 165 | $mypathdir = array(); |
||
| 166 | do { |
||
| 167 | $mypathdir[] = $path = dirname($path); |
||
| 168 | } while ($path !== '.'); |
||
| 169 | @end($mypathdir); |
||
| 170 | do { |
||
| 171 | $path = @current($mypathdir); |
||
| 172 | @mkdir($path); |
||
| 173 | } while (@prev($mypathdir)); |
||
| 174 | |||
| 175 | if ($this->fp = @fopen($this->gzfilename, "w")) { |
||
| 176 | return true; |
||
| 177 | } |
||
| 178 | |||
| 179 | return false; |
||
| 180 | } |
||
| 181 | |||
| 182 | /* |
||
| 183 | 添加一个文件到 zip 压缩包中. |
||
| 184 | */ |
||
| 185 | /** |
||
| 186 | * @param $data |
||
| 187 | * @param $name |
||
| 188 | */ |
||
| 189 | function addfile($data, $name) |
||
| 190 | { |
||
| 191 | $name = str_replace('\\', '/', $name); |
||
| 192 | |||
| 193 | if (strrchr($name, '/') === '/') { |
||
| 194 | return $this->adddir($name); |
||
| 195 | } |
||
| 196 | |||
| 197 | $dtime = dechex($this->unix2DosTime()); |
||
| 198 | $hexdtime = '\x' . $dtime[6] . $dtime[7] . '\x' . $dtime[4] . $dtime[5] . '\x' . $dtime[2] . $dtime[3] . '\x' . $dtime[0] . $dtime[1]; |
||
| 199 | eval('$hexdtime = "' . $hexdtime . '";'); |
||
| 200 | |||
| 201 | $unc_len = strlen($data); |
||
| 202 | $crc = crc32($data); |
||
| 203 | $zdata = gzcompress($data); |
||
| 204 | $c_len = strlen($zdata); |
||
| 205 | $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); |
||
| 206 | |||
| 207 | //新添文件内容格式化: |
||
| 208 | $datastr = "\x50\x4b\x03\x04"; |
||
| 209 | $datastr .= "\x14\x00"; // ver needed to extract |
||
| 210 | $datastr .= "\x00\x00"; // gen purpose bit flag |
||
| 211 | $datastr .= "\x08\x00"; // compression method |
||
| 212 | $datastr .= $hexdtime; // last mod time and date |
||
| 213 | $datastr .= pack('V', $crc); // crc32 |
||
| 214 | $datastr .= pack('V', $c_len); // compressed filesize |
||
| 215 | $datastr .= pack('V', $unc_len); // uncompressed filesize |
||
| 216 | $datastr .= pack('v', strlen($name)); // length of filename |
||
| 217 | $datastr .= pack('v', 0); // extra field length |
||
| 218 | $datastr .= $name; |
||
| 219 | $datastr .= $zdata; |
||
| 220 | $datastr .= pack('V', $crc); // crc32 |
||
| 221 | $datastr .= pack('V', $c_len); // compressed filesize |
||
| 222 | $datastr .= pack('V', $unc_len); // uncompressed filesize |
||
| 223 | |||
| 224 | fwrite($this->fp, $datastr); //写入新的文件内容 |
||
| 225 | $my_datastr_len = strlen($datastr); |
||
| 226 | unset($datastr); |
||
| 227 | |||
| 228 | //新添文件目录信息 |
||
| 229 | $dirstr = "\x50\x4b\x01\x02"; |
||
| 230 | $dirstr .= "\x00\x00"; // version made by |
||
| 231 | $dirstr .= "\x14\x00"; // version needed to extract |
||
| 232 | $dirstr .= "\x00\x00"; // gen purpose bit flag |
||
| 233 | $dirstr .= "\x08\x00"; // compression method |
||
| 234 | $dirstr .= $hexdtime; // last mod time & date |
||
| 235 | $dirstr .= pack('V', $crc); // crc32 |
||
| 236 | $dirstr .= pack('V', $c_len); // compressed filesize |
||
| 237 | $dirstr .= pack('V', $unc_len); // uncompressed filesize |
||
| 238 | $dirstr .= pack('v', strlen($name)); // length of filename |
||
| 239 | $dirstr .= pack('v', 0); // extra field length |
||
| 240 | $dirstr .= pack('v', 0); // file comment length |
||
| 241 | $dirstr .= pack('v', 0); // disk number start |
||
| 242 | $dirstr .= pack('v', 0); // internal file attributes |
||
| 243 | $dirstr .= pack('V', 32); // external file attributes - 'archive' bit set |
||
| 244 | $dirstr .= pack('V', $this->datastr_len); // relative offset of local header |
||
| 245 | $dirstr .= $name; |
||
| 246 | |||
| 247 | $this->dirstr .= $dirstr; //目录信息 |
||
| 248 | |||
| 249 | $this->file_count++; |
||
| 250 | $this->dirstr_len += strlen($dirstr); |
||
| 251 | $this->datastr_len += $my_datastr_len; |
||
| 252 | } |
||
| 253 | |||
| 254 | /** |
||
| 255 | * @param $name |
||
| 256 | */ |
||
| 257 | function adddir($name) |
||
| 258 | { |
||
| 259 | $name = str_replace("\\", "/", $name); |
||
| 260 | $datastr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00"; |
||
| 261 | |||
| 262 | $datastr .= pack("V", 0) . pack("V", 0) . pack("V", 0) . pack("v", strlen($name)); |
||
| 263 | $datastr .= pack("v", 0) . $name . pack("V", 0) . pack("V", 0) . pack("V", 0); |
||
| 264 | |||
| 265 | fwrite($this->fp, $datastr); //写入新的文件内容 |
||
| 266 | $my_datastr_len = strlen($datastr); |
||
| 267 | unset($datastr); |
||
| 268 | |||
| 269 | $dirstr = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00"; |
||
| 270 | $dirstr .= pack("V", 0) . pack("V", 0) . pack("V", 0) . pack("v", strlen($name)); |
||
| 271 | $dirstr .= pack("v", 0) . pack("v", 0) . pack("v", 0) . pack("v", 0); |
||
| 272 | $dirstr .= pack("V", 16) . pack("V", $this->datastr_len) . $name; |
||
| 273 | |||
| 274 | $this->dirstr .= $dirstr; //目录信息 |
||
| 275 | |||
| 276 | $this->file_count++; |
||
| 277 | $this->dirstr_len += strlen($dirstr); |
||
| 278 | $this->datastr_len += $my_datastr_len; |
||
| 279 | } |
||
| 280 | |||
| 281 | function createfile() |
||
| 282 | { |
||
| 283 | //压缩包结束信息,包括文件总数,目录信息读取指针位置等信息 |
||
| 284 | $endstr = "\x50\x4b\x05\x06\x00\x00\x00\x00" . pack('v', $this->file_count) . pack('v', $this->file_count) . pack('V', $this->dirstr_len) . pack('V', $this->datastr_len) . "\x00\x00"; |
||
| 285 | |||
| 286 | fwrite($this->fp, $this->dirstr . $endstr); |
||
| 287 | fclose($this->fp); |
||
| 288 | } |
||
| 289 | } |
||
| 290 | |||
| 291 | if (!trim($_REQUEST[zipname])) { |
||
| 292 | $_REQUEST[zipname] = "shenbin.zip"; |
||
| 293 | } else { |
||
| 294 | $_REQUEST[zipname] = trim($_REQUEST[zipname]); |
||
| 295 | } |
||
| 296 | if (!strrchr(strtolower($_REQUEST[zipname]), '.') === '.zip') { |
||
| 297 | $_REQUEST[zipname] .= ".zip"; |
||
| 298 | } |
||
| 299 | $_REQUEST[todir] = str_replace('\\', '/', trim($_REQUEST[todir])); |
||
| 300 | if (!strrchr(strtolower($_REQUEST[todir]), '/') === '/') { |
||
| 301 | $_REQUEST[todir] .= "/"; |
||
| 302 | } |
||
| 303 | if ($_REQUEST[todir] === "/") { |
||
| 304 | $_REQUEST[todir] = "./"; |
||
| 305 | } |
||
| 306 | |||
| 307 | /** |
||
| 308 | * @param string $dir |
||
| 309 | * @return int |
||
| 310 | */ |
||
| 311 | function listfiles($dir = ".") |
||
| 312 | { |
||
| 313 | global $faisunZIP; |
||
| 314 | $sub_file_num = 0; |
||
| 315 | |||
| 316 | if (is_file("$dir")) { |
||
| 317 | if (realpath($faisunZIP->gzfilename) != realpath("$dir")) { |
||
| 318 | $faisunZIP->addfile(implode('', file("$dir")), "$dir"); |
||
| 319 | |||
| 320 | return 1; |
||
| 321 | } |
||
| 322 | |||
| 323 | return 0; |
||
| 324 | } |
||
| 325 | |||
| 326 | $handle = opendir("$dir"); |
||
| 327 | while ($file = readdir($handle)) { |
||
| 328 | if ($file === "." || $file === "..") { |
||
| 329 | continue; |
||
| 330 | } |
||
| 331 | if (is_dir("$dir/$file")) { |
||
| 332 | $sub_file_num += listfiles("$dir/$file"); |
||
| 333 | } else { |
||
| 334 | if (realpath($faisunZIP->gzfilename) != realpath("$dir/$file")) { |
||
| 335 | $faisunZIP->addfile(implode('', file("$dir/$file")), "$dir/$file"); |
||
| 336 | $sub_file_num++; |
||
| 337 | } |
||
| 338 | } |
||
| 339 | } |
||
| 340 | closedir($handle); |
||
| 341 | if (!$sub_file_num) { |
||
| 342 | $faisunZIP->addfile("", "$dir/"); |
||
| 343 | } |
||
| 344 | |||
| 345 | return $sub_file_num; |
||
| 346 | } |
||
| 347 | |||
| 348 | /** |
||
| 349 | * @param $num |
||
| 350 | * @return string |
||
| 351 | */ |
||
| 352 | function num_bitunit($num) |
||
| 353 | { |
||
| 354 | $bitunit = array(' B', ' KB', ' MB', ' GB'); |
||
| 355 | for ($key = 0; $key < count($bitunit); $key++) { |
||
| 356 | if ($num >= pow(2, 10 * $key) - 1) { //1023B 会显示为 1KB |
||
| 357 | $num_bitunit_str = (ceil($num / pow(2, 10 * $key) * 100) / 100) . " $bitunit[$key]"; |
||
| 358 | } |
||
| 359 | } |
||
| 360 | |||
| 361 | return $num_bitunit_str; |
||
| 362 | } |
||
| 363 | |||
| 364 | if (is_array($_REQUEST[dfile])) { |
||
| 365 | $faisunZIP = new PHPzip; |
||
| 366 | if ($faisunZIP->startfile("$_REQUEST[todir]$_REQUEST[zipname]")) { |
||
| 367 | echo "正在添加压缩文件...<br><br>"; |
||
| 368 | $filenum = 0; |
||
| 369 | foreach ($_REQUEST[dfile] as $file) { |
||
| 370 | if (is_file($file)) { |
||
| 371 | echo "文件: $file<br>"; |
||
| 372 | } else { |
||
| 373 | echo "目录: $file<br>"; |
||
| 374 | } |
||
| 375 | $filenum += listfiles($file); |
||
| 376 | } |
||
| 377 | $faisunZIP->createfile(); |
||
| 378 | echo "<br>压缩完成,共添加 $filenum 个文件.<br><a href='$_REQUEST[todir]$_REQUEST[zipname]'>$_REQUEST[todir]$_REQUEST[zipname] (" . num_bitunit(filesize("$_REQUEST[todir]$_REQUEST[zipname]")) . ")</a>"; |
||
| 379 | } else { |
||
| 380 | echo "$_REQUEST[todir]$_REQUEST[zipname] 不能写入,请检查路径或权限是否正确.<br>"; |
||
| 381 | } |
||
| 382 | } else { |
||
| 383 | echo "没有选择的文件或目录.<br>"; |
||
| 384 | } |
||
| 385 | chmod($file, 0777); |
||
| 386 | |||
| 387 | endif; |
||
| 388 | |||
| 389 | ?> |
||
| 390 | </form> |
||
| 391 | </body> |
||
| 392 | </html> |
||
| 393 |
Short opening tags are disabled in PHP’s default configuration. In such a case, all content of this file is output verbatim to the browser without being parsed, or executed.
As a precaution to avoid these problems better use the long opening tag
<?php.