文件上传漏洞详细利用流程
一、了解基本术语
1、后门
像房子一样,前门后门都可以进出房子,而较之前门,后门更具有隐蔽性。电脑技术中的后门是抽象概念,意指隐蔽性高或不常用的,区别于常规操作所使用的一种出入口。现金网络后门形形色色,而最多的还是两类,一种是基于web类的webshell,另一种则是基于系统类的网上说的“灰鸽子”之类的软件。
“后门”有些贬义,网上的正面称呼应是“远程管理工具”,现在一般网管对远程网站进行维护管理,就通过类似功能的工具来操作,所以,可以理解为后门是双刃剑的典型黑客技术,因为它也可以作为黑客控制网站后日后进出网站的方便之门。
而在文件上传漏洞利用中,其中一种后门webshell发挥着极大的作用,下面我大概描述一下我了解到的webshell
2、webshell
网上的文字那么大一堆,总结下来就是webshell是使用ASP、PHP或JSP
脚本编码的木马后门,即这些脚本文件是基于web服务开放的服务器才有效。而它最大的优点是可以通过防火墙的拦截,而且更具有隐蔽性。
因为通常的木马后门在控制者控制服务器时会留下大量日志文件;而webshell只会在WEB
日志留痕迹。(WEB日志因其具有庞大性和较差的可阅读性导致管理员容易忽略此项检查,所以1不用太过担心)
webshell的作用简化下来将大概就是当黑客入侵一台WEB服务器时,放一个wbshell,一边下次进入。webshell功能多,可上传、下载文件,如果权限大,可执行系统命令。
可见webshell的重要性(当获得了webshell,对黑客:快要沦陷一台服务器的标志;对管理员:受到极大的威胁)无论是渗透还是文件上传漏洞的利用,webshell都非常重要
二、文件上传漏洞的利用流程
1、找到文件上传的位置
在一个web网站里面靠找到菜单链接的位置,一个个来点击找到文件上传的位置,或者如果能拿到源码的话可以搜索upload等关键字来寻找。还有一种是该web网站真的没有文件上传的位置或没有提供文件上传的接口该怎么办?该怎么把一句话木马放到该web系统里面呢,我也不清楚还有这样的文件上传,但在网上找到了解决办法:
<1>通过Redis向服务器里面写入一句话木马内容
常见的一句话木马为<?php @eval($_POST['a']);?>
利用Redis的持久化的功能和未授权访问漏洞(没有配置密码)这时候连接到它就可以访问里面的内容内存的内容又会通过一个文件同步到磁盘里,这时候只需要在Redis的KV系统里面写入一句话木马的内容,当它保存到磁盘里面时,一句话木马便跟随写入
<2>MySQL
MySQL具有读写文件的功能 select into file...,如果其参数配置允许向任意目录写入文件且我们刚好在服务器上面找到web路径的地址,这时候就可以利用MySQL把一句话木马写入这个web网站(SQl注入能学到,目前还没深究,只是先了解到了有这么个途径)
<3>CMS系统
其官网下载的速度非常慢,可以自己写一个小马,然后把下载的CMS系统打包进去放入某一个地方(如百度网盘)给“别人”下载,一旦别人下载和运行这个程序,那就有了这样的一个小马运行程序 或者干脆不用小马,直接把一句话木马放入某一个可以访问的路径。但这些方法或许更适用于以后对各方面知识都熟悉了的实战,总之网上的方法有很多,我只记录下了我觉得有一丝和易于理解的几种,方便以后深挖时回来提供思路
总而言之,必须要有文件上传的功能才能写入一句话木马
而在找文件上传路径时要一个个去点和看效率非常低,这里在一位博主那里得到了一个Github上面的工具:https://github.com/almandin/fuxploider
该工具可自动扫描一个项目里存在文件上传的地方,检测文件上传的表单,然后发现有没有可以利用文件上传的漏洞
2、尝试绕过校验,上传文件
<1>删除/禁用JS(前段JavaScript脚本)
步骤:打开设置,进入站点权限,禁用JavaScript,验证效果。注意:禁用可能影响网页功能,建议临时使用,关注版本更新,且在使用完之后开启。
<2>通过抓包修改MIME类型(如果用Content-Type来判断)
例题.Upload-labs pass-02
根据提示可以知道,是在服务端对数据的MIMI进行检查,MIMI验证就是验证文件的类型
所以思路就是bp抓包修改文件类型
修改Content-Type,而根据查看源码可以看到允许上传的类型有三种:image/jpeg image/png image/gif,所以改为其中一种就可以了
放行后回到主页复制图片地址
然后访问得到所有有关php信息
<3>等价扩展名
apache中的配置文件中,可以看到会将.php .php3 .phtml这几个后缀当做php文件进行解析,然后我们在上传文件时就可以将后缀改为在黑名单之外的等价拓展名用来绕过黑名单
<4>大小写绕过
观察黑名单里是否仅过滤纯大写或纯小写时也可以更换大小写绕过
<5>htaccess(Apache解析漏洞)
.htaccess参数常见的配法有三种
1.AddHandler php5-script .jpg 2.AddType application/x-httpd-php .jpg
3.Sethandler application/x-httpd-php
而Sethandler
是将该目录及子目录的所有文件均映射为php文件类型;
Addhandler是
使用 php5-script 处理器来解析所匹配到的文件;
AddType是
将特定扩展名文件映射为php文件类型。
也就是说可以将我们上传的文件解析成php
<6>空格、点、::$DATA(利用操作系统的特性)
windows环境下,系统会自动除去文件名后面的字符串::$DATA、点和空格,但在linux下不会,linux环境下会保留文件名的特殊字符。那就可以利用搭建在windows上的环境,抓包后在文件名后加例如空格,正好就可以绕过过滤数(winndows自动帮我去除空格)
<7>%00截断、0x00截断(利用代码、程序语言的特性)
当 PHP 在处理文件名或路径时,如果遇到 URL 编码的 %00,它会被解释为一个空字节(ASCII 值为 0)。在php5.3以前,PHP 会将这个空字节转换为 \000 的形式。
而恰恰在php5.3以前,文件名出现\0000,会导致文件名被截断,只保留%00之前的部分。这样的情况可能会导致文件被保存到一个意外的位置,从而产生安全风险
这是因为php语言的底层是c语言,而\0在c语言中是字符串的结束符,所以导致00截断的发生
<8>图片马(允许上传图片,没有对图片内容进行检查)
<9>条件竞争
如果删除是需要时间时,就可以直接先准备一个新的一句话木马的php文件。
3、获得文件位置
相较与其他web网站,upload-labs靶场算比较友好的,因为它是让传图片,然后把图片的真实路径显示出来,我们可以直接得到。但有的系统便会隐藏路径,那就需要我们想办法去得到,我这方面的知识就挺欠缺的,之前做过的很多题就是噶在获取不到隐藏文件路径的位置
这里如果文件路径没有返回(找不到它的位置)该怎么办:
(1)如果它是开源的cms,它的位置是固定的,即使我们不知道,那么就可以做代码审计
(2)可以做文件变动的监视器,也能得到文件位置(当然这是大佬干的事,我只是了解一下)
还有就是当这个文件没有执行的权限(向百度网盘或csdn上传的文件,当动态访问时它只会重新编码后才返回给我们这样就是完完全全被编码成全文本是根本没办法的)
4、蚁剑连接,管理文件
这里有一个题在我前两天的《学到什么记什么》里也记录过让我对蚁剑有点模糊的地方,尝试蚁剑,本来url拼接我怎么都连不上,后来意识到刚访问图片都没拼接主要网址,而是只单独访问图片地址,所以就单独用图片地址就连上了,密码么,我发现a也可以cmd也可以这个就不清楚为什么
之前一直以为连蚁剑的密码跟上传的木马中【" "】中的字符有关,不过这题的木马都没有上传这种新式的,还能连上,而且密码不限 ...然后...没错,我又随便输入了一下发现abc也可以,
em,难道上传的木马没有“密码”所以都可以连?就像手机没有设置锁屏密码一样谁都能打开?这个问题暂时没有弄懂,改日懂了再回来解答。
然后连上的还是可以查看信息管理文件的。