asynchronous session 攻击
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被改变而流程改变