upload-labs Pass4

管理员 2020-02-27 PM 82℃ 0条

这题有两个思路,第一个比较简单,第二个的可拓展性高

第一种方法

1.查看源码发现删除文件名末尾的点跟首尾去空只执行一次,那么我们可以构造文件名:info.php.空格. 进行绕过

黑名单过滤,直接引用的 $file_name ,程序先是去除文件名前后的空格,再去除文件名最后的.,再通过strrchar来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,导致可以利用类似info.php. .(两个点号之间有一个空格)绕过,如果重名名了文件的话应该会用$file_ext来进行拼凑文件,这样保存在服务器中的文件将没有后缀(去除了.空格)

2.可以看到上传成功

3.但是它实际在服务器中的存储文件名是没有最后那个点的

4.访问执行成功

5.原理就是,过滤程序会先过滤件文件名最后一个点,成为 info.php.空格,然后strrchr()函数截取最后一个点以及后面的字符串,剩下 .空格,接着再过滤尾部的空格,就只剩下一个点(.)了,. 与黑名单对不上,就绕过了服务器检测,服务器认为他是合法的就把他原来的文件名存入服务器。然后因为 Windows系统是不允许文件名最后面是 . ,会把最后面的点去掉,变成 info.php.空格,因为文件名后面跟空格也是不合法的,所以系统又会把空格去掉。那就还剩下 info.php. 最后把info.php. 后面的点也去掉了,就成了info.php

说的有点绕,我给图大家看下,我在Windows 下在文件名最后加空格和点大家猜猜会怎样

当我回车保存之后,文件名仍然是 info.php,这也就验证了windows下系统会自动删除文件名最后的点和空格这句话。

第二种方法

1.查看源码,发现是黑名单过滤。能用的后缀都被过滤完了

2.但是没有过滤 .htaccess ,那我们可以利用这个。.htaccess 是apache服务器下的控制文件访问的配置文件 ,能实现文件权限,解析,重定向等功能,更详细的解释可以看这里 .htaccess文件配置理解

windows下创建 .htaccess 的方法:

(1)先新建空白文本文档,写入下面我们需要的 .htaccess 规则

AddType application/x-httpd-php .jpg

规则意思是:在这个文件夹下把所有 .jpg 文件当作php文件解析。

(2)点击左上角 文件-->另存为,然后文件名填 .htaccess ,保存类型选所有文件

这样就创建完成了

3.有了思路,那么我们执行起来就简单了。

先把 .htaccess 传上去,上传成功

再上传 info.jpg,上传成功

那这时候我们去访问 info.jpg 会怎样呢

可以看到当作 php文件执行了

上传webshell 也是一样的原理

非特殊说明,本博所有文章均为博主原创。

上一篇 upload-labs Pass5
下一篇 upload-labs Pass3

评论啦~