【Web安全】PHP安全

一、文件包含漏洞

严格来说,文件包含就是代码注入的一种。代码注入,其原理就是注入一段用户能控制的脚本或代码并让服务器端执行。代码注入的典型代表就是文件包含。文件包含可能会出现在JSP、PHP、ASP等语言中,常见函数如下:

PHP:include()、include_once()、require()、require_once()、fopen()、readfile()……

JSP/Servlet:ava.io.File()、java.io.FileReader()……

ASP:include file 、include virtual……

PHP当使用include()、include_once()、require()、require_once()这四个函数包含一个新文件时,该文件会被当做PHP代码执行,且不在意被包含的文件是什么类型。

想要成功利用文件包含漏洞,需要满足两个条件:
include()等函数通过动态变量的方式引入需要包含的文件
用户能够控制该动态变量

1.1 本地文件包含

可以温习一下dvwa的文件包含

DVWA文件包含漏洞

通常控制参数的值为../../etc/password,代表php将访问/etc/password文件

字符串截断也是文件包含中常用的技巧

%00截断:可以用0字节(\x00)作为字符串结束符

长度截断:目录字符串,在Windows下256字节、Linux下4096字节时会达到最大值,最大值长度之后的字符串会被丢弃

可构造:./././././././././././././abc

/abc

../1/abc/../1/abc/../1/abc

通过../../../这种方式返回上层目录,这种方式又被称为”目录遍历

可以通过不同编码方式来绕过

但是当PHP配置了open_basedir时,会使得目录遍历失效。

open_basedir的作用是限制在某个特定目录下PHP能打开的文件,其作用与safe_mode是否开启无关。

主要注意的是,open_basedir的值是目录的前缀

如果open_basedir = /home/app/aaa

那么以下目录都是合理的

/home/app/aaa
/home/app/aaa123
/home/app/aaabbb

1.2 远程文件包含

如果PHP的配置选项allow_url_include=ON,则include和require函数可以加载远程文件

1.3 本地文件包含的利用技巧

  1. 包含用户上传的文件

如果文件内容包含PHP代码,则这些代码会被include()加载后执行
  1. 包含data://或php://input等伪协议

前提是allow_url_include=ON

可以参考之前的文章:php文件包含常用伪协议

  1. 包含Session文件

PHP默认生成的Session文件往往放在/tmp目录下
/tmp/sess_SESSIONID
  1. 包含日志文件,比如Web Server的access log

服务器一般会往Web Server的access log里记录客户端的请求信息,在error_log里记录出错请求。因此攻击者可以间接地将PHP代码写到日志文件中,在文件包含时,只需要包含日志文件即可。
  1. 包含/proc/self/environ文件

http://www.website.com/view.php?page=../../../../../proc/self/environ
通常在User-Agent里注入PHP代码最终完成攻击
  1. 包含上传的临时文件

  1. 包含其他应用创建的文件,比如数据库文件、缓存文件、应用日志等

二、变量覆盖漏洞

2.1 全局变量覆盖

PHP中使用变量不需要初始化,当register_globals=ON时,变量来源于各个不同的地方,很可能会导致安全问题。

类似的,通过¥GLOBALS获取的变量,也可能导致变量覆盖

2.2 extract()变量覆盖

extract() 函数从数组中将变量导入到当前的符号表。

extract(array,extract_type,prefix)

该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时,extract() 函数如何对待这样的冲突。最常见的两个值是”EXTR_OVERWRITE“和”EXTR_SKIP“。

当值为”EXTR_OVERWRITE“时,如果变量名冲突则覆盖已有变量,值为”EXTR_SKIP“则表示跳过不覆盖。默认是”EXTR_OVERWRITE“。

2.3 遍历初始化变量

常见的一些以遍历的方式释放变量的代码,可能会导致变量覆盖。

