文件上传漏洞服务端代码未对客户端上传的文件进行严格的验证,导致漏洞。非法用户可以利用上传的恶意文件控制整个网站,这个恶意文件被称为webshell,也可以称为一种网页后门。
将这个保存在php文件中然后将文件传入服务器目录中后用中国蚁剑或中国菜刀等shell管理工具进行连接,连接成功后就可以查看服务器目录了。
1、前端要求必须传入图片,就可以将带有一句马的php文件后缀名改为jpg或gif或png,然后上传时再抓包改变后缀名为php后成功上传
2、前端进行了php后缀过滤,用php3/php4/phtml进行绕过(phtml文件内容格式应如下)
3、若限制了大量文件后缀,此时如果是apache服务器,可以尝试上传 .htaccess后缀文件。文件内容为:
setHandler appliaction/x-httpd-php
意思是所在目录中名字包含png的文件将会被当做php代码解析,然后再上传含有一句话的png文件就好
4、服务器在后台使用函数来判断上传的文件内容是否为图片。所以如果是WebShell文件仅仅是修改了后缀,可能会被pass掉。所以,我们上传的内容必须得有真实的图片内容。
这其中一种方法是在一句话前面加一个文件头如GIF89a,另一种是直接将一句话木马的文件和图片进行合并
D:\文件上传>copy /b hi.png+hello.php hi_hello.png
hi.png
hello.pHp
已复制 1 个文件。
5、.user.ini 绕过
自 PHP 5.3.0 起,PHP支持基于每个目录的INI文件配置( .user.ini )。此类文件仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果。
用法:
.user.ini中两个中的配置就是auto_prepend_file和auto_append_file。这两个配置的意思就是:我们指定一个文件,那么该文件就会被包含在要执行的php文件中(如index.php)。这两个设置的区别:
auto_prepend_file是在文件前插入。
auto_append_file在文件最后插入。
语法:
auto_append_file=hello.png
or
auto_prepend_file=hello.png
6、条件竞争
如果网站的文件上传的过程是:服务器获取文件–>保存上传临时文件–>重命名移动临时文件 这样的步骤时,就可以通过不断地对文件进行上传和访问,从而使服务器还未重命名移动临时文件时,我们就利用时间差打开了文件,成功执行其中的恶意代码。
但是话又说回来,我没试过,不好说,所以跳过
7、二次渲染
文件二次渲染:当你上传一个图片后,服务器会对图片进行处理,你的后门也就很可能被处理了
解决思路:使用脚本,有人分析了图片处理的规律,使用脚本可以把后门代码写入图片而不被处理
可以利用工具来将木马插入到图片中
但是话又又又又说回来,我不会写脚本,所以从网上抄一个吧
*/
?>
上传成功之后访问图片地址,在后面加入&0=system,1=tac flag.php,这个1=需要用POST方式提交
但是话又说回来我也不知道为什么
8、免杀
我们对payload进行处理,使其可以不被杀死
payload1: payload2: payload3: payload4:
还是抄的捏(
9、日志包含
上传了.user.ini之后,访问upload目录显示403,所以我们需要上传一个index.php,构造.user.ini利用条件:上传index.php 内容随意。上传.user.ini包含日志:auto_prepend_file=/var/log/nginx/access.log
访问地址带后门UA头写入日志:
这里其实和160的文件包含是一样的。只是我们需要上传index.php配合.user.ini
爆出403的错误就以为着当前目录的目录文件缺失。
(依旧是抄的)直接贴原文吧:文件上传漏洞(全网最详细)-CSDN博客
总之要想练文件上传可以搞一个upload-lib靶场