11.双写绕过(替换为空)
尝试上传php文件发现可以上传成功,但是呢没办法访问
我还以为是靶场出问题了还是我的一句话木马里面的语法写错了,后来看了源码才知道,这道题的逻辑 是:把黑名单里面的后缀都替换成空,然后在保存到服务器当中。我上传的是3.php,但是存到服务器当中的是3,所以当访问的时候就是一片空白,服务器不知道文件的类型是什么该以什么方式打开,所以无法访问
解决办法:利用replace替换的特性:它是根据要替换的字符长度从前往后依次进行扫描,所以可以通过双写绕过。通过bp抓包修改后缀。
12.%00截断
条件:php版本小于5.3.4,然后还要关闭php参数开关当中的所有魔术方法
这个方法的原因是在php版本小于5.3.4时,moveuploadfile这个函数在读取要移动到的路径时,会把空字符当作路径的结束,也就是说只会读取到空字符之前的路径。
而因为这个参数是在url当中的所以要把空字符进行url编码,也就是%00
上传php文件不行,抓包分析。
发现这是一个post的请求包,但是在url当中有参数,这里涉及到一个知识点就是在post方法的请求包当中也可以在url当中传递参数相当于是嵌套了get传参,但是如果服务器想要获取当前post请求当中 的url里面传递的参数就要通过get方法。请看源码:
注意:这里通过更改之后,服务器会以为你上传的是个图片,所以你去访问图片的时候会出现404,因为压根就没有那个图片,已经被我截断了
所以要去修改这个访问路径为你自己命名的php文件,
13.和12题一样都是利用空字符截断,不过这里的参数不是放在url当中的而是在post的请求体里面的,所以空字符不需要进行url编码。但是我们没有办法直接打出空字符的,所以可以先打个空格占位,之后再通过编辑16进制的方式,把那个空格改成空字符对应的16进制数00,再发送即可。
这样就上传成功啦。
14.检查文件的前几个字节(文件头检测)
上传图片码,结合文件包含漏洞,解析包含在图片当中的代码。
文件包含漏洞在php版本为5.3以上才能利用。
需要提前准备好1个正常的图片和1个php文件,然后使用copy命令进行文件合并,合并的时候注意以什么方式合并,/a表示askill码,也就是以文本的形式读取里面的内容,/b表示以二进制的方式读取里面的内容。
这里php文件要以/a也就是以文本的形式去读取其中的代码,而图片则是以二进制的方式读取。
注意:这个命令的顺序是不能调换的,如果把php放在了前面,那么合并的文件当作前半部分就是php文件,所以文件头的类型也就是php的,这样就不行,必须要保证文件头是图片的。
上传成功之后,因为它这里对图片进行了重命名所以要先得到图片的路径然后再结合文件上传漏洞即可。
可以看到合并的文件前面是图片部分,由于这里是按照php的解析方式去解析这个文件,所以图片的数据内容会乱码,后面是php代码会被正常解析。
15.第十五题 文件头检测 同十四题,只不过代码函数用的是getimagesize()类型验证
16. 文件头检测 同十四题,只不过代码函数用的是exif_imagetype()类型验证
这道题需要开启php配置当中的extension=php_exif.dll。
17.二次渲染
所谓二次渲染就是所服务器在处理我们上传的文件时,并不是完全的保留里面的内容,会按照一定的规则删除一部分,可以类比理解为文件压缩保存。
但是这样的话,就可能导致我们的一句话木马被删除。
还是上传一句话木马,但是去访问的时候发现没有了一句话木马。
这一关貌似只能上传gif图片码才能成功,我上传了jpg的图片之后发现上传前和上传之后的没有任何共同之处,估计是后端php的处理有点问题,之后通过上传gif的图片,再结合16进制的编辑器,找到了渲染前后没有发生改变的位置,只需要把一句话木马插入到这个位置即可。
但是注意:在插入的时候,插入的位置要和原先一句话木马所在的位置保持一致。
原来这个一句话木马是在第3竖排的第4列到第一竖排的第5列,修改的时候也要保持这种相对位置。
发现成功