常见针对 Web 应用攻击的十大手段
目前常用的针对应用漏洞的攻击已经多达几百种,最为常见的攻击为下表列出的十种。
十大攻击手段 应用威胁负面影响后果
跨网站脚本攻击标识盗窃,敏感数据丢失…黑客可以模拟合法用户,控制其帐户。
注入攻击通过构造查询对数据库、LDAP 和其他系统进行非法查询。黑客可以访问后端数据库信息,修改、盗窃。
恶意文件执行在服务器上执行 Shell 命令 Execute,获取控制权。被修改的站点将所有交易传送给黑客
不安全对象引用黑客访问敏感文件和资源Web 应用返回敏感文件内容
伪造跨站点请求黑客调用 Blind 动作,模拟合法用户黑客发起 Blind 请求,要求进行转帐
信息泻露和不正确的错误处理黑客得到详细系统信息恶意的系统检测可能有助于更深入的攻击
被破坏的认证和 Session 管理Session token 没有被很好的保护在用户推出系统后,黑客能够盗窃 session。
不安全的木马存储过于简单的加密技术导致黑客破解编密码隐秘信息被黑客解密盗窃
不安全的通讯敏感信息在不安全通道中以非加密方式传送黑客可以通过嗅探器嗅探敏感信息,模拟合法用户。
URL 访问限制失效黑客可以访问非授权的资源连接黑客可以强行访问一些登陆网页、历史网页。
我们通过注入缺陷(Injection Flaws,排名第二的攻击)对攻击原理进行一下说明。
在网站的应用中需要应用到大量的数据库查询检索等功能,例如最简单的例子是网站登陆,用户需要输入登陆名称和密码进行登陆认证。在早期的开发中通常使用最为简单的 select 语句实现此功能,即 select * from users where username = “XXXX” and password = “XXXX”( 假设数据库 user 表名称为 users,用户名和密码字段名称为 username 和 password)。通过截取用户在文本框中录入的字符串,再进行拼接,形成 select 语句,最终如果表 users 中有符合此条件的记录(即该用户名和密码),系统将会返回有效记录,从而允许登陆系统中。
然而,此开发方法隐藏了一个巨大的漏洞,黑客可以通过 SQL 注入攻击攻入网站。如下图所示,黑客在登陆界面录入的不是用户名,而是一串字符串 (’or 1=1 --)。黑客的目的是在原本应该录入用户的地方录入了一串字符串,导致整个 select 语句发生了变化:select * from users where username=’’or 1=1。熟知 Select 语句的人知道,在条件语句中,无论用户名称是否正确,由于 1=1 永远是正确的,所以 select 将会将所有 users 表中的数据返回。最终的结果是,黑客登陆到这个系统中。通过 SQL 注入攻击,黑客可以轻松的敲入一些 sql 语句登陆进网站、对隐秘数据进行查询等等。
图 3. 攻击举例
通过上述原理描述我们可以看到,对于 SQL 注入攻击无论是防火墙还是入侵检测系统都无法预防和阻止,唯一的办法是将应用本身的漏洞关闭。例如通过参数的传递配合存贮过程来实现数据库查询,这比动态的构建 sql 语句安全很多。比如在 ASP.net 中通过下面的程序将会避免攻击:
' Visual Basic example
Dim DS As DataSet
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter
Dim SelectCommand As String = "select * from users where username = @username"
...
MyCommand.SelectCommand.Parameters.Add(New SqlParameter("@username",
SqlDbType.NVarChar, 20))
MyCommand.SelectCommand.Parameters("@username").Value = UserNameField.Value
// C# example
String selectCmd = "select * from Authors where state = @username";
SqlConnection myConnection = new SqlConnection("server=...");
SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);
myCommand.SelectCommand.Parameters.Add(new SqlParameter("@username",
SqlDbType.NVarChar, 20));
myCommand.SelectCommand.Parameters["@username"].Value = UserNameField.Value;
除了注入缺陷攻击,常见的应用攻击还有跨网站脚本攻击、恶意文件执行攻击、不安全直接对象应用攻击、跨站点请求伪造攻击、信息泄漏以及利用错误处理机制展开攻击、等等。每种攻击都类似与 SQL 注入攻击,根据应用程序本身的漏洞,对系统进行破坏工作,例如:获取系统权限、获取机密信息、模拟合法用户等等。
综上所述,这些利用 Web 应用漏洞的攻击是 Web 安全最主要的威胁来源,75%的攻击来源于此,只有对应用程序本身进行改造才能避免攻击。然而,如何发现这些应用漏洞是保证安全的第一前提,我们如何以最快最有效的方式发现 Web 应用本身的漏洞呢?没有高效检测手段,安全的 Web 应用将成为水中花镜中月。
文章来源于领测软件测试网 https://www.ltesting.net/