第一关
- 查看源码
- 使用burp抓包,发现第一关点击上传时没有发送数据包,因此判断改关卡是使用前端对上传的文件进行验证的。
- 查看前端页面,发现点击提交时,会触发checkFile函数对上传的文件名进行验证。
- 由于前端我们是可以修改的,因此只需要把οnsubmit="return checkFile()去掉,即提交文件时不再触发checkFile函数对文件名进行验证。
- 成功并且访问到了所提交的文件
第二关
- 查看源码
- 抓包
- 提交,发现能够成功提交,进行访问也正常。
第三关
- 查看源码
- 先在配置文件中添加以下配置,让php3、php5能够使用
- 发现成功上传了.php5文件,并且通过抓包能够找到上传的路径。
- 访问成功
第四关
- 源码,源码和第三关基本一致,就是黑名单更多了,但是没有对.htaccess文件进行过滤。
- 上传一个.htaccess,.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
下面的代码是将4.jpg以php格式运行。
- 上传一个含phpinfo()代码的4.jpg图片
- 进行访问,发现成功访问到了里面的phpinfo代码
第五关
- 查看源码
- 进行上传文件,文件后缀是.php. .
- 发现上传成功
第六关
- 查看源码,发现没有对大小写进行严格过滤,和前面几关比起来少了个将后缀名转化为小写的函数。
- 将后缀名随机切换为大小写进行上传,发现上传成功。
- 访问成功
第七关
- 查看源码,发现少了一个处理点的函数,因此可以对点进行下手。
- 上传文件
- 发现上传成功
第八关
- 查看源码,发现源码大同小异,只是第八关少了对上交后的文件进行随机化。
- 上传文件
- 发现上传成功
第九关
- 查看源码,发现少了
::$DATA
进行处理的函数,在window的时候如果文件名+"::$DATA"
会把::$DATA
之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA
之前的文件名,他的目的就是不检查后缀名。
- 上传文件
- 发现提交成功
第十关
- 查看源码,发现只是处理了一次点,因此可以从这里入手。
- 上传文件
- 发现提交成功
第十一关
- 查看源码
- 上传文件
- 发现提交成功
以上关卡都是黑名单,下面开始是白名单
第十二关
- 查看源码,发现是白名单,采取%00阶段的方式进行尝试,%00截断的条件是php版本小5.3.4,并且php的配置文件php-ini中的magic_quotes_gpc设置为Off。
- 上传文件
- 发现提交成功
第十三关
- 源码,可以看到只是保存路径的方式使用了POST方式以外,其他都是和上一关一样的。
- 上传文件,由于是POST方式保存路径,所以不能在url中写,只能在下面写。具体如图所示。
- 发现提交成功
第十四关
- 查看源码,发现验证了头部,因此可以通过头部来进行处理。
- 图片一句话制作方法,
copy 1.jpg /b + shell.txt /a 14.jpg
上传,并且查看图片的路径。
- 发现上传成功,使用文件包含的php代码进行尝试。
第十五关
- 查看源码,可以发现该关卡使用了getimagesize函数,该函数的作用是获取文件类型是不是图片格式的,但是该函数也还是根据文件头进行判断的,所以该关卡和第十四关的步骤一致
第十六关
- 查看源码,发现使用了和getimagesize函数类似的exif_imagetype函数,下面的步骤和第十四关一致。
第十七关
- 查看源码,发现分别对jpg、png、gif图片所提交的重新进行了二次渲染,渲染后的图片与原提交的图片内部会有一些不一致。可以根据网上的jpg脚本进行运行并且对产生后的图片进行提交即可,png和gif也类似。