前言
我们下面进行下一个漏洞——文件上传的学习。文件上传是常见漏洞之一,是Web安全必学漏洞。为探讨清楚文件上传漏洞的诸多细节,我们特以经典的upload-labs进行从入门到进阶的专项训练。
作者进行upload-labs靶场练习时,在环境配置上出了很多问题,吃了很多苦头。为了防止大家踩坑,也为了节省大家的时间,在这里直接给出最简单最有效的配置方法,请见下文。
upload-labs安装与配置:upload-labs安装与配置-CSDN博客
本文是经由upload-labs训练总结而来,所以配合作者的upload-labs通关全详解食用更佳(怎么可以光学习不训练呢)。
upload-labs通关:upload-labs通关-CSDN博客
前置知识
这里大家最好还要有一些php基础,能大概读懂代码就可以;至于html之类的,大家经过之前的学习已经满足要求了。
文件上传基础
定义
文件上传是web系统中常见的一种功能,通过文件上传能实现上传图片、视频,以及其他类型的文件。
文件上传漏洞是指用户利用文件上传功能上传了一个可以执行的脚本文件,并且可以通过该文件获得服务器的权限的一种漏洞。
说白了,文件上传漏洞就是用户通过上传恶意文件去入侵服务器的一种漏洞。这个恶意文件被称为webshell,也可以称为一种网页后门。
关于webshell
- 拥有较完整功能的webshell,我们一般称为大马。
- 功能简易的webshell称为小马。
- 除此之外还存在一句话木马、菜刀马、脱库马等等的名词,是对于webShell功能或者特性的简称。
一句话木马
在upload-labs中我们主要用了一句话木马,故这里对一句话木马进行简单解析。
<?php @eval($_POST['key']);?>
<?php ……?>是PHP标记,代表着这是一句PHP代码
eval()在PHP手册里的解释:
$_POST[]其实是一种全局变量
这样我们就可以综合起来看这一句话木马的含义,其实就是一句PHP代码,收集所有用POST方法传递的key的值(这个‘key’是我们任意起的名字),并将其执行
比如我们用POST方法传递一个key=phpinfo();
此时一句话木马就是<?php @eval(phopinfo(););?>
那么就会执行phpinfo()函数
然后我们还可以去进一步利用,比如通过system()函数,key=system(ipconfig);去查一下ip等等
不过最便捷的方法还是直接连接中国蚁剑,蚁剑必须要用$_POST的密码,这也是为什么我们优先用这个一句话木马。具体的连接方式请见upload-labs通关。
我们在upload-labs中还用到的
<?php @eval($_GET['key']);?>
<?php $_GET['function']($_GET['key']);?>
也都是同理。
文件上传详解
文件上传漏洞前提
- 文件可上传
- 上传路径可知
- 上传文件可以被解释执行或被包含
存在的风险点
所有存在文件上传的地方都可能存在相关的漏洞,都可以进行测试,比如说上传头像、上传身份认证等
文件上传测试思路及方法
对于上传点测试思路及其方法如下,
思路:
方法:
这两张图取自upload-labs出题者。
大家经过upload-labs训练,想必已经对上面的技术较为熟练了,不多赘述
参考文献
WEB入门——文件上传漏洞_htaccess文件上传漏洞-CSDN博客
文件上传漏洞全解析:策略、绕过与安全修复-CSDN博客