|
|
|
联系客服020-83701501

phpcms任意文件下载

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
phpcms任意文件下载

起首是说说以前爆的谁人注入,斗劲本人都很头疼就算有注入假定不是root我也解密不了所以我就想着能不能挖1个任意文件下载之类的缝隙尔后拿到phpcms的key何等就或许独霸注入伪造消息进入背景了。

 

缝隙文件:/phpcms/modules/content/down.php

文下执行了file_down,咱们跟入看看

Default
123456789101112131415161718192021222324252627282930313233343536 function file_down($filepath, $filename = '') {   if(!$filename) $filename = basename($filepath);   if(is_ie()) $filename = rawurlencode($filename);   $filetype = fileext($filename);   $filesize = sprintf("%u", filesize($filepath));   if(ob_get_length() !== false) @ob_end_clean();   header('Pragma: public');   header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');   header('Cache-Control: no-store, no-cache, must-revalidate');   header('Cache-Control: pre-check=0, post-check=0, max-age=0');   header('Content-Transfer-Encoding: binary');   header('Content-Encoding: none');   header('Content-type: '.$filetype);   header('Content-Disposition: attachment; filename="'.$filename.'"');   header('Content-length: '.$filesize);   readfile($filepath);   exit; }

不有什么过多的垄断间接下载但咱们主要看file_down以前的垄断

这里是get提交a_k尔后供给phpcms的key遏制解密结尾赋值武断a_k能否TRUE(也便是或许解密则有值,不能解密这个效率就在if这里完毕了)所以咱们先过了这个武断。尔后咱们或许想到以前的谁人注入结尾导致注入的位置也便是down这个位置,咱们看看down这里

同样提交了a_k也同样反对了decode,也便是咱们结尾独霸的注入语句是或许用于decode的,那末咱们现在就必要天生encode的语句尔后央求这里让download函数decode

Default
1234567891011 if(preg_match('/(php|phtml|php3|php4|jsp|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(.|$)/i',$f) || strpos($f, ":\")!==FALSE || strpos($f,'..')!==FALSE) showmessage(L('url_error'));     $fileurl = trim($f);     if(!$downid || empty($fileurl) || !preg_match("/[0-9]{10}/", $starttime) || !preg_match("/[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/", $ip) || $ip != ip()) showmessage(L('illegal_parameters'));     $endtime = SYS_TIME - $starttime;     if($endtime > 3600) showmessage(L('url_invalid'));     if($m) $fileurl = trim($s).trim($fileurl);

但是咱们继续看下面还有后缀以及路径的武断,也便是不应承有php的后缀和不应承有..跳目录和c:\何等的模式。以前在思虑的时候脑子有点大把两个细碎赋性联想到1起了

Default
1234567891011121314151617181920212223242526272829 if(strpos($fileurl, ':/') && (strpos($fileurl, pc_base::load_config('system','upload_url')) === false)) {    header("Location: $fileurl");}  else {    if($d == 0) {        header("Location: ".$fileurl);    }     else {        $fileurl = str_replace(array(pc_base::load_config('system','upload_url'),'/'), array(pc_base::load_config('system','upload_path'),DIRECTORY_SEPARATOR), $fileurl);         $filename = basename($fileurl);        //′|àí?D?????t         if(preg_match("/^([]*?)([-][-])([]*?)/", $fileurl)) {            $filename = str_replace(array("%5C", "%2F", "%3A"), array("\", "/", ":"), urlencode($fileurl));            $filename = urldecode(basename($filename));        }         $ext = fileext($filename);         $filename = date('Ymd_his').random(3).'.'.$ext;         $fileurl = str_replace(array('<','>'), '',$fileurl);         file_down($fileurl, $filename);       }}

还对c:/也遏制了武断,假定存在c:/则跳转,诚然下面不有exit真实不影响垄断但是咱们的下载效率是else中所以无法独霸,还是得从根本上规画问题。

和P牛讨论了1会感觉协议理应行得通(协议我不是很罕用所以等P牛测试说后果)但又耐不截至痒就自身几番测试缔造

C:www/1.txt何等的路径window是或许的。结尾和P牛聊缔造他过去看过这类赋性。

 

结尾说明1下,最新版无量制,低版本win限定。

 

【via@91ri team -小续】

数安新闻+更多

证书相关+更多