十大常见漏洞<1-5>
- 弱口令
- SQL注入
- 文件包含
- 文件上传
- XSS
1️⃣ 弱口令
弱口令指的是仅包含简单数字和字母的口令,例如“123”、“abc”等,因为这样的口令很容易被别人破解,从而使用户的互联网账号受到他人控制,因此不推荐用户使用。常常会被被人猜到或者破解。
产生原因
与个人习惯和安全意识相关,为了避免忘记密码,使用一个非常容易记住的密码,或者是直接采用系统的默认密码等。
危害
通过系统弱口令,可被黑客直接获得系统控制权限。
甚至可以进入后台修改资料,进入金融系统盗取钱财,进入OA系统可以获取企业内部资料,进入监控系统可以进行实时监控等等。
防御
设置密码通常遵循以下原则:
- 不使用空口令或系统缺省的口令,为典型的弱口令;
- 口令长度不小于8 个字符;
- 口令不应该为连续的某个字符(例如:AAAAAAAA)或重复某些字符的组合(例如:tzf.tzf.)。
- 口令应该为以下四类字符的组合:大写字母(A-Z)、小写字母(a-z)、数字(0-9)和特殊字符。 每类字符至少包含一个。如果某类字符只 包含一个,那么该字符不应为首字符或尾字符。
- 口令中不应包含特殊内容;
如本人、父母、子女和配偶的姓名和出生日期、纪念日期、登录名、E-mail 地址等等与本人有关 的信息,以及字典中的单词。 - 口令不应该为用数字或符号代替某些字母的单词。
- 口令应该易记且可以快速输入,防止他人从你身后看到你的输入。
至少90 天内更换一次口令,防止未被发现的入侵者继续使用该口令。
利用
我们可以使用Burp Suite 爆破出
一般的用户名可能是admin、123等一些常见的组合
2️⃣ SQL注入
SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的sql服务器加以解析和执行。由于sql语句本身的多样性,以及可用于构造sql语句的编程方法很多,因此凡是构造sql语句的步骤均存在被攻击的潜在风险。Sql注入的方式主要是直接将代码插入参数中,这些参数会被置入sql命令中加以执行。间接的攻击方式是将恶意代码插入字符串中,之后将这些字符串保存到数据库的数据表中或将其当成元数据。当将存储的字符串置入动态sql命令中时,恶意代码就将被执行。
产生原因
当Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或 修改数据库中的数据。
常见的产生注入的原因
基于此,SQL注入的产生原因通常表现在以下几方面:
①转义字符处理不合适;
②不安全的数据库配置;
③不合理的查询集处理;
④不当的错误处理;
⑤多个提交处理不当。
本质
把用户输入的数据当作代码来执行,违背了“数据与代码分离”的原则
怎样快速识别站点是否存在sql注入
SQL数据库将单引号作为是数据和代码之间的分割,被单引号(’) 括起来的是数据,单引号外面的均是要执行的代码。
只需要简单的在URL或WEB页面的字段中输入一个单引号,就能很快速的识别出web站点是否会受到sql注入攻击。
MySQL数据库注入-常用函数
(1)user() 返回当前使用数据库的用户,也就是网站配置文件中连接数据库的账号
(2)version() 返回当前数据库的版本
(3)database() 返回当前使用的数据库,只有在use命令选择一个数据库之后,才能查到
(4)group_concat() 把数据库中的某列数据或某几列数据合并为一个字符串
(5)@@datadir 数据库路径
(6)@@version_compile_os 操作系统版本
注入流程
判断是否存在注入点
1、逻辑值 and 1 = 1 页面正常 and 1 = 2 页面异常 则可能存在注入点 2、order by 通过order by 判断注入的字段数
信息收集
数据库版本:version() 数据库名字:database() 数据库用户:user() 操作系统:@@version_compile_os
版本探测的意义
在mysql5.0以后的版本存在一个information_schema数据库、里面存储记录数据库名、表名、列名的数据库 相当于可以通过information_schema这个数据库获取到数据库下面的表名和列名。
获取相关信息
information_schema.tables #information_schema下面的所有表名 information_schema.columns #information_schema下面所有的列名 table_name #表名 column_name #列名 table_schema #数据库名
抵御
使⽤参数化查询数据库服务器不会把参数的内容当作 sql 指令的⼀部分来执⾏,是在数据库完成 sql 指令的编译后才套⽤参数运⾏
简单的说: 参数化能防注⼊的原因在于, 语句是语句,参数是参数,参数的值并不是语句的⼀部分,数据库只按语句的语义跑
3️⃣文件包含
文件包含:开发人员将可重复使用的内容写到单个文件中,使用时直接调用此文件
产生原因
开发人员希望代码更加灵活,有时会将包含的文件设置为变量,用来动态调用,由于这种灵活性,可能导致攻击者调用恶意文件,造成文件包含漏洞。
危害
- 敏感信息泄露
- 获取webshell
- 任意命令执行
常见文件包含函数
- include()
- require()
- include_once()
- require_once()
本地文件包含
能够打开并包含本地⽂件的漏洞,被称为本地⽂件包含漏洞
4️⃣文件上传
由于程序员在对⽤户⽂件上传部分的控制不⾜或者处理缺陷,⽽导致⽤户可以越过其本身权限向服务器上传可执⾏的动态脚本⽂件
用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。
产生原因
- 服务器的错误配置
- 开源编码器漏洞
- 本地上传上限制不严格被绕过
- 服务器端过滤不严格被绕过
绕过
5️⃣XSS(跨站脚本攻击)
产生原因
危害
- 盗取Cookie
- 网络钓鱼
- 植马挖矿
- 刷流量
- 劫持后台
- 篡改页面
- 内网扫描
- 制造蠕虫等
区别
- 反射型 XSS:通过诱导⽤户点击,我们构造好的恶意 payload 才会触发的 XSS。反射型 XSS 的检测我们在每次请求带payload 的链接时⻚⾯应该是会带有特定的畸形数据的。
- DOM 型:通过修改⻚⾯的 DOM 节点形成的 XSS。DOMbased XSS 由于是通过 js 代码进⾏ dom 操作产⽣的 XSS,所以在请求的响应中我们甚⾄不⼀定会得到相应的畸形数据。