一、00截断检测
原理:
PHP底层是C语言实现的,C语言的字符串以‘/0’结尾,从而当一个字符串出现了‘/0’则后面的数据就被抛弃了,所以就存在了‘/0’截断。move_uploaded_file(file,tar)这个函数里面的第一个参数file是需要移动的文件,tar是目标地址,这里目标地址是一个字符串类型,所以就出现了‘/0’截断,此处称为00截断。在get和post的url传参中使用%00 ,在post传参的data中使用16进制00,即‘/0’ 。当服务端验证后缀白名单时一般情况是从传入的文件名中截取的后缀或者从文件保存的路径中获取,此时就需要修改上传的文件名为白名单中的文件后缀,在00截断的url后面跟上白名单中的后缀,这就可以绕过服务端的白名单检测。
限制条件:
1、php版本小于5.3.4
2、php.ini里面的magic_quotes_gpc为OFF
3、上传路径可控
二、图片木马检测
原理:
把一句话木马和一张图片绑定在一起,当服务器存在包含漏洞或者解析漏洞时,则可以上传图片木马,然后使用蚁剑连接webshell。(连图片的木马蚁剑最好用)
#在window下生成图片木马
copy 1.png/b+1.php/a 2.png
#1.png是一张正常的图,1.php是保存一句话木马的php文件 2.png是合并生成的文件
三、图片木马二次渲染检测
原理同上,当服务端把上传的图片文件进行优化时,则可能会把图片中包含的一句话木马给清除掉,此时就需要把服务端优化过的图片下载下来和原图进行比对,在比对中相同的地方再次插入一句话木马便可以绕过图片优化。(切记:不可在文件头部修改,如果是gif图片最好在200行后修改,经验所得)
四、条件竞争
原理:
当删除或者改名正在被打开或者正在被执行的文件时,此时文件是不能被删除或者改名的,即可以利用这个漏洞上传文件的同时访问上传的文件,此时就可以执行文件。这里多使用写入码(在文件中执行写入操作,写入的内容是一句话木马)。只要文件有重命名,删除等操作就可能存在此漏洞。