简单更点漏洞知识吧,这几天写密码学太多了,简单介绍几个常见的网站漏洞。特别声明,本文只介绍基础原理和思想,不深入探究某漏洞的修复和深层利用。
命令注入
先从最愚蠢的开始,
拿DVWA的靶场来举例子(为啥拿这个举例子,我也想问山大网安院的老师为啥选这个),当用户提交内容时,可以在正确内容后面利用“&”或“|”等符号级联上攻击命令,或者提交按照特定结构构造的内容,从而使目标服务器误认并执行恶意命令,达到攻击目的。
最基础的版本,毫无防护的执行上传的命令
DVWA给出了好几个安全级别的例子,安全性越来越强,从Low 级别的没有输入审查;到Medium级别将把”&&”和”;”转为空””,即删除带有级联符号的命令;再到High等级把所以代表多命令的符号全部禁用(不过留下了带空格的“| ”符作为后面);直到Impossible 级别完全严格审查输入,只允许数字和点以IP 的形式输入。
这教会我们一个很重要的预防措施,即对用户输入进行严格的验证和过滤,只允许合法的字符和命令,避免用户注入附加的恶意命令
文件上传
很多网站都可允许用户上传文件,如果处理不当,也会存在文件上传漏洞,File Upload 漏洞的基本原理是开发在开发 Web 的文件上传功能时,没有严格识别和控制上传文件的类型和大小,导致攻击者利用文件上传向服务器发送能被服务器解析并运行的恶意脚本和文件。
以DVWA提供的Low代码为例,Web应用没有完全限制上传应用的类型和大小:
当上传的文件为 PHP 脚本时,由存储路径我们可以访问到该脚本,则可以利用GET、POST 等方式向服务器提交恶意命令或直接在脚本中写入恶意攻击。
如果可以上传脚本,那么完全可以上传一句话木马,以获得该服务器的Webshell,从而控制服务器得到操作权限。更进一步的,上传图片马,不死马等,都可以对服务器采取更深层攻击。(一句话木马是啥,改天详细介绍)。
文件包含
第三个漏洞,文件包含漏洞,File Inclusion 攻击产生的根本原因为,服务器开启了 allow_url_include 选项,可以将文件作为Web应用的调用变量(简单来说就是可以通过网站来访问服务器中的文件),进行动态调用,同时,服务端又没有对调用的文件做合理审查(或者审查被攻击者绕过),导致文件中包含的恶意代码被编译运行。
比如,在DVWA中,在URL地址里输入file1-3,可以访问三个文件,但是这个时候我们如果输入file4,当输入不存在文件的地址后,界面会返回错误信息,可能会因此暴露服务端文件存储的位置,
这里服务器搭载在本地D盘,可以看到报错信息里有文件地址
如果攻击者利用该部分代码访问包含PHP的文件,该文件就会被当作PHP文件执行,例如,如果在该目录下创建带有打开计算器功能代码的txt文件,当在URLpage里输入该txt 地址时,可以看到其依然被当作PHP运行并成功打开了计算器:
一个很自然的想法,利用第二个漏洞文件上传漏洞和本漏洞结合,先上传,再定位,最后执行,就可以使服务端运行攻击者的代码以及进行其他攻击。
远程文件包含
远程包含的原理和本地文件上传原理类似,均为“让服务器访问指定文件”,区别在于本地文件包含利用的是服务器本地的文件,需要攻击者设法上传至服务器,危害相对较小可控,但远程包含漏洞利用的是网络上的第三方文件(也有可能是攻击者的共享文件),相较于本地文件包含漏洞危害更大。
SQL注入
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息(和前面提到的命令注入很像)。
比如我们使用的登录接口:在登录界面包括用户名和密码输入框,以及提交按钮,输入用户名和密码,提交。登录时调用接口/user/login/ 加上参数username、password,首先连接数据库,然后后台对请求参数中携带的用户名、密码进行参数校验,即sql的查询过程。
sql中会将#及–以后的字符串当做注释处理,如果我们使用“’ or 1=1 #” 作为用户名参数,#会忽略后面的语句,由于'1'='1'始终为真,攻击者将能够绕过身份验证并获得访问权限。
翻译过程
如果是引入了一些功能性的sql,杀伤性更大,比如上面的登陆接口,如果用户名使用“’ or 1=1;delete * from users; #”,那么在";"之后相当于是另外一条新的sql,这个sql命令会删除全表,导致服务器数据库清空。
剩下的漏洞类型有人看再继续更。