主页 > 网络知识 > 从浅入深学习PHP文件包含(2)

从浅入深学习PHP文件包含(2)

 

从浅入深学习PHP文件包含

 

Linux下只需不断重复./即可

第三种方法:zip/phar协议

测试代码:

<?php if(isset($_GET['file'])){ $file = $_GET['file']; include($file . ".php"); }else{ highlight_file(__FILE__); } ?> zip://文件路径/zip文件名称#压缩包内的文件名称 (使用时注意将#号进行URL编码) phar://文件路径/phar文件名称/phar内的文件名称 phar://协议与zip://类似,同样可以访问zip格式压缩包内容

 

从浅入深学习PHP文件包含

 

0x02:Session文件包含漏洞

前提条件:PHP版本>5.4.0、配置项:session.upload_progress.enabled的值为On

示例代码如下:

 

从浅入深学习PHP文件包含

 

利用session.upload_progress进行文件包含,在php5.4之后添加了这个功能

 

从浅入深学习PHP文件包含

 

再来看几个php.ini的默认选项

session.upload_progress.enabled = on 表示upload_progress功能开始,即当浏览器向服务器上传一个文件时,php将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中 session.upload_progress.cleanup = on 表示当文件上传结束后,php将会立即清空对应session文件中的内容 session.upload_progress.prefix = "upload_progress_" session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS" #表示为session中的键名 session.use_strict_mode=off #表示对Cookie中sessionid可控

上面几个默认选项,可能最后两个稍微有点不好理解,其实官方已经举出了对应的例子,如:

// PHPSESSION = Sn0w <form action="upload.php" method="POST" enctype="multipart/form-data"> <input type="hidden" value="123" /> <input type="file" /> <input type="file" /> <input type="submit" /> </form>

在session.upload_``progress.name='PHP_SESSION_UPLOAD_PROGRESS'的条件下,上传文件,便会在session['upload_progress_123']中储存一些本次上传相关的信息,储存在/tmp/sess_Sn0w

 

从浅入深学习PHP文件包含

 

通过上图和几个默认选项的有关介绍就想是否可以利用session.upload_progress来写入恶意语句,然后进行包含文件,但前提是需要知道session的存储位置

这就需要先了解一下PHP中session的存储机制

php中的session中的内容并不是存储在内存中,而是以文件的方式进行存储,存储方式是由配置项session.save_handler来进行确定的,默认便是以文件的方式进行存储,存储文件的名字便是由sess_sessionid来进行命名的,文件的内容便是session值序列化之后的内容。至于存储路径便是由配置项session.save_path来进行决定的。

一般session的存储路径都不会怎么去改,默认的便是:

linux: /tmp 或 /var/lib/php/session Windows: C:WINDOWSTemp

存储路径知道了,但是还是有一个问题,便是代码中没有session_start()函数,怎么样创建出session文件那,其实如果配置项session.auto_start=On 是打开的,那么PHP在接收请求的时候便会自动化Session,不再需要执行该函数,但默认都是关闭的,在session中还有一个默认选项,便是上面提到的session.use_strict_mode默认值是0,用户可以自己定义SessionID。如:

Cookie中设置: PHPSESSID=Sn0w PHP便会在服务器上创建一个文件(默认路径) /tmp/sess_Sn0w
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!