文件上传
上传Silic.php文件,发现不允许上传
查看源代码,发现在前端定义了允许上传的文件类型,而php不在其中
我们可以绕过前端,通过Burp代理修改文件类型
将Silic.php的扩展名先改为jpg,在上传的时候抓包,将filename="Silic.jpg"改为filename="Silic.php" 点击forword放包
文件上传成功,可以访问
和上面一样上传Silic.php,不允许上传,但是报错形式和上面不一样
查看网页源代码,可以看到前端并没有检测
查看后端代码,发现设置了可以上传的文件类型
所以,我们可以通过Burp代理抓包,修改content-type的类型为image/jpeg
放包,文件上传成功
有了上面两次的经验,首先上传Silic.php上传失败,抓包修改为Silic.jpg可以上传成功,但是无法执行。查看后端源代码
这里的strrchr函数的原理是从左往右查找,知道找到最后一个点和后面的扩展名,将最后这个扩展名和黑名单匹配,如果黑名单没有,即能上传成功。
问题来了,上传成功依旧不能执行,这里我们就要利用某些系统上的扩展名解析漏洞了。
(这里不能使用00截断,因为strrchr函数遇到00截断的空字符就不会继续往后读了,所以依旧是拿php文件匹配黑名单。具体00截断的原理见下方)
Apache2.0-2.2位置扩展名解析漏洞,它是从右往左开始判断扩展名来解析文件的,如果扩展名不被识别,就再往左判断,知道可以识别为止。
例如下面实验中上传的Silic.php.fff文件,这个文件的.fff后缀是Apache不可识别解析的,它就会往前判断,当识别到php时就会把这个文件当作php文件解析了。
查看后端源代码
getimagesize()函数会把文件内容读出来,通过识别文件头来判断真假图片。
把文件用文本编辑器打开,会有文件头,这个文件头就是判断文件的类型,所以即使改变了扩展名,里面的内容是不会变的。
真图片
假图片
遇到这种情况我们将一句话嵌入到图片中,构造图片马,上传图片,通过解析漏洞或其他方式将其还原。
构造图片马的命令
合成的图片马可以在代码的最后看到一句话木马
5、00截断
当服务器获取文件名时,如果Silic.phpp.jpg被更改为Silic.php0x00.fff时,认为00是截断符号,从而name=Silic.php,这里使用未作任何防护的一关
上传Silic.phpp.fff文件抓包,使用Hex查看。修改最后十六进制70为00
返回Raw中看,已经变为空符号,放包,发现上传成功,上传成功的是Silic.php文件
标签:文件,00,扩展名,渗透,Silic,php,上传 来源: https://www.cnblogs.com/heiwa-0924/p/12926579.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。