PHP漏洞全解(七)-Session劫持

服务端和客户端之间是通过session(会话)来连接沟通。当客户端的浏览器连接到服务器后,服务器就会建立一个该用户的session。每个用户的session都是独立的,并且由服务器来维护。每个用户的session是由一个独特的字符串来识别,成为session id。用户发出请求时,所发送的http表头内包含session id 的值。服务器使用http表头内的session id来识别时哪个用户提交的请求。

session保存的是每个用户的个人数据,一般的web应用程序会使用session来保存通过验证的用户账号和密码。在转换不同的网页时,如果需要验证用户身份,就是用session内所保存的账号和密码来比较。session的生命周期从用户连上服务器后开始,在用户关掉浏览器或是注销时用户session_destroy函数删除session数据时结束。如果用户在20分钟内没有使用计算机的动作,session也会自动结束。

php处理session的应用架构

PHP漏洞全解(七)-Session劫持

会话劫持

会话劫持是指攻击者利用各种手段来获取目标用户的session id。一旦获取到session id,那么攻击者可以利用目标用户的身份来登录网站,获取目标用户的操作权限。

攻击者获取目标用户session id的方法:

1)暴力破解:尝试各种session id,直到破解为止。

2)计算:如果session id使用非随机的方式产生,那么就有可能计算出来

3)窃取:使用网络截获,xss攻击等方法获得

会话劫持的攻击步骤

PHP漏洞全解(七)-Session劫持

实例

//login.php 

…..

//index.php 

PHP漏洞全解(七)-Session劫持

登录以后显示

PHP漏洞全解(七)-Session劫持

开始攻击

//attack.php 


php 


    // 打开Session 


    session_start(); 


    echo "目标用户的Session ID是:" . session_id() . "br />"; 


    echo "目标用户的username是:" . $_SESSION["username"] . "br />"; 


    echo "目标用户的password是:" . $_SESSION["password"] . "br />"; 


    // 将book的数量设置为2000 


    $_SESSION["book"] = 2000; 


?> 

提交 http://localhost/attack.php?PHPSESSID=5a6kqe7cufhstuhcmhgr9nsg45 此ID为获取到的客户session id,刷新客户页面以后

PHP漏洞全解(七)-Session劫持

客户购买的商品变成了2000

session固定攻击

黑客可以使用把session id发给用户的方式,来完成攻击

http://localhost/index.php?user=dodo&PHPSESSID=1234 把此链接发送给dodo这个用户显示

PHP漏洞全解(七)-Session劫持

然后攻击者再访问 http://localhost/attack.php?PHPSESSID=1234 后,客户页面刷新,发现

PHP漏洞全解(七)-Session劫持

商品数量已经成了2000

防范方法

1)定期更改session id

函数 bool session_regenerate_id([bool delete_old_session])

delete_old_session为true,则删除旧的session文件;为false,则保留旧的session,默认false,可选

在index.php开头加上

相关推荐