Session文件包含

  • Post author:
  • Post category:其他



目录


1.session的工作原理


2.session_start()简介


3.利用条件


4.案例分析

1.session的工作原理

(1)首先使用session_start()函数进行初始换。

(2)当执行PHP脚本时,通过使用SESSION超全局变量注册session变量。

(3)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.savepath指定,下次浏览网页时可以加载使用。

2.session_start()简介

(1)读取名为PHPSESSID(如果没有改变默认值)的cookie值,假使为abc123。

(2)若读取到PHPSESSID这个COOKIE,创建SESSION变量,并从相应的目录中(可以在php.ini中设置)读取SESSabc123(默认是这种命名方式)文件,将字符装在入SESSION变量中;

(3)若没有读取到PHPSESSID这个COOKIE,也会创建SESSION超全局变量注册session变量。同时创建一个sess_abc321(名称为随机值)的session文件,同时将abc321作为PHPSESSID的cookie值返回给浏览器端。

3.利用条件

当Session文件的内容可控,并且可以获取Session文件的路径,就可以通过包含Session文件进行攻击。

Session的存储位置获取:一般是通过以下两种方式。

(1)通过phpinfo的信息可以获取到Session的存储位置。phpinfo中的session.save_path存储的是Session的存放位置。通过phpinfo的信息获取到session.save_path为/var/lib/php/session。

(2)通过猜测默认的Session存放位置进行尝试。通常Linux下Session默认存储在/var/lib/php/session目录下。默认存储Session存放位置。

下面用一个靶场案例进行理解

4.案例分析

步骤一:漏洞分析。

Session文件包含示例代码:

<?php
session_start();
$ctfs=$_GET['ctfs'];
$_SESSION["username"]=$ctfs;
?>

此代码的$ctfs变量可以通过GET型ctfs参数进行传入,PHP代码会将获取到的GET型ctfs变量的值存入到Session中,可以利用GET型ctfs参数将恶意代码写入到Session文件中,然后再利用文件包含漏洞包含此Session进行利用。

此代码满足Session文件包含的两点要求:

此代码的$ctfs变量可以通过GET型ctfs参数进行传入,PHP代码会将获取到的GET型ctfs变量的值存入到Session中。

此代码的Session存储位置是默认的/var/lib/php/session。当访问http://ip/xxxx.php?ctfs=ctfs后,会在/var/lib/php/session目录下存储Session的值。

Session的文件名为sess_+Sessionid,Sessionid可以通过开发者模式获取。

步骤二:漏洞利用

进入iwebsec靶场。找到文件包含漏洞模块里面的【03-session本地文件包含】并点击

94f89e463f364e14885db89daf884772.png

点进去可以发现有相关的参数提示

c3fb0dc808494c8d9bfe1da97c43df07.png

URL中输入参数,查看结果

761141f9933a4eb8a55372bfcb272d71.png

根据上图的结果可以看出输入的参数值(iwebsec)的内容被存到了SESSION[“username”]里面。在这里可以对输入的参数值进行测试查看是否可以传入特殊符号(比如:<>?!等)。发现传入的参数并没有进行任何的过滤。

那么可以尝试把传入的参数改成php恶意代码,查看是否能被执行。发现页面并没有报错,且下面的信息提示为空。说明传入的参数并没有以文本的形式输出,而是被解析成了代码传入到了SESSION[“username”]里面。

c71576f0d7404c47a0f371d16e53bfb7.png

在该页面点击【f12】查看元素信息,再次访问页面,并找到【网络】下有一条刚刚访问的页面信息,点击左边的加号,找到相应的【cookies】值。展开可以看到PHPSESSID的值。根据PHPSESSID的值可以推出输入的php恶意代码被存到的文件名称(sess_PHPSESSID)

在通常情况下Linux的session的保存路径为:/var/lib/php/session/。Windows的session保存路径为:C:\WINDOWS\Temp或集成环境下的tmp文件夹里。也可以结合文件上传漏洞上传phpinfo的文件,然后再利用文件包含包含phpinfo文件来爆出phpinfo信息更为准确。

知道了session的保存路径以及保存的文件名称之后。可以利用前面的本地文件包含来包含带有恶意代码的session的保存文件,进而执行了传入的恶意代码。



版权声明:本文为Z526209693原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。