首页    新闻    下载    文档    论坛     最新漏洞    黑客教程    数据库    搜索    小榕软件实验室怀旧版    星际争霸WEB版    最新IP准确查询   
名称: 密码:      忘记密码  马上注册
安全知识 :: 专题文章

asynchronous session 攻击


http://www.gipsky.com/
Team : I.S.T.O

Writer : kj021320

Tester : Living/Amxsa

BLOG : http://blog.csdn.net/I_S_T_O



(套话)

首先介绍一下什么是 session , 相信很多开发人员已经很熟悉了!但是我还需要老生常谈, session是服务器



上面的一块内存区域 , 存放登陆用户(同一个会话) 的信息 , 而浏览器端只需要 保存一个KEY , 每次提交的时候只需



要拿着相应的key去服务器取东西 。为了适应大家阅读所以 下面为常用WEB代码事例



asp/aspx

<%

session("member")="kj021320"

session("model")="审核模块"

session("group")="5"

%>



PHP

<?

$_SESSION['member']="kj021320";

$_SESSION['model']="审核模块";

$_SESSION['group']=5;

?>



jsp

<%

session.setAttribute("member","kj021320");

session.setAttribute("model","审核模块");

session.setAttribute("group","5");

%>



(概念) 那怎么才算是 asynchronous session 攻击呢!这个形容词在国外是没有涉及过的!很显然是在session 异步



操作过程中 , 中引发的权限拷贝 , 或者权限提升 流程改变的现象(living amxsa管它叫做 session竞争)..... 现在我们带着 4维空间的思考模式 去分析这个过程!



(模拟)



A页面操作

查询数据库

设置session 模块=A

查询数据库

设置session 权限=1

完成



B页面操作

查询数据库

设置session 模块=B

查询数据库

设置session 权限=2

完成



一切很正常~

但是当同用户并发到来的时候

就有可能这样的操作



A页面操作

查询数据库

设置session 模块=A

系统时间片停止 把执行权交给B页面

(

B页面操作

查询数据库

设置session 模块=B

查询数据库

设置session 权限=2

完成

)

继续A页面

查询数据库

设置session 权限=1

完成



大家看了吗?这样就是

模块=B

权限=1

的出现了!



假如大家熟悉数据库事务的话 一看就明白!违反了 原子性



(解说)

在这样的细微攻击地方 并不是什么WEB应用都会出现

至少在ASP/ASPX上面不会因为他的核心处理方式不一样 , 页面处理session都是串行化的

PHP的话在WIN环境下APACHE也不会发生这个问题!感谢 AMXSA LIVING协助测试

PHP *NIX的大家可以回去测试



但是在J2EE应用上面就刚刚好会出发这样的漏洞

现在来讲讲 J2EE容器 接收请求实现模式



首先J2EE容器启动被请求SERVLET(JSP也被翻译为SERVLET执行),OK当每一个请求到来的时候!J2EE容器会采用反射把



请求采用多线程方式交给SERVLET的SERVICE方法处理



请求 ---> J2EE容器 ---> SERVLET(SERVICE方法)



而 HttpSession 是存储在 HttpServletRequest 里面的

容器不一定有监控页面对session的操作是否加入LOCK 就造成这样的攻击



(代码)

session.jsp

<%

System.out.println(session);

%>

<a href="a.jsp" >A</a>

<a href="b.jsp" >B</a>



a.jsp

<%

session.setAttribute("id",5);

out.println(session.getAttribute("id"));

for(int i=0;i<=1000;i ){

for(int j=0;j<=100;j ){

System.out.println("");

}

}

out.println(session.getAttribute("id"));

%>



b.jsp

<%

session.setAttribute("id",100);

System.out.println(session);

out.println(session.getAttribute("id"));

%>



大家可以先运行 session.jsp 然后 打开a.jsp 再打开 b.jsp ,很显然就能看到 a.jsp处理中途session给修改了!



(攻击引申)

以上只是一个 理论与演示,有可能实际中很少见到这样的事情!

但是在开发J2EE应用的时候真得要注重!要不然以后肯定是J2EE攻击的重大隐患...



例如

论坛的斑竹权限被拷贝

OA被权限被越过本来有邮件模块的权限现在给拷贝了有用户治理

或者在处理过程中 因为session被改变而流程改变
<< 专家称 Flash文件存在漏洞 成千上万网站遭到威胁 新“飘雪”(win32.troj.piaoxue.e.218112)直接删除杀毒软件的安装程序防护 >>
评分
10987654321
API:
gipsky.com& 安信网络
网友个人意见,不代表本站立场。对于发言内容,由发表者自负责任。

系统导航

 

Copyright © 2001-2010 安信网络. All Rights Reserved
京ICP备14013333号-8