Session文件包含漏洞

session文件包含漏洞
利用条件:
session的存储位置可以获取。

  1. 通过phpinfo的信息可以获取到session的存储位置。
    通过phpinfo的信息,获取到session.save_path为/var/lib/php/session.
    在这里插入图片描述
  2. 通过猜测默认的session存放位置进行尝试。
    在这里插入图片描述session中的内容可以被控制,传入恶意代码。
    示例:
<?php

session_start();

$ctfs=$_GET['ctfs'];

$_SESSION["username"]=$ctfs;

?>

session_start()解释:
1.session的工作原理
(1)首先使用session_start()函数进行初始换
(2)当执行PHP脚本时,通过使用 S E S S I O N 超 全 局 变 量 注 册 s e s s i o n 变 量 。 ( 3 ) 当 P H P 脚 本 执 行 结 束 时 , 未 被 销 毁 的 s e s s i o n 变 量 会 被 自 动 保 存 在 本 地 一 定 路 径 下 的 s e s s i o n 库 中 , 这 个 路 径 可 以 通 过 p h p . i n i 文 件 中 的 s e s s i o n . s a v e p a t h 指 定 , 下 次 浏 览 网 页 时 可 以 加 载 使 用 。 2. s e s s i o n s t a r t ( ) 做 了 哪 些 初 始 化 工 作 ( 1 ) 读 取 名 为 P H P S E S S I D ( 如 果 没 有 改 变 默 认 值 ) 的 c o o k i e 值 , 假 使 为 a b c 123 ( 2 ) 若 读 取 到 P H P S E S S I D 这 个 C O O K I E , 创 建 S E S S I O N 变 量 , 并 从 相 应 的 目 录 中 ( 可 以 再 p h p . i n i 中 设 置 ) 读 取 S E S S a b c 123 ( 默 认 是 这 种 命 名 方 式 ) 文 件 , 将 字 符 装 在 入 S E S S I O N 变 量 中 ; 若 没 有 读 取 到 P H P S E S S I D 这 个 C O O K I E , 也 会 创 建 _SESSION超全局变量注册session变量。 (3)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中, 这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。 2.session_start()做了哪些初始化工作 (1)读取名为PHPSESSID(如果没有改变默认值)的cookie值,假使为abc123 (2)若读取到PHPSESSID这个COOKIE,创建_SESSION变量,并从相应的目录中(可以再php.ini中设置)读取SESS_abc123(默认是这种命名方式)文件,将字符装在入_SESSION变量中; 若没有读取到PHPSESSID这个COOKIE,也会创建 SESSIONsession3PHPsessionsessionphp.inisession.savepath使2.sessionstart()1PHPSESSIDcookie使abc1232PHPSESSIDCOOKIESESSIONphp.iniSESSabc123,SESSION;PHPSESSIDCOOKIESESSION变量,同时创建一个sess_abc321(名称为随机值)的session文件,同时将abc321作为PHPSESSID的cookie值返回给浏览器端。
漏洞分析
此php会将获取到的GET型ctfs变量的值存入到session中。当访问http://www.ctfs-wiki/session.php?ctfs=ctfs 后,会在/var/lib/php/session目录下存储session的值。session的文件名为sess
+sessionid,sessionid可以通过开发者模式获取。
在这里插入图片描述
所以session的文件名为sess_akp79gfiedh13ho11i6f3sm6s6。到服务器的/var/lib/php/session目录下查看果然存在此文件,内容为:

username|s:4:"ctfs";

[root@c21336db44d2 session]# cat sess_akp79gfiedh13ho11i6f3sm6s6

username|s:4:"ctfs"

漏洞利用
通过上面的分析,可以知道ctfs传入的值会存储到session文件中,如果存在本地文件包含漏洞,就可以通过ctfs写入恶意代码到session文件中,然后通过文件包含漏洞执行此恶意代码getshell。当访问http://www.ctfs-wiki/session.php?ctfs=<?php phpinfo();?>后,会在/var/lib/php/session目录下存储session的值。

[root@6da845537b27 session]# cat sess_83317220159fc31cd7023422f64bea1a

username|s:18:"<?php phpinfo();?>";

攻击者通过phpinfo()信息泄露或者猜测能获取到session存放的位置,文件名称通过开发者模式可获取到,然后通过文件包含的漏洞解析恶意代码getshell。
在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值