掌握上传漏洞的利用。
什么是网站(web)漏洞?
web漏洞通常是指网站程序上的漏洞,可能是由于代码编写者在编写代码时考虑不周全等原因而造成的漏洞,这些漏洞一旦被恶意攻击者利用,会根据漏洞的危害程度,造成不可估量的损失。
Web常见漏洞
- SQL注入
- XSS跨站点脚本
- 任意文件读取漏洞
- 上传漏洞
- CSRF
- 命令注入
- 弱口令漏洞
- 敏感信息泄露漏洞
实验上传漏洞介绍
文件上传是Web应用中比较常见的功能,用户经常会通过文件上传的功能分享照片、修改头像或上传附件等操作。文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务端命令的能力。文件上传本身是一个网站正常的业务需求,但如果文件在上传之后,服务器端没有妥善的处理,就会导致严重的后果。
文件上传漏洞危害
上传的文件若为Web脚本语言,服务器的Web容器解释并执行了攻击者上传的脚本(Webshell),则会导致代码执行,致使攻击者获取网站甚至整个系统的控制权。
上传文件为Flash的策略文件crossdomain.xml,则攻击者可以控制Flash在该域下的行为。
上传文件为病毒,木马等,攻击者可以诱骗用户或者网站管理员下载执行,作为下一步攻击的起点。
黑客可以连续不断地上传大文件,使网站运行缓慢,并可能发动拒绝服务攻击。
上产文件是钓鱼图片或包含了脚本的图片,在某些版本的浏览器中会被作为脚本直接执行。
容易出现上传地方
在用户可以上传文件的地方,如果对上传的文件类型判断并不严谨,则会导致文件上传漏洞的产生。文件上传漏洞一般会有以下一些产生原因:
如果在文件上传时根本没有进行文件格式检查,导致攻击者可以直接上传恶意文件。
如果仅仅通过客户端传入的文件类型进行检查,攻击者可以通过Burp Suite,Fiddler等截断工具轻松绕过客户端的检查。
服务端听过黑名单的方式限制上传文件的类型,例如限制不允许上传'php'、'php3'、'php5'、'asp'等后缀的文件,却可以上传'php2'、'php4'、'inc'等后缀的文件,导致发生安全问题。
服务器端进行了黑名单检查,但是却可能忽略了大小写,如将.php改为.Php即可绕过检查
Web应用虽然在服务器端进行了白名单检查却忽略了%00终止符,如应用本来只允许上传jpg图片,那么可以构造文件名为xxx.php%00.jpg,其中%00为十六进制的0x00字符,.jpg骗过了应用的上传文件类型检测,但对于服务器来说,因为%00字符截断的关系,最终上传的文件变成了xxx.php。
允许用户修改已上传文件的后缀。假设应用本来只允许上传.doc类型的文件,文件时攻击者可以先将.php文件后缀修改为.doc,成功上传后再改回.php。
使用第三方插件时引入。很多应用会引用了带有文件上传功能的第三方插件,这些插件的文件上传功能实现上可能有漏洞,攻击者可通过这些漏洞进行文件上传攻击。如博客平台WordPress就有丰富的插件,而这些插件中每年都会被挖掘出大量的文件上传漏洞。
下面开始实验
根据题意,我们开始上传一张图片,看看上传是否成功。
我们在桌面创建一个webshell.php文件,测试是否能上传成功。
在php文件里写入如下内容,并命名为1.php
eval($_POST['123']);?> //post会把123当做参数进行传递,eval会执行后面的语句。
eval在php中会将字符串当做代码来执行, 而post的意思是使用post的方式进行传递参数。
一句话木马,顾名思义,它的体积很小,只由一句php代码构成。
点击浏览,选择创建好的webshell.php,然后点击提交
我们会发现,在我们提交webshell.php之后,我们就得出了我们所需要的flag.
在本次试验中,我们尝试多种方法对其进行绕过。
我们上传了jpg文件,虽然上传成功但并没有用处,因为Apache把它解析成图片了
我们又上传了gif文件,也上传成功了,但是,Apache把它解析成gif图了。
接下来上传了后缀名为php文件,这个上传成功了,爆出了falg值。
因此我们得出结论,需要成功的执行代码,需要两个条件:
上传文件后缀必须要在网站白名单之内,否则无法上传。
上传文件后缀必须是Apache无法识别的后缀。
只有最后一个满足了这两点,因此一句话木马才能上传成功。
因为本实验仅作为测试用,无法连接中国菜刀,在真实的环境中,我们可以将上传木马的地址复制到菜刀里连接,这样就拿到了网站的Shell(具体操作步骤敬请关注本平台的其他相关课程)。