标签 php代码审计 下的文章

从phpcmsv9.6.1谈常见变量覆盖


0x00

  之前看了phpcms以前的洞,phpcmsv9.6.1是存在任意文件读取的,漏洞分析:传送门其中parse_str扮演了关键角色。
  简单说下关键点,调用的file_down读取函数去读取$fileurl(由$s和$f拼接)文件路径,这里有正则过滤(不能读取php)

$fileurl = str_replace(array('<','>'), '',$fileurl);

这里str_replace导致$s,$f可以绕过正则过滤($s为1.ph,$f为<p),但是这里有个safe_replace()过滤函数使'<','>'被替换为空。这里经过的parse_str()能起urlencode的作用使传入url编码即可绕过safe_replace引入'<','>'。

0x01

  先看php.net中关于parse_str的介绍:将 encoded_string 解析为通过 URL 传递的查询字符串, 并在当前作用域中设置变量 (如果提供了结果, 则在数组中)。

<?php
$a ='b=%3e%3c';
parse_str($a);
function safe_replace($string){
    $string = str_replace('%20','',$string);
    $string = str_replace('%27','',$string);
    $string = str_replace('%2527','',$string);
    $string = str_replace('*','',$string);
    $string = str_replace('"','"',$string);
    $string = str_replace("'",'',$string);
    $string = str_replace('"','',$string);
    $string = str_replace(';','',$string);
    $string = str_replace('<','<',$string);
    $string = str_replace('>','>',$string);
    return $string;
}
$a = safe_replace($a);
echo $a."</br>";
echo $b;
?>


浅谈php伪协议


这次校赛,学长出的一道tomcat提权的题目,需要用伪协议去读文件和getshell,所以记录下常见的几种伪协议及其安全问题。

0x01 php://filter

php://filter是一种元封装器,设计用于数据流打开时的筛选过滤应用,这里可造成LFI

<?php   //test.php
phpinfo();
?>
<?php   //1.php
include($_GET['a']);
?>

http://127.0.0.1/1.php?a=php://filter/read=convert.base64-encode/resource=index.php

base64 decode一下就是test.php的源码
allow_url_include:on 可以造成RFI

0x02 zip和phar协议