Pass-12
这关开始难度就感觉不一样了,查看源码,说实话,除了知道只能上传jpg,png,gif之外,其他的都不怎么看得懂,查看提示,说上传路径可控,先上传一个文件抓包试试。一通乱搞,没有什么反应,查看攻略了解到:
原理:php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。
知识补充:
strrpos(string,find[,start]) 函数查找字符串在另一字符串中最后一次出现的位置(区分大小写)。
substr(string,start[,length])函数返回字符串的一部分(从start开始 [,长度为length])
magic_quotes_gpc 着重偏向数据库方面,是为了防止sql注入,但magic_quotes_gpc开启还会对$_REQUEST, $_GET,$_POST,$_COOKIE 输入的内容进行过滤
原文链接:https://blog.csdn.net/weixin_47598409/article/details/115050869
因此简单来说就是在上传路径位置进行改动即可,由于本人切换了几个版本都无法实现,便不多做演示,可以直接参考原文攻略。
Pass-13
同Pass-12,不同在于,本关因为post不会像get对%00
进行自动解码,所以需要hex 00截断
图片来自upload-labs-21关通关笔记 - 简书 (jianshu.com)
两关运用的条件相同:
需要满足以下两个条件:
- magic_quotes_gpc = Off
- php版本小于5.3.4
由于本人失误,一个ctrl+z将编辑好的文章直接撤没了,本篇长篇大论的重点图片马也被删掉了,重打心态有点崩,且12、13关没有实现,因此了解原理的情况下直接切入重点了。
Pass-14~17(图片马)
首次从其他地方接触upload-labs的时候便是在图片上传的关卡,因此对这一块的内容更为熟悉。
话不多说,直接进入正题(辛辛苦苦记的记录被自己撤销了真的很受不了)
Pass-14
本关要求图片含有一句话木马,且使用文件包含运行其中代码,方法很简单。
- 使用记事本类型软件编辑图片,在图片末尾添加一句话木马即可。
- 使用命令的形式生成图片马。
Linux下:
# cat 1.png 1.php > 2.png
Windows下:
copy 1.png /b + 1.php /a 2.png
两种方法其实都是一样的
这里演示一下便进入下一关了
上传制作好的图片马,然后使用文件包含进行测试:
可以看到,完美运行,png和jpg同理
Pass-15&Pass-16
两关都加上了一个条件限制,16关还需要开启一个扩展,简而言之就是两关都是为了验证你上传的是不是图片类型的文件,因此无影响,统统使用Pass-14的图片马即可,因此便不做演示了,重点讲Pass-17。
Pass-17(二次渲染)
17关使用的东西叫做二次渲染,原理比较冗杂,我直接讲我的理解:
二次渲染就是更为严格的检验方式,它检查你上传的是不是gif,jpg,png类型的文件,并且,它是从上到下逐字检查的感觉,为什么这样说,后面再做解释;
同时,它会将图片进行二次渲染,你会发现,你上传到upload的图片马,跟你上传之前变了又没完全变,它会将部分内容更改甚至删除(比如你的一句话木马)。
因此Pass-14的图片马,你会发现,在本关能上传,但是你怎么也连接,包含不了,当你用编辑器打开上传后的图片马之后,你会发现一句话木马已经被渲染掉了,那么我们怎么办呢?我们需要利用它没被渲染掉的地方,插入我们的一句话木马,我们先上传一个正常的gif图片,然后与上传后的做对比,这里直接上图:
你会发现,两张图有很多相同的地方,也有不同的地方,我们直接在相同的地方,插入我们的一句话木马,然后保存(这里推荐在前面部分插入,因为越往后面影响图片越大甚至会到损坏的地步,至于原因我也不懂,实践出真知)。
注意:插入一句话木马一定是在经过渲染后的图片上插入!上传的文件可以有一句话木马也可以没有,反正都会被渲染掉,你可以将它放在文末,便于你观察它上传后是否被渲染掉。
为了给大家直观的感受,给大家截了两张图,会发现插入了一句话木马后的图片明显有些变化。因此我们可能需要尝试多个位置,才能成功,然后我们上传我们的高级图片马试试:
可以看到上传成功,我们来包含一下试试
成功!!!当时我第一次成功的时候直接开心的奖励了自己一杯奶茶,因为经历了制作jpg图片马的拷打,因此,接下来我给大家介绍一下为什么我用gif做演示,以及jpg格式和png格式的图片马怎么制作:
很复杂的原理我不讲,因为很难懂,大家想了解的可以看这篇
pass-16 二次渲染绕过 - 1ink - 博客园 (cnblogs.com)
JPG格式是最容易损坏的,因此通过本篇所演示的手工对比更改,几乎无法成功,我试了很多张jpg图片,很多个位置,发现都不能成功骗过upload,每一个都提示上传的不是jpg或者是上传之后还是被渲染掉了,因此可以参考上述链接中的脚本,进行图片马制作,这样的图片马可以通过。
GIF是比较好制作的,我一次就只做成功了,而且GIF的相同代码段相比我做的几个jpg来说,要多太多了,因此GIF值得大家手动制作一下,还是很有趣的
PNG格式也很复杂,PNG分了很多个数据块,每个数据块管的都不一样,需要在对应的位置插入代码还要进行CRC检验什么的,我是嫌麻烦,而且经过JPG的毒打,便不想制作了。
总之,二次渲染大概就是要对你上传的图片进行检验并重新编辑的一个过程,在这个过程中有它不会重新编辑的地方,而我们只需要在这个地方插入我们的一句话木马就行了,关键就在于制作有可能失败,制作成功了也可能上传失败,因此我们需要多次尝试。