polarctf session文件包含
polarctf session文件包含
Session文件包含漏洞
当可以获取session文件路径并且session文件的内容可控的的时候,就可以通过包含session文件进行攻击
利用条件
session文件包含的利用条件有两个:
- Session的存储位置可以获取
- Session的内容可控
一般通过以下两种方式获取session的存储位置:
通过phpinfo的信息获取session的存储位置。
通过phpinfo的信息获取session.save_path通过猜测默认的session存储位置进行尝试
通常Linux中的Session的默认存储位置在/var/lib/php/session目录下temp/session1
2
3
4
5
6
7
8
9
10
11
### 示例分析
session文件包含代码如下
```php
session_start();
$ctfs=$_GET['ctfs'];
$_SESSION['username']=$ctfs
此代码可以通过GET型的ctfs参数传入。PHP代码将会获取的值存入到Session中。
攻击者可以利用ctfs参数将恶意代码写入到session文件中,然后在利用文件包含漏洞包含此session文件,向系统中传递恶意代码。
漏洞分析
上面的代码满足Session文件包含的两个要求
- PHP代码将会获取ctfs变量的值存入到session中
- Session的默认 存储位置是/var/lib/php/session
访问URL:http://www.abc.com/xxx/session.php?ctfs=a 会在/var/lib/php/session目录下降ctfs传入的值存储到session中
Session的文件名以sess_开头,后跟Sessionid,Sessionid可以通过开发者模式获取:
单击右键——检查——存储——Cookie——PHPSESSID 就可以找到内容
假设通过开发者模式获取到的sessionid的值为hufh7hsdf392eurh4,所以session的文件名为sess_hufh7hsdf392eurh4
漏洞利用
通过上面的分析,可以得知,向ctfs参数传入的内容会存储到session文件中。
如果存在本地文件包含漏洞,就可以通过ctfs写入恶意代码到Session文件当中去,然后通过文件包含漏洞执行getshell
例如:访问代码http://www.abc.com/xxx/session.php?ctfs=<?php phpinfo();?>后,会在/var/lib/php/session目录下降ctfs的值写入session文件
session文件的内容为:username|s:18:"<?php phpinfo();?>".
攻击步骤
- 将恶意代码写入session文件
- 攻击者可以通过PHPinfo或者猜测到session存放的位置
- 通过开发者模式可以获得文件名称
- 通过本地文件包含漏洞可以解析session文件达到攻击的目的
比如:http://www.abc.com/xxx/file.php?file=../../var/lib/php/session/sess_7sdfysdfywy9323cew2
✔PHP文件包含漏洞全面总结 - Zeker62 - 博客园
wp

利用php伪协议读取action.php

base64解码得到源码,跟session文件包含实例几乎一样
PHP代码将会获取POST型name变量的值存入到session中
利用开发者模式找到了session的值 msd07aqckf2mag1um8qtjapj50

访问代码http://www.abc.com/temp/sess_xxxxx?后,会在/session目录下将name的值写入session文件 ,向系统中传递恶意代码。

1 | |
