About Session

总结一下Session


众所周知,HTTP是一种无状态的协议,所以就需要一种机制来保存客户端的一些信息,这个时候session就派上用场了

session可以做到的事情有很多,比如最常见的记录登录状态,也可以当作客户个人数据库来使用

但是某些特定情况下,session也会导致一些安全问题


PHP

php session储存在服务端

php一般与nginx、apache一起使用,这种时候日志文件一般是root用户/adm(或者其他)用户组,www-data权限无法包含的,但是session却是www-data用户,也就没有权限上的问题

php session一般保存在/var/lib/php/sessions目录下,以sess_跟sessionid拼接的方式命名,可以通过php.ini配置文件或者phpinfo进行查看

session包含

如果网站存在可利用的文件包含点,且同时session中的内容可控(比如登陆之后的用户名),攻击者就可以通过包含session的方式来get shell

session upload

例题:http://web.jarvisoj.com:32784/

在php的默认配置下(这里我自行关掉了cleanup,为了方便查看上传session upload的结果)

upload_progress.enabled是打开的(哪怕在php.ini中是用;注释掉的,想要关掉就要修改php.ini,去掉注释,并将On改成Off)

在这种情况下,就算网站中session不可控,攻击者可以通过上传session的方式来控制session

PS:不用session_start也行

参考资料:https://secure.php.net/manual/en/session.upload-progress.php

如果cleanup为On,那就需要使用条件竞争了


Python - Flask

Flask web框架的session储存在客户端

当然是经过加密的,加密的密钥的是Flask app运行的时候使用的secret_key,所以如果我们能获取到这个密钥,就能任意伪造session

脚本如下,从cookie中可以取得伪造的session

你可能感兴趣的:(About Session)