Upload靶场11到17关。
Pass-11:
这一关黑名单验证考的是双写绕过,因为查看源代码可以发现其中有一句如下图:
str_ireplace()函数会把$deny_ext中的内容替换为空。那么想要绕过替换就可以用bp抓包,并修改文件后缀为.pphphp,这里系统会从前往后检测,当检测到php时就会替换为空,于是就剩下了.php。具体操作如下:
上传一个shell2.php文件并用bp抓包,shell2.php文件内容如下:
修改包的内容如下:
放包,右键点击图片,选择新标签页打开图像如下:
可以看到shell2.php的内容已经被解析,如下图:
Pass-12:
查看源码可以看出是一个白名单绕过,只允许上传jpg、png、gif结尾的文件,如下图:
根据提示可以猜到这一关可以通过%00截断来绕过检查。(GET型提交的内容会被自动进行url解码)
原理:在url中%00表示ascii码中的0,而ascii中的0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。
补充1:GET请求会对我们输入的内容进行自动编码,也就是说当我们输入%00时,就相当于输入了ASCII中的0,它是一个表示字符串结束的保留字符。
补充2:url编码就是%加上一个字符ASCII码的十六进制,比如:字符“a”的ASCII码是97,97的十六进制是61,所以字符“a”的url编码就是%61。
但是php5.3之后的版本就已经修复了这个漏洞,所以需要更改PHP的版本为5.3之前,如下图:
同时%00截断受限于magic_quotes_gpc函数,所以需要在参数开关设置中取消勾选magic_quotes_gpc,如下图:
正式步骤如下:
上传文件shell2.php并用bp抓包,修改包的内容,需要修改的有两个地方,一个是路径,一个是文件名,如下图:
然后放包在新标签页打开图像,如下图:
然后把后面的那一部分去掉就可以解析shell2.php文件了,如下图:
Pass-13:
这一关和上一关本质上是一样的,就是请求方式不同,上一关是GET请求,这一关是POST请求。GET请求会对我们输入的内容进行自动编码,而POST请求不会,所以我们只能手动对其解码。
具体步骤和上一关大同小异,先上传shell2.php文件,同时用bp抓包,并修改包的内容,如下图:
为什么要有这个+号,我们的目的是要在文件的后面加上%00(url编码%00对应的16进制是00),而这个+号的作用就是为了方便我们在数据包的16进制(Hex)编码的内容中找到shell2.php文件的位置,并且作为一个修改的载体,因为bp的16进制(Hex)编码中只能修改内容、不能直接添加。接下来的操作如下图:
然后放包,在新标签页打开图片,如下图:
然后把后面的那一部分去掉就可以解析shell2.php文件了,如下图:
Pass-14:
点击上图中的链接,跳转至如下界面:
这是一个文件包含漏洞,首先制作图片马。cmd进入到图片文件和一句话木马文件的所在目录,执行以下命令合成图片马,如下图:
因为只是为了验证漏洞的存在,所以shell2.php文件的内容如下:
这句代码的作用是获取PHP的版本信息,假如这个文件能够被执行,那么就意味着一句话木马也可以被执行,可以尝试把内容改为一句话木马,如下图:
言归正传,上传图片马shell2.png,如下图:
然后在新标签页打开文件,如下图:
复制图片路径到测试页面,如下图:
可以看到图片马的内容被解析了。
如果图片马的内容是一句话木马的话就可以用蚁剑等连接工具来连,如下图:
Pass-15:
这关与上一关不同的地方是使用getimagesize()函数来检查上传的内容是否为图片文件。其实还是可以用图片马来绕过,并使用文件包含漏洞解析图片马,具体步骤如下:
先上传图片马,在新标签页打开图片,如下图:
系统会对上传的图片重命名,复制图片路径到测试页面,如下图:
可以看到图片马的内容被解析了。
Pass-16:
这关的不同之处是使用exif_imagetype()函数检查所上传的文件是否为图片文件。这里需要开启php_exif模块,如下图:
然后就是上传图片马,在新标签页打开图片,如下图:
然后复制上传文件的路径到测试页面,如下图:
可以看到图片马的内容被解析了。
Pass-17:
这一关把我们上传的图片进行了二次渲染。我们先重复之前的操作,先上传图片马,然后在新标签页打开,然后复制图片路径到测试页面,如下图:
可以看到这里只是显示了图片的内容,没有解析到图片中的PHP代码。因为系统把我上传的图片重新渲染了一遍,或者说是压缩了我所上传图片的内容。基于这样的原因,我们可以把原来的图片马和上传后被渲染的图片进行比较,比较的是图片的16进制形式,这里会用到EmEditor工具(可以百度搜索这个工具)。
接下来先把被渲染的图片下载下来,直接右键图片,点击“另存图像为”,如下图:
直接将图片拖入到EmEditor工具当中,选择十六进制视图,点确定,如下图:
将被渲染后的图片与原来的图片进行对比,可以看到被渲染后的图片小了一节,如下图:
根据比较两个图片的内容可以看到,图片头的部分是一样的,也就是没有被渲染的部分,如下图:
然后就可以复制一句话木马的十六进制形式粘贴到被渲染后的图片的头部分,替换掉原来的代码,注意要对应好位数和所在的列,不要替换多也不要替换少。如下图:
这里出现了一个问题,就是没有被渲染的部分放不下PHP代码,如此我们只能重新弄一个稍微大一点的图片,但是也不要太大,太大了不好比较。重新制作好图片马并上传得到被渲染后的图片,进行对比如下:
将一句话木马的内容复制粘贴到未被渲染的部分,需要对应好每一列的位置,如下图:
修改好后如下图:
Ctrl+s保存好图片,现在这个图片就是一个新的图片马了。接下来就是熟悉的步骤了,上传图片马,在新标签页打开图片,复制图片路径到文件包含测试页面,如下图:
复制图片路径到文件包含测试页面,成功解析了图片马中的php代码,如下图: