Pass-01
打开第一关,我们先上传一个jpg文件看看这个文件上传功能正不正常
发现可以正常上传,并且访问这个图片也能正常访问,然后我们尝试上传php文件,发现弹出个警告,不让上传
我们上传php时开启抓包,发现抓不到数据包,说明这个上传的数据是在前端进行判断。我们将php文件后缀改为jpg上传,然后开启抓包,发现成功抓到数据包
然后将数据信息中的文件后缀名改为php后放行数据包
发现成功上传
然后我们用蚁剑连接(php文件中放着一句话木马),连接成功
Pass-02
这一关与第一关差不多,第一关中是前端直接检测文件后缀名,第二关是到后端检测文件类型,所以这关我们直接上传php文件然后进行抓包
这一次,我们要修改文件的类型,所以要修改content-type这一行,改为任意的图片后缀,我这里修改为image/png
然后放行点击上传,发现成功上传
Pass-03
这一关与前面相同,只需要在抓包中把php改为php5或者php3等就可以了(根据系统不同,有的可能运行不了)
需要修改配置文件httpd.conf,在大概465行加入AddType application/x-httpd-php .php .phtml .php5 .php3,这里是设定了可以将后缀为php3,php5等文件也当作php文件执行
改为php3(或者5)之后直接放行就可以上传成功,然后进行访问了
Pass-04
这一关要用到apache中的.htaccess绕过,我们先创建一个.htaccess文件,内容为
<FilesMatch "1.png">
SetHandler application/x-httpd-php
</FilesMatch>
它可以将同目录下的1.png文件当作php文件运行,然后再将我们的1.php改为1.png与.htaccess一起上传后,去访问1.png文件,发现访问成功,即上传成功
Pass-05
这关我们同样点击查看源码,发现没有过滤大小写
所以我们只需要将1.php改为1.Php就可以,这关同样因为环境问题有各种不同的效果
发现上传成功,也是可以成功访问的
Pass-06
这一关没有过滤去首尾空格,所以我们可以在php末尾加个空格,就可以上传,但是windows系统默认是不允许我们在文件末尾中加空格的,这就需要我们利用burpsuit抓包然后进行修改
打开burpsuit开启抓包后点击上传,在文件信息中的文件名称后加个空格,然后放行
发现成功上传,也可以正常连接
Pass-07
这一关在查看源码后发现没有删除文件末尾的点这一个过滤
所以我们可以像第六关那样抓包然后在文件末尾加一个点然后放行,发现成功上传
也可以正常连接
Pass-08
这一关没有去除::$DATA字符串
所以我们可以在文件末尾加一个::$DATA,然后上传,发现成功上传
然后我们访问时需要将::$DATA删除,就可以正常连接
这里的::$DATA的作用是将上传的文件被当作数据流,当网站看到用户上传的只是个数据流,就不会对其加以防护。
Pass-09
这一关我们需要抓包后在文件后面加上. .(中间有空格)。然后放行,就可以成功上传然后访问。
Pass-10
这一关通过源码可以发现,他是通过检测我们上传的文件名称,如果其中有php则将其删除,所以这一关我们可以通过双写的方法,让他将将测到的php删除后,文件后缀仍然可以拼成一个php进行上传,所以这一关我们上传的文件名为1.pphphp
发现可以成功上传,然后直接去访问该图片(点击新建标签页打开图像)
然后尝试连接
Pass-11
这一关需要php的版本号低于5.3.29
,且magic_quotes_gpc
为关闭状态(需要自己关闭),查看这关源码,很明显是一个白名单上传,它只允许上传它给定的后缀名
我们需要将我们的php文件后缀名改为jpg然后抓包上传
在其中的save_path(文件上传路径)后直接加上我们要上传的文件---1.php%00/jpg(这里的%00为一个截断符号,他代表网站检索路径时检索到这里就结束,这样就不会再加上后面的1.jpg从而变成1.php1.jpg了),然后放行发现上传成功
直接去访问就可以了,也可以成功连接(如果不行就是环境问题)
Pass-12
查看这一关的源代码,和第十一关对比,发现变成了post提交,那么思路就和第十一关一样,不过post方式不会自行解码,所以我们先要对%00进行一次url编码再填入进去,而且这次的路径不会直接在上面的url中显示,变成了下面
选中%00然后右键可以直接进行url编码
编码后直接放行就可以了,与第十一题一样
Pass-13
这一关提示我们上传图片码
图片码是伪装成图片的木马文件,具体的制作方法参照 https://www.cnblogs.com/1ink/p/15101706.html,只需要用记事本打开图片后在底部添加上我们要运行的shell命令就可以了,这里还需要一个php文件,内容为
<?php
/*
本页面存在文件包含漏洞,用于测试图片马是否能正常运行!
*/
header("Content-Type:text/html;charset=utf-8");
$file = $_GET['file'];
if(isset($file)){
include $file;
}else{
show_source(__file__);
}
?
将其放在web目录下,这个文件主要是为了将我们上传的图片码内容可以当作php代码运行,万事具备后我们直接上传我们的图片码
发现可以直接上传成功,上传成功后直接访问是访问到了这个图片,我们需要用那个执行php命令的文件再将其访问一下。
首先,我们先访问那个文件
这个文件是用get的方法获取一个参数,它可以将别的后缀的文件当作php命令执行,正好可以运行我们的图片码,我们访问图片码,然后复制路径(这里只需要upload后面的)upload//9220240726183701.gif
然后在上一个文件url的末尾加一个file参数=upload//9220240726183701.gif
点击回车看到下面页面即是访问成功
然后我们尝试连接(直接复制访问后的url就可),发现连接成功
Pass-14
与13关相同
Pass-15
与13,14关相同
Pass-16
这一关也可以上传图片码,但是他会将我们的图片进行二次渲染后再自行组合成图片,所以我们上传与前面同样的图片码时会报错
这里我们直接上传一个已经进行过二次渲染的图片码就好
可以发现成功上传,剩下的步骤就与前面三关相同了,我们连接发现连接成功
Pass-17
这一关用到了条件竞争,查看源码后发现,他会将我们上传的文件进行检查,发现不是规定的文件后直接删除,所以我们就要利用条件竞争,在他删除我们的文件之前访问我们的文件使其语句执行成功,而这里用到的语句就是生成另一个文件的语句
<?php @fputs(fopen('233.php',w),'<?php phpinfo();?>');?>
他的意思是生成一个名为233.php的文件,内容为<?php phpinfo();?>(探针),我们将这段语句放到上传的文件(我这里是1.php)中,然后开始上传,因为删除的很快,我们这里用burpsuit抓包后利用攻击模块去一直给他发送,抓到包后右键发送到intruder
在攻击模块中将payload选择为nullpayloads,然后选择无限重复后开始攻击
接下来就要到浏览器中不断访问upload/1.php,不断刷新,直到显示生成成功后upload文件夹里就会有233.php文件(这里有运气和电脑配置网速等等很多因素影响)
接下来我们只要去访问233.php文件就好了(因为这里我们放的是探针文件,如果想要获取shell,只要把1.php文件中的生成文件内容改为一句话木马就好)
Pass-18
这一关又限制了文件名后缀,不能上传php的文件了,我们直接上传图片码尝试,发现可以,与13,14,15关相同
Pass-19
这一关可以让我们自己选择上传的文件的名称
我们尝试直接上传1.php文件,然后在保存名称中改为1.php.,发现成功上传
也可以连接