文件上传
注意:无文件解析安全问题上,格式解析是一对一的(不能 jpg 解析 php)
比如:文件上传时,写了一个一句话木马的PHP文件,将后缀改为了.jpg去上传,那么他将不能执行一句话木马,除非他有后缀解析漏洞或者有解析错误配置。
前端JS
1.查看源代码,查看是否是JS验证
2.也可以抓包验证,如果上传图片文件经过bp且上传.php文件直接显示禁止上传是,则是JS验证,因为抓包是抓数据出去的包,经过浏览器,在发送给对方服务器,服务器回显,发送对方服务器则会经过bp工具,而上传.php文件没有抓包成功,是因为验证就在浏览器产生了,没有发送出去,所以是前端验证。
做法:先上传.jpg文件抓包,然后把文件名改成.php,再连接后门
.htaccess/.user.ini
.htaccess是一个修改解析配置的文件
用法:
服务器是nginx
上传配置文件 .htaccess 或者 .user.ini
这个是文件上传很常规的操作,这两个配置文件都可以让其它类型的文件被当做 php 文件进行解析,具体哪个能用,取决于题目环境的实际情况。

文件类型
通过文件类型判断文件后缀
上传.gif抓包:
Content-Disposition:form-data; name="file"; fliename="1.gif"
Content-type:image/gif
上传.php抓包
Content-Disposition:form-data; name="file"; fliename="1.php"
Content-type:application/octet-stream
管理员是通过文件类型判断是什么文件
可以通过抓包修改
文件头
通过文件头判断文件后缀
检测文件头
通过添加文头
注意:也要修改文件类型

后缀检测
黑名单/白名单验证
通过文件后缀判断文件后缀
1.黑名单:检测上传文件后缀是不是在黑名单,在就不通过,不在就通过
没有迭代的问题,只检测一次,无循环
例如:shell.php上传成功将显示成shell.
可以通过重复绕过:例如:shell.pphphp上传成功将显示shell.php
2.白名单:检测上传文件后缀是不是在白名单,在就通过,不在就不通过
00截断
这种方法只适用于:
1.magic_quotes_gpc=off
2.PHP版本小于5.3.4
文件路径后面添加a.php%00(%00就是截断的意思)

如果路径不在post后面,而在下面则需要将%00进行url的解码过程
原因是:url上面%00自动解码一次
post下面%00需要手工解码一次
条件竞争
逻辑缺陷:先上传,后面判断,处理逻辑(正常逻辑:先判断,后上传)
处理方法:传入访问既创建代码-〈?php fputs(fopen ('cmd.php','w'),'〈php eval($_REGUEST[1]);?〉');?〉
二次渲染
二次渲染会造成图片里面的代码不存在
检测方式:用010editor将原图片和上传后下载下来的图片进行二进制比较,会出现匹配和差异
做法:要将后门代码放入匹配的位置
函数缺陷
函数:move_uploaded_file($temp_file,$img_path)
条件:目录保存的文件名可控
做法:上传后门文件shell.php在上传框将后缀改成.php/.

浙公网安备 33010602011771号