CTF后门入侵系统(攻防世界)

php://filter的妙用

  1. php://filter是php中特有协议流,"中间流"来处理其他流,就比如可以用:post请求通过base64将php源码编译并输出;
localhost:80/index.php?php://filter/write=convert.base64-decode/resource=index.php   //输出的文件名

总结:
2. 使用不同的参数可以达到不同的目的和效果;
3. 利用base64获得源码 / 通过读写编码实行绕过操作;在这里插入图片描述

测试题目

<?php
$content = '<?php exit; ?>';
$content .= $_POST['txt'];
file_put_contents($_POST['filename'], $content);

$content函数使用了"exit"即使写入了一句话木马也会被退出所以尝试绕出;
思路:php://filter进行绕过
1.通过一句话base64encode;
2. convert(兑换)
3. php://filter/read=convert.base64decode进行解码;
4. **Tips:**那么<?php exit;?>这一部分在经过解码后,php不对其解析,而我们想要写入的一句话正好被成功解码。因此得以成功上传webshell。
在这里插入图片描述

测试题目二

工控系统后台渗透拿flag题目,也是通过php:filter进行编码输出的;

审计PHP preg_replace() 函数
preg_replace 函数执行一个正则表达式的搜索和替换。
语法:
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int KaTeX parse error: Expected 'EOF', got '&' at position 19: …it = -1 [, int &̲count ]] )

  1. 搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。
  2. 参数说明:
  3. $pattern: 要搜索的模式,可以是字符串或一个字符串数组。
  4. $replacement: 用于替换的字符串或字符串数组。
  5. $subject: 要搜索替换的目标字符串或字符串数组。
  6. $limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
  7. $count: 可选,为替换执行的次数。

PHP 的 preg_replace()函数存在一个安全问题:

/e” 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。

示例:

//访问的url:?pat=/./e&rep=phpinfo()&sub=aa就会触发phpinfo()的执行
?pat=/./e&rep=phpinfo()&sub=just test 就会触发phpinfo()

在这里插入图片描述

        //方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试

        if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {

            echo "<br >Welcome My Admin ! <br >";

            $pattern = $_GET[pat];
            $replacement = $_GET[rep];
            $subject = $_GET[sub];

            if (isset($pattern) && isset($replacement) && isset($subject)) {
                preg_replace($pattern, $replacement, $subject);
            }else{
                die();
            }

        }
发布了39 篇原创文章 · 获赞 13 · 访问量 3358

猜你喜欢

转载自blog.csdn.net/qq_30036471/article/details/101176610