目录
什么是文件上传漏洞
很多网站都可以对其上传文件,比如上传头像,上传个人主页的背景等等。
文件上传漏洞就是利用服务器的这一机制对其上传一些特殊文件(如木马),如果服务端网站对其过滤不严,就会使木马文件成功被上传到服务器,攻击者可以利用上传的木马文件对服务器进行一系列操作(提权、反弹Shell等),这样就造成了目标网站的资产损失,这就是文件上传漏洞。
文件上传的过程
客户端 选择发送的文件->服务器接收->网站程序判断->临时文件->移动到指定 的路径
文件上传返回值
0:上传成功
1:上传的文件大小超过了php.ini限制
2:上传文件大小超过了HTML表单的限制
3:只有部分问文件被上传
4:没有文件被上传
文件上传漏洞有什么危害?
攻击者通过上传的而已文件可以获得网站乃至服务器的控制权,上传的文件如果没有及时被清理就会形成持久化的控制。
这个而已文件通常被称为WebShell、WebShell后门,通过这个后门网站对攻击者来说几乎完全透明,造成的损失非常大。
什么是webshell?
那么什么叫做WebShell呢?
前文说了Webshell是一种网页后门,通常用用asp、jsp或者php编写。WebShell的常见的功能有执行系统命令、窃取用户数据、删除web页面、修改主页等。黑客在入侵了一个网站后,常常在将这些asp或php木马后门文件放置在网站服务器的web目录中,与正常的网页文件混在一起。
Webshell的分类
分类 | 体量 | 特点 |
大马 | 体积大,包含很多功能 | 通常会包含调用系统的关键函数,所以通常会加密代码用来隐藏。 |
小马 | 体积小,通常只包含文件上传功能 | |
一句话木马 | 代码极短(只有一行) | 使用方便,可以单独作为一个文件,也可以插入其他正常文件中;变形多,难以查杀。 |
反正就是各种马……
文件上传的攻击方法\步骤
寻找目标网站的上传点(头像上传,北京上传等)尝试上传.php .aspx等动态脚本语言文件测试其是否可以直接上传,如果不行再尝试对其进行绕过。
常见的网站文件后缀名: asp asa cdx cer php aspx ashx jsp php3 php.a shtml phtml 有些网站会对 asp 或者 php 进行过滤转成空可用这些后缀名。 aspasp asaspp phpphp
任意文件上传漏洞
洞如其名,任意文件上传漏洞就是可以直接上传任何文件不做任何过滤所产生的漏洞,又叫做文件直接上传漏洞,攻击者可以直接上传恶意文件并获得网站的权限甚至服务器的权限。
上传绕过
绕过前端JS检测上传文件
有些网站会通过前端JS对上传的文件进行一个检测,这些数据没有经过目标服务器,是可控的,对于前端JS检测有很多绕过的方法:
- 禁用浏览器JS功能
浏览器自身有一个设置页面,以FireFox为例,在浏览器的地址栏中输入about:config就可以进入浏览器的底层设置,搜索java找到如下选项,将true改成false就可以实现对JS的禁用,不加载JS文件也就无法在前端检测文件的后缀名了,即可实现文件上传。(上传文件后一定要改回来)
- F12删除对应的规则
- Burp等工具抓包
一般禁用JS是最简单的做法,只有禁用JS后网页完全不正常了才会考虑其他方法
绕过contnet-type检测
有些网站在上传文件时会检测HTTP请求的请求头中的contnet-type,通过用Burp等软件进行抓包并修改请求头中的contnet-type就可以实现文件上传。
以uploads-lab靶场第二关为例:
直接上传会提示文件类型不正确请重新上传,这个时候我们打开burpsuit进行抓包:
修改HTTP请求包中的Contnet-type这个选项为image/png后将包发出就可以成功实现文件上传:
使用中国蚁剑webshell管理工具进行连接,验证上传结果:
黑名单绕过
有些网站在上传文件时会获取文件的后缀名并将其与黑名单进行比对,如果攻击者的文件后缀名在黑名单中则上传文件会被拦截。
对于黑名单我们只需要将文件后缀名改成不在黑名单内的即可(黑盒情况下一个一个试),例如php1、php2、php3、phtml、ashx等等
以uploads-lab靶场第三关为例:
直接上传提示上传失败,网页友好地给了我们一些提示(笑
我们将文件后缀名改为phtml再点击上传:
可以看到上传成功了,连接一下试试:
上传成功
使用.htaccess绕过
假如网站的黑名单设置的很全面,将所有可用后缀名(如.phtml)都屏蔽了,我们可以尝试上传.htaccess来实现绕过。
htaccess 文件的作用是可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定 义错误页面、改变你的文件扩展名、封禁特定 IP 地址的用户、只允许特定 IP 地 址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。在 htaccess 里写入 SetHandler application/x-httpd-php 则可以将文件重写成php文 件。要htaccess的规则生效则需要在apache开启rewrite重写模块,因为apache是多数都开启这个模块,所以规则一般都生效。
以uploads-lab靶场第四关为例:
创建一个.htaccess文件并在其中写入 SetHandler application/x-httpd-php并上传,该内容的作用是将所有文件都当作php文件来执行,所以我们将php文件的后缀名改为其他任何允许上传的后缀,如png,jpg等就可以实现将其中的内容作为php代码执行。
上传成功后将.jpg文件也一起上传:
连接测试,成功:
大小写绕过
有的限制条件没有严格过滤大小写,可以通过更改大小写进行上传,如php可以改为PHP、Php、pHp等后缀,即可绕过上传。
以uploads-lab靶场第六关为例:
未对大小写作严格过滤,上传途中文件:
上传成功:
连接测试,成功:
空格绕过
如果有的网站没有对上传的文件进行首尾去空处理,那么在传输过程中抓包,将文件名的后面接入一个空格即可实现上传。
以uploads-lab靶场第五关为例:
查看源代码发现有首尾去空和去.处理,所以用. .进行绕过:
第五关上传一句话解法:
上传.ini文件,其中包含语句auto_prepend_file=ant5.jpg实现对ant5.php的引入,然后只需要执行提示中说的readme.php就可以了:
再上传ant5.jpg
测试,成功:
第七关也是空格绕过:
加空格:
测试成功:
加点绕过
有的网站不会对文件后缀名后面的点进行过滤,可以抓包加点进行绕过。
以uploads-lab靶场第八关为例:
抓包加点:
测试成功:
利用系统特征绕过
Windows后缀忽略:在Windows中文件后缀名.系统会自动忽略。所以shell.php. 和shell.php被系统认为是一样的。所以可以在上传时抓包后文件名后面加上.绕过。
Windows叠加特征:在windwos中如果上传文件名ant.php:.jpg 的时候,会在目录下生产空白的文件名ant.php
再利用php和windows环境的叠加属性,
以下符号在正则匹配时相等:
双引号" 等于 点号.
大于符号> 等于 问号?
小于符号< 等于 星号*
文件名.<或文件名.<<<或文件名.>>>或文件名.>><空文件名
NTFS交换数据流绕过
抓包在文件名后面加入::$DATA进行绕过
以uploads-lab靶场第九关为例:
添加数据流:
测试成功:
双写绕过
有的网站会自动删除后缀中的敏感内容(如a.php会编程a.),这时候可以对文件后缀进行双写,比如.php写成.pphphp这样网页再过滤的时候自动就删除了中间的php,最后得到的是一个.php文件。
以uploads-lab靶场第十一关为例:
测试连接,成功:
. .绕过
有的网站之过滤一次空格和.所以可以用.空格.来绕过。
以uploads-lab靶场第十关为例:
测试成功:
白名单绕过
以上都是一些黑名单被绕过的,与黑名单相对的就是白名单,使用白名单验证会相对比较安全,因 为只允许指定的文件后缀名。但是如果有可控的参数目录,也存在被绕过的风险。
目录可控%00 截断绕过
上传参数可控时当gpc关闭的情况下,可以用%00对目录或者文件名进行截断。
要求:php版本小于 5.3.4
首先截断攻击,抓包上传将%00自动截断后面内容。
以uploads-lab靶场第十二关为例:
改包:
测试:
POST%00截断绕过
有些网站使用POST传参,这样我们直接修改路径是无效的,需要修改路径后使用urldecode(burpsuit右键菜单中自带)转码后再传参方可使用。
以uploads-lab靶场第十三关为例:
抓包改包:
对高亮部分使用urldecode:
测试成功:
以上就是一些文件上传漏洞的基础,希望能为网安初学者们提供宝贵思路。