$chs = '';
if($_POST && $charset != 'utf-8'){$chs = new Chinese('UTF-8',$charset";foreach($_POST as $key => $value){$$key = $chs->Convert ($value);}unset($chs);

若提交参数chs,则可能覆盖变量”$chs“的值。

2.4 import_request_variavles变量覆盖

bool import_request_variables ( string $types [, string $prefix ] )

import_request_variavles()将GET、POST、Cookie中的变量导入到全局,使用这个函数只需要简单地指定类型即可。第二个参数是为导入的变量添加的前缀,若没有指定,则将覆盖全局变量。

2.5 parse_str()变量覆盖

parse_str(string,array)

该函数用于解析URL的query string,但是当参数值能被用户控制时,可能导致变量覆盖

如果指定了第二个参数,则会将query string中的变量解析后存入该数组变量中。因此在使用该函数时,应该养成指定第二个参数的好习惯

针对覆盖变量的安全建议
1.确保register_globals = OFF
2.熟悉可能造成变量覆盖的函数和方法,检查用户能否控制变量来源
3.养成初始化变量的好习惯

三、代码执行漏洞

3.1 危险函数执行代码

危险函数,例如popen()、system()、passthru()、exec()等都可以执行系统命令

eval()函数也可以执行PHP代码

3.2 文件写入执行代码

可以参考vulhub漏洞复现的文章

CVE-2016-3088 ActiveMQ任意文件写入漏洞

3.3 其他执行代码方式

直接执行代码的函数

PHP:eval()、assert()、system()、exec()、shell_exec()、passthru()、escapeshellcmd()、pcntl_exec()等

文件包含函数

PHP:include()、include_once()、require()、require_once()

本地文件写入函数

file_put_contents()、fwrite()、fputs()等

preg_replace()代码执行

如果是/e模式,则允许代码执行(也可能通过%00截断注入/e)
可参考 Thinkphp 2.x 任意代码执行的漏洞复现: Thinkphp 2.x 任意代码执行

动态函数执行

调用函数直接导致代码执行,create_function()也具有此能力

Curly Syntax

PHP的Curly Syntax也能导致代码执行,它将执行{……}间的代码,并将结果替换回去
如:
<?php
$var = "I was innocent until ${'ls'} appeared here";
?>
ls命令将列出本地目录的文件并将结果返回

回调函数执行代码

很多函数都可以执行回调函数,当回调函数用户可控时,将导致代码执行

unserialize()导致代码执行

unserialize()就是反序列化函数,它能将序列化的数据重新映射为PHP变量。但是unserialize()在执行时如果定义了__destruct()函数或wakeup()函数,这两个函数将执行。
unserialize()代码执行有两个条件,一是 unserialize()的参数用户可控,这样可以构造出需要反序列化的数据结构;二是 存在__destruct()函数或wakeup()函数,这两个函数决定执行的代码。

四、定制安全的PHP环境

推荐php.ini中一些相关安全参数的配置

  • reguster_globals=OFF

  • open_basedir在设置目录时应该在最后加上”/",否则会被认为是前缀

  • allow_url_include=OFF

  • allow_uel_fopen=OFF

  • display_errors=OFF

  • log_errors=ON

  • magic_quotes_gpc=OFF

  • cgi.fix_pathinfo=0

  • session.cookie_httponly=1

  • session.cookie_secure=1

  • ……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/252436.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

vim插件管理工具vundle安装与配置

目录 1 下载vundle2 配置3 安装插件4 关于代码补全 1 下载vundle 默认下载到~/.vim/bundle/vundle目录下 git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle2 配置 在.vimrc 中添加bundle的配置 注意&#xff0c;.vimrc是自己在home目录下创建&#xff…

VIM插件管理工具Vundle安装

Vundle安装 软件环境&#xff1a;WIN7 32bit GVIM 1.安装git 除PATH环境变量设置如图以外&#xff0c;其它选项默认&#xff1a; 2.添加curl.cmd&#xff0c;位置为C:\Program Files\Git\cmd&#xff0c;假设git安装在C:\Program Files\Git 3.修改vimrc 4.下载vundle。git clo…

使用Vundle管理Vim插件

几种管理插件 Vim 的插件管理工具有蛮多&#xff0c;比如&#xff1a; Vundle vim-addon-manager vpathogen.vim vvundle vvimana Vim-addon-manager 和 vimana 的对比&#xff0c;参见Vim的插件管理工具 我最会选择了 Vundle&#xff0c;通过子目录管理插件&#xff0c;支持…

Vundle使用帮助

关于 Vundle 是 Vim bundle 的简称,是一个 Vim 插件管理器. Vundle 允许你做… 同时在.vimrc中跟踪和管理插件安装特定格式的插件(a.k.a. scripts/bundle)更新特定格式插件通过插件名称搜索Vim scripts中的插件清理未使用的插件可以通过单一按键完成以上操作,详见interactiv…

vim 插件vundle中Plugin和Bundle的区别

参考博客&#xff1a;https://segmentfault.com/q/1010000010384766 目前vundle正在改变&#xff0c;版本不同&#xff0c;使用的命令就不同&#xff0c; 现在正在改变&#xff0c;借口正在改变&#xff0c;可以看到&#xff0c;名字已经改成Vundle.vim&#xff0c;不再是之前…

Vim+Vundle+YouCompleteMe

准备 &#xff08;1&#xff09; YouCompleteMe插件要求Vim 版本在7.3.584及以上&#xff0c;而Ubuntu12.04源中的Vim已经比较老了&#xff0c;所以需要编译源码手动更新VIM的版本。 &#xff08;2&#xff09;Vundle 是一个新生代vim插件管理器&#xff0c;使用git进行插件安装…

Vundle的安装与使用

作为小白用户&#xff0c;记录一下自己在window7下的安装过程问题&#xff0c;github和vim以前已经安装过了&#xff0c;可以参考其他文章。 1. 安装Vundel: 2. 设置Curl 在github下的bin文件夹&#xff0c;创建curl.cmd文件&#xff1a; 内容为&#xff1a; rem Do not use…

装机软件搜狗拼音输入法v11.5.0.5352去广告精简优化版

分享一个WIN10常用的搜狗拼音输入法软件&#xff0c;搜狗拼音输入法去广告精简优化版&#xff0c;绿色无广告&#xff0c;支持工具箱扩展。 https://url06.ctfile.com/f/18418706-528416668-049556 &#xff08;访问密码&#xff1a;7860&#xff09;

安卓微商助手高级版V2.4.6 群发多开检测僵尸粉等功能_海量微商工具

简介&#xff1a; 微商助手拥有海量的微商工具&#xff0c;微商助手是微商、群发、拓宽人脉的营销神器&#xff0c;微商助手有群发消息图片&#xff0c;让你群发消息推广快人一步&#xff0c;严格按照微信官方使用规则操作&#xff0c;基于安全稳定的情况下&#xff0c;为微商…

【数据恢复】【傲梅分区助手】

1. 问题起因 https://blog.csdn.net/m0_52010566/article/details/124058017 在第4步错误删除分区 结果丢失下面分区&#xff1a; 2. 解决方案 下载傲梅分区助手绿色版 https://www.disktool.cn/download.html 3. 恢复分区 4. 完成恢复

中国电信助手

免费使用,禁止买卖,仅限用于学习和研究目的&#xff1b;不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。您必须在下载后的24个小时之内&#xff0c;从您的电脑中彻底删除上述内容。 中国电信助手,每日签到(随机金豆),每日喂食宠物.每日登录奖励领取…

(首发)SixTool多功能代挂助手

功能&#xff1a; SixTool一款多功能的云任务程序网易云(每日签到&#xff0c;每日云贝&#xff0c;打卡300首歌&#xff0c;音乐人任务)wx运动(指定步数范围&#xff09;哔哩(视频直播签到&#xff0c;每日观看视频&#xff0c;投币&#xff0c; 漫画签到&#xff0c;分享视频…

微信社群管家推荐使用它,专业社群运营管理助手!

文章开篇&#xff0c;我们来做个小调查!你觉得微信社群管理最头疼的事情是什么? A 发广告的太多&#xff0c;群主只有 1 个&#xff0c;踢不过来? B 群里老问重复的问题&#xff0c;回答问题太耗时 C 群里进新人没有及时欢迎&#xff0c;新人宝宝难留存 D 聊天记录看不到&…

百旺助手

《百旺助手》是一款专门针对百旺税控发票开票软件(税控盘版)的辅助软件&#xff0c;支持增值税专用发票、增值税普通发票&#xff0c;货物运输发票&#xff0c;机动车票等所有发票信息的抽取采集&#xff0c;及客户信息&#xff0c;商品信息等的一键备份导入&#xff0c;支持一…

小蔡电脑助手3.0新版全新发布上线

小蔡电脑助手3.0新版全新发布上线啦 源码下载地址&#xff1a;仿360安全卫士-Windows电脑助手软件-小蔡电脑助手3.0源码-桌面系统文档类资源-CSDN下载 小蔡电脑助手是一款集多种功能为一体的&#xff0c;帮助您方便日常系统优化加速、清理&#xff0c;学习工作、生活网购的工具…

win10连接android手机助手下载,完美win10手机助手-Win10手机助手v1.0.1 官方免费版下载_飞翔下载...

飞翔小编非常喜欢研究一些手机系统&#xff0c;虽说用的Iphone&#xff0c;但是对win10的系统很感兴趣啊&#xff0c;所以特意买了个小米4刷win10系统玩。。APK转制APPX格式Win10手机直装包。尽情享用安卓百万级应用游戏。干净简洁的界面&#xff0c;一键式无脑操作&#xff0c…

电脑软件推荐【含软件链接】:压缩,插件,截屏,录制,办公,电脑防护与修复,磁盘清理,软件卸载......

文章目录 0.写在前面1.解压、压缩文件 - Bandizip1.1 :triangular_flag_on_post: Bandizip 介绍1.2 :speech_balloon: 有话说 2.社交应用 - QQ、WeChat2.1 :triangular_flag_on_post: QQ 介绍2.2 :triangular_flag_on_post: WeChat 介绍2.3 :speech_balloon: 有话说 3.浏览器 -…

微信群管理助手

微信群管理软件现在有很多产品&#xff0c;功能宣传也大差不差&#xff0c;可以根据自己的需求来进行选择 推荐webot社群助手&#xff0c;这是一个面向个微使用的社群管理工具 功能包括智能群管理、客户管理、朋友圈管理、营销管理、话术管理等几大模块。 一、WeBot社群助手…

东华助手 v1.6.5

东华助手是一款专为东华人设计的手机应用&#xff0c;通过它可快捷获取学校新闻、教务通知、图书馆藏、讲座安排等服务信息&#xff0c;绑定校内账号后还能轻松查询本人成绩、绩点、课表、考场、图书借阅、晨跑等信息&#xff0c;并能及时接收重要信息推送。未来将进一步完善应…

搜狗浏览器如何设置截屏快捷键?

搜狗浏览器如何设置截屏快捷键&#xff1f;