Pass-01
这一关是上传一个php文件,在文件里写入一句话<?php phpinfo(); ?>,发现被前端拦截
我们将php文件的后缀改成jpg,上传,发现可以成功上传
那我们对上传文件抓包
修改文件后缀
放行,访问,成功上传
Pass-02(检测文件类型)
服务端通过检查http中包含的Content-Type字段中的值来判断上传文件是否合法的。
利用Burp抓包,将报文中的Content-Type改成允许的类型
Content-Type: image/gif(gif图像)
Content-Type: image/jpg(jpg图像)
Content-Type: image/png(png图像)
当上传文件3.php,提示文件类型不正确,通过查看源码并没有找到限制文件的上传,由此可以猜测肯定是在后端做的限制,我们抓包一探究竟
通过抓包可以发现这里的文件类型为默认参数,而我们这种情况上传文件肯定是上传不上去的,
通过源码中第五段分析得出本关采用了content-type进行后端验证,那么通过使用BS抓包对其进行修改content-type,然后再进行上传。访问
欧克
Pass-03(黑名单)
特殊解析后缀绕过是由于黑名单过滤规则不严谨,在某些特定的情况下的后缀也能够被当作php文件进行解析,例如PHP2、php3、php4、phtml、pht等情况。
可以使用phtml、php3、php4、php5,当然前提是apache服务器,同时在配置文件夹中需要有将AddType application/x-httpd-php .php .phtml .phps .php1 .php5 .pht 这样的一段话前面的注释删除,重启phpstudy让其生效。
本关通过源码得知,禁止.asp、.aspx、.php、.jsp类型进行上传。
本关可以通过上传其他文件扩展名进行绕过,实现文件上传。
这里提示上传一张图片
那我们将文件后缀名改为php5上传,访问很明显上传成功
Pass-04(.htaccess解析)
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置.通过htaccess文件,可以实现:网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
通过源码得知第三关使用的都被限制了,并且设定了更多的特殊解析后缀,所以使用特殊解析后缀已经无法绕过了,这里就可以使用到 .htaccess进行绕过测试。
上传一个两个文件,分别写有以下内容
这是将本目录及所有子目录的所有jpg文件都解析为php文件
访问1.jpg,成功解析到php代码
Pass-05(大小写Nginx服务器)
上传一个php文件
抓包,修改文件后缀名
访问,成功上传
Pass-06(后缀为空)
上传一个php文件
抓包,修改文件后缀名
访问,成功上传
Pass-07(.)
上传一个php文件
抓包,修改文件后缀名
访问,成功上传
Pass-08(::$$DATA绕过)
在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名
上传一个php文件
抓包,修改文件后缀名
访问,成功上传
Pass-09(. .绕过)
通过源码发现本关之前所有的绕过思路都被过滤了,但是通过源码发现,所有的过滤都是一次的,并未对其进行循环过滤。也就是说源码中提到的删除空格,删除点都是只删除一次,那么可以在数据包中将php后缀添加. .,形成.php. .,由于只验证一次,所以删除一个点和一个空格后就不在删除了。
上传一个php文件
抓包,修改文件后缀名
访问,成功上传
Pass-10(双后缀名绕过)
服务端可能存在将后缀替换为空的情况,但是这就存在一种可能就是在编辑过滤的时候只过滤了一次,所以就出现了可以通过双写就绕过的可能。
上传一个php文件
抓包,修改文件后缀名
访问,成功上传
Pass-11(白名单 %00截断)
这一关白名单,最终文件的存放位置是以拼接的方式,可以使用%00截断,但需要php版本<5.3.4,并且magic_quotes_gpc关闭。
上传一个1.jpg
我们可以看到是通过get传参传递的,那么我们不妨在这块将路径改掉,改为upload/1.php%00,那么后面不管是什么东西都会被截断掉,然后经过move_uploaded_file函数将临时文件重新复制给我们的截断之前的文件路径,使得我们可以进行下面程序的运行
成功访问
Pass-12()
本关接受值从get变成了post,它两的区别就是get会自行解码,而post不会解码,所以需要对%00进行解码。
在BS抓包中选中%00右键选择URL其次选择网址解码。
发现也是课可以上传成功的
Pass-13()
同Pass-18()
Pass-14()
同Pass-18()
Pass-15()
同Pass-18()
Pass-16(图片马二次渲染)
这一关,使用imagecreatefromjpeg()函数将我们的图片打散进行二次渲染,这就会导致我们的一句话木马消失
上传一个二次渲染的图片马
查看图片路径
图片马的漏洞需要结合其他漏洞使用,所以我们打开一个漏洞,需要输入一个参数
输入参数file=upload/4541.gif,然后传入一个参数zoe=phpinfo();成功访问
Pass-17(条件竞争)
条件竞争就是在源代码中是存在校验的,但是校验是在文件上传后,才开始校验,也就是文件先上传至服务器中,然后服务器会对该文件进行校验,当符合的时候则会对文件进行重命名,当文件不符合要求的时候就对将文件进行删除。
而我们则需要在服务器对文件删除前进行访问,由于文件在访问过程中,服务器是无法删除的,所以就可以利用这个节点实现条件竞争。
我们在上传的文件写入这行代码<?php @fputs(fopen('1.php',w),'<?php phpinfo();?>');?>
我们要多次上传,读取到文件才能执行我们的文件,在这期间他会不断删除我们的文件,所以我们要竞争
用burp抓包,之后使用Intruder多次上传,
这是我们一直访问上传的php文件,直到访问成功,说明我们的通过上传的文件成功写入木马
成功访问到写入的内容
Pass-18(图片马)
上传一个图片马
右击图片访问,得到图片的路径
配合其他漏洞执行
Pass-19(修改上传文件后缀)
访问