一、 基本概念及原理 1、什么是文件上传漏洞 文件上传漏洞是指服务器允许用户上传文件,但未能正确验证和限制文件的类型、大小、内容或路径,从而使攻击者能够上传恶意文件。这些文件可以包含可执行代码、脚本或着其他有害内容。 2、文件上传漏洞的危害 文件上传漏洞的危害包括远程代码执行、数据泄露、webshell植入、恶意软件传播、服务器宕机、权限提升等 3、文件上传漏洞的原理 用户上传恶意文件后,服务器未能对其进行正确检测,从而成功入侵服务器进而控制整个web网站 二、常见的绕过攻击方式 1、文件名伪装 2、文件内容伪装 图片马绕过 3、文件路径遍历 4、文件大小攻击 5、MIME类型伪造 6、双重扩展名 7、二次渲染绕过 8、空字符绕过 0x00截断 0x0a截断 %00截断 9、Null字节注入 10、利用windows命名机制绕过 空格绕过 后缀加点绕过 点空格点绕过 大小写绕过 ::$DATA绕过 11、字节标识绕过 12、条件竞争绕过 三、防御措施 1、验证文件类型 2、文件内容检查 3、文件重命名 4、存储位置隔离 5、大小限制 6、权限控制 7、防病毒扫描 8、日志记录 9、使用白名单 四、靶场演示 1、upload-labs 第一关 任务:上传文件到服务器 文件类型限制为 .jpg|.png|.gif 思路:通过Burp Suite抓了一下包 发现没有抓到包 显然这是一个前端验证 手法: 第一种、通过禁用页面javascript,可以通过前端验证,然后就可以上传自己的一句话木 马 第二种、我们可以将即将要上传的php文件改一下后缀,改成符合服务器要求的文件类型,比如jpg格式。然后在通过Burp Suite进行抓包,最后在Burp Suite中,改回php格式,点按forward就可以上传了 第三种、修改js代码也可以进行上传,右键进入检查,找到οnsubmit="return checkfile()"改成οnsubmit="return true",然后就可以上传自己的php文件 拓展:1、什么是前端验证? 2、一句话木马怎么制作? 3、如何验证自己木马是否上传成功? 4、为什么改掉onsmit中的代码可以实现绕过? 第二关 任务:上传文件到服务器,文件类型被限制为 image/jpeg | image/png |image/gif 思路:上传一个php文件,打开Burp Suite 发现抓到了包 说明这是一个后端验证 手法:先上传一个符合要求的png文件,记录一下Content-Type:image/png;在上传一个php文件, 也记录一下Content-Type:application/octet-stream;发现二个不一样,能不能将php文件中的值改成png文件中值,改一下看效果,ok 成功上传 拓展:为什么改掉Content-Type的值就可以上传成功了? 第三关 任务:上传文件到服务器,通过分析源码,这是一个黑名单机制的,禁用了四种类型分别是.asp、.aspx、.php、.jsp 思路:通过分析黑名单,还有好多文件没有被禁用;比如.php3、.php5等 手法:上传我们的php文件,通过Burp Suite抓包,将我们的后缀从php改成php3或者php5,接着点按forward, ok 成功上传 拓展:1、什么是黑名单机制? 2、为什么有时行,有时不行?需要改哪些配置? 第四关 任务:上传文件到服务器,通过解析源码,这也是一个黑名单机制的,这次禁用了51种后缀名,把常见的基本都禁用了,并且还有大小写、空格、字符串去除、收尾去空等 思路:仔细观察,发现服务器没有禁用.htaccess这种配置文件 手法:制作一个.htaccess文件,上传至服务器,再接着将我们的php文件改成jpg格式,将jpg上传至服务器,ok 成功上传 拓展:1、什么是.htaccess文件,有什么用? 2、如何制作.htaccess文件?如何开启.htaccess文件配置? 第五关 任务:上传文件到服务器,解析源码后,同样这是一个黑名单机制;这次禁用了52种后缀名,包括.htacess后缀 思路:仔细查看,同样服务器也没有禁用.user.ini这种用户或者特定目录的配置文件 手法:第一种:制作一个.user.ini的配置文件,并且上传至服务器,将我们制作的PHP文件改成.jpg格式,接着上传至服务器,ok 上传成功 服务器成功解析出php文件 第二种:点+空格+点绕过;这种是利用windows命名机制,windows自动会把点去掉;上传php文件,通过Burp Suite抓包,将.php改成.php.空格. 接着点按forward OK成功上传 拓展:1、怎么制定.user.ini配置文件? 2、Apache中配置文件的优先级是怎么的? 3、什么是windows命名机制?windows命名机制有哪些? 第六关 任务:上传文件到服务器,查看源码发现,限制条件中少了大小写转换 思路:看了源码,我们可以利用大小写绕过的方式来上传文件 手法:上传php文件,通过Burp Suite抓包,将.php改成.PhP 点按forward OK 成功上传 第七关 任务:上传文件至服务器,查看源码发现,黑名单、去点、转换为小写、去除字符串等,但是我们会发现少了首尾去空的条件 思路:利用空格绕过方法 手法:上传php文件, 通过Burp Suite 抓包,在.php后边加上空格,点按forward ok成功上传 第八关 任务:上传文件至服务器,检查一下源码,有黑名单、转换为小写、去除字符串、首尾去空等,发现少了去点的限制 思路:后缀加点绕过方法 手法:上传php文件,通过Burp Suite抓包, 将 .php改成.php. OK 成功上传 第九关 任务:上传文件至服务器,查看源码,有黑名单,删除末尾的点,转换为小写,首尾去空等。不难发现少了去除字符串的条件限制 思路:我们可以通过文件的额外数据流方式进行绕过 手法:上传php文件,打开Burp Suite抓包,将.php改成.php::$DATA 点按forward ok 成功上传 拓展:1、什么是额外数据流? 2、如何去访问额外数据流? 第十关 任务:上传文件至服务器,查看源码,有黑名单、删除末尾的点、转换为小写、去除字符串、首尾去空等 思路:我们可以利用windows命名的机制,用点空格点的方式绕过限制 手法:上传php文件,抓包将.php改成.php. .的格式,点击forward OK上传成功 第十一关 任务:上传文件至服务器,查看源码,有黑名单、替换数组为空等 思路:如果我们上传php文件,服务器会把.php替换成空,服务器就没办法解析上传的文件,可以通过双写后缀的方法进行绕过 手法:上传php文件,抓包,将.php改成.pphphp,点击forward OK上传成功 第十二关 任务:上传文件至服务器,检查源码,发现这是一个白名单过滤,只允许三种类型的文件上传 思路:通过对代码的审计,不难发现服务器使用GET请求获取文件路径,我们通过这一点可以在Burp Suite里面修改真实路径 手法:先将.php改成.jpg,然后上传.jpg文件,并且进行抓包。接着找到../upload/改成../upload/xxx(文件名).php%00 最后点击forward OK成功上传 第十三关 任务:上传文件至服务器,检查源码,发现这也是一个白名单过滤 思路:通过源码和抓包分析,由于这里是POST传参请求,这里可以使用0x00截断的方式进行绕过 手法:将.php改成.jpg,然后上传.jpg文件,并且进行抓包,找到../upload改成../upload/xxx(文件名).php0x00 注意这里的0x00需要改成十六进制的00 拓展:怎么把0x00改成16进展的00? 第十四关 任务:上传图片马至服务器,需要文件包含恶意代码,并且限制为三种文件格式 思路:通过修改头字节编码达到绕过的方式以及利用文件包含原理进行正确解析 手法:先将我们的php文件改成png头字节格式,打开01editor查看png格式8950,需要先将php文件用记事本打开,并且在最开头增加二个字节的编码起到占位的作用, 比如ab;进行保存后,再用01editor将我们的php文件头字节改成8950,进行上传,在新标签页我们发现服务器没有办法正常解析,需要我们先记录一下保存路径,然后再点击页面上的黄色的文件包含漏洞,在url后面加上?file=./upload/文件保存路径 OK上传成功 拓展:1、什么是图片字节标识?包含哪些? 第十五关 任务:上传图片马至服务器,查看源码发现使用了getimagesize 思路:由于getimagesize会返回成一个数组,并且根据数组的索引取值,所以可以利用图片马进行绕过上传 手法;需要先生成图片马,然后上传至服务器,记录一下文件保存路径,点击文件包含漏洞,在url后面加上?file=./upload/文件保存路经 OK 成功上传 拓展:1、怎么制作图片马? 2、getimagesize函数怎么运作? 第十六关 任务:上传图片马至服务器, 查看源码发现和十五关类似 思路:制作图片马上传服务器,在利用文件包含原理进行解析 手法:制作图片马,上传至服务器,记录文件保存路径,点击文件包含漏洞,在url后面加上?file=./upload/文件保存路径 OK成功上传 第十七关 任务:上传图片马至服务器,分析源码,程序运行中用到二次渲染会过滤掉我们的一句话木马 思路:通过01editor找出上传前图片和上传后图片不会被渲染的部分,在不会渲染的部分加上一句话木马 手法;上传正常的格式至服务器,在01editor中比较上传前和上传后没有被二次渲染的部分,复制一句话代码,然后粘贴到那部分,保存并且重新上传图片马,记录文件保存位置,点击文件包含漏洞,在url后面加上?file=./upload/文件保存路径 OK 成功上传 第十八关 任务:上传文件至服务器,分析源码知道,服务器是把所有的文件先上传至服务器,然后在进行删除 思路:利用条件竞争原理进行绕过 手法:先上传一个特定的php文件,进行抓包,将内容发送到Intruder模块进行参数配置,发送攻击即可 拓展:1、什么是条件竞争原理? 2、怎么进行参数修改? 第十九关 任务:上传文件至服务器,解读源码后发现,上传之前,服务器就会把有害文件过滤掉 思路:利用apache解析漏洞+条件竞争就能轻松绕过 手法:先将特定的php文件改成php.7z,抓包发送到Intruder模块中,修改参数进行攻击, 再获取即将生成的包的url再进行抓包并且发送到Intruder模块中 二个一块攻击就能成功上传php文件 第二十关 任务:上传文件至服务器,查看源码分析一下,有黑名单,发现少了user.ini 思路:可以利用后缀绕过的方式,也可以利用user,ini进行绕过 手法: 第一种,上传php文件将保存名称修改为upload-19.php./ | upload-19.php.空格. | upload-19.php. 第二种,抓包修改成upload-19.php.0x00.jpg也可以成功上传 第三种,去除字符串 抓包修改成upload-19.php::DATA 第二十一关 任务:上传文件至服务器,查看源码分析,需要先满足MIME类型,并且需要索引取值 思路:需要先满足MIME类型,然后根据源码要求生成合适的后缀名 手法:上传php文件,将保存名称改成xxx.php,抓包修改Content-Type=image/jpeg,再将save_name[0]--> 1.php save_name[4]-->jpg 点按forward即可