SlideShare a Scribd company logo
重燃PHP安全之火
 作者:王文群
 联系方式:wwqwwq1991@gmail.com
目录
 一.前言
 二.php.ini的配置
 三.magic_quotes_gpc的隐患
 四.解码函数造成的防注入失效
 五.变量覆盖
 六.变量本身的key
 七.一些危险的函数
 八.不可忽略的细节
一.前言
 在许多人看来搞脚本的只是用啊D扫个点传个shell而已,但
这种情况已经很少见了,随着国内web代码审计水平的提
高,站长们开始放心的使用各种整站系统,一时感觉web从
此远离危险,许多脚本爱好者也愈发感到这门技术的枯燥,
今天的这篇文章源自于很久以前看的幻影旅团写的php高级
代码审计技巧,加上自己的一些感悟,总结了大牛们探索出
来的挖掘php漏洞的一些新视角,一些细节。本文将从php.
ini的配置,魔术引号带来的安全隐患,解码函数造成的防注
入失效,变量覆盖,变量本身的key等几个方面提供一些挖
掘php代码漏洞的思路,希望能给大家带来些灵感。
二.php.ini的配置
 1.1 背景知识:
 php.ini是php的配置文件,包涵了许多php的
运行设置,在脚本中我们可用ini_set,
ini_get,,ini_get_all,int_restore等函数对php.
ini进行读取和设定.下面将介绍一些可能导致
安全问题的参数:
 1.2 short_open_tag
 1)该选项用来设定php是否支持<? ?>这样的
缩写形式:
 2)首先介绍一下apache日志包涵漏洞,该漏洞由
include函数参数未过滤所引起的本地包含漏洞和
short_open_tag=on导致,在apache的日志中记录
了服务器所接受的url请求,这样我们就可以构造一
个恶意的url请求再配合include本地包含漏洞写入我
们的一句话.(所谓的一句话就是这样一段php代
码:<?php eval($_POST[cmd])?>),但问题出现
了,语句中的空格经过url编码后变为%20,这样服
务器就不能解析我们的一句话了,但若是
short_open_tag开启的话,我们可以这样构造一句
话:<?/**/eval($_POST[cmd])?>,如果像这样构造
一句话会报错: <?php/**/eval($_POST[cmd])?>,
下面请看测试过程:
 第一步提交包涵一句话的url:
 第二步构造一个包涵漏洞的php文件:
 第三布利用这个存在包涵漏洞的php文件写入shell:
 1.3 register_globals
 1)该选项用来设定是否开启自动注册全局变
量
 2)该选项的开启会带来许多隐患,这些隐患
主要是由于为初始化变量的值所引发的,下
面通过一个测试代码来看看:
 1.4 display_error和error_reporting
 这两个选项用来设置错误提示是否开启和错
误提示的等级,通常在开发的过程中可以将
error_reporting设置为e_all,这样方便调试。
但在站点配置时,最好将错误信息屏蔽,可
以这样设置display_error=Off,error_reporting
(0),这样攻击者便无法从错误信息中获取有
用的信息。
设置是否允许远程包含文件allow_url_fopen
设置是否显示php版本信息expose_php
设置禁止执行的函数disable_functions
指定php脚本所能访问的目
录,限制shell
open_basedir
安全模式,对命令执行,文件
操作函数等有影响
Safe_mode
以下是其它一些配置选项:
三.magic_quotes_gpc的隐患
 2.1 双字节编码漏洞
 在GBK编码中,汉字是用两个字节来表示
的。
 例如“中”字编码后为%D6%D0,在开启GPC
后’被转义为’,的URL编码为%5C,这样我们
只需要在参数前随便加上一个%??,那服务器
便认为这是一个中文,这样就被成功的编码
入中文了。我们的’,也就逃脱了被转义的命
运。
 2.2 引入‘’后所带来的问题
 1)可造成对mysql数据库的二次攻击。
 在gpc开启后,*’变成*’,但是mysql的转义字
符,存入数据库时又变为*’,这样便将’带入
了数据库,若是程序员过分信任数据库中的
数据,对于从数据库中取出的数据并未做任
何过滤,那么这个单引号便可以为我们做很
多事:像闭合前一个单引号进行注入,在写
文件函数中写入一句话等
 2),这个符号本身也是个极具作用的符号,
像windows中目录的跳转,倘若在”
 这样的情况前再加上一个,便得到了以前的
符号,这又会引发一些列其他的安全问题
 2.3 被魔术引号所遗忘的地方
 1) $_SERVER变量
 2) getenv()得到的变量(使用类
似$_SERVER变量)
 3) $HTTP_RAW_POST_DATA与PHP输
入、输出流
 4) 数据库操作容易忘记'的地方如:in()
/limit/order by/group by
四.解码函数造成的防注入失效
 防注入程序的出现一定程度上缓解了无站不
可注的尴尬情景,但随着变量在程序中层层
传递,部分变量被“忽略”了,请看测试代
码:
 类似的编码函数还有:
编码 URL 字符串urlencode
解码已编码的 URL 字符
串
urldecode
按照 RFC 1738 对 URL
进行编码
rawurlencode
对已编码的 URL 字符串
进行解码
rawurldecode
使用 MIME base64 对
数据进行编码
base64_encode
对使用 MIME base64
编码的数据进行解码
base64_decode
五.变量覆盖
 这个问题与php.ini中register_globals=off所带来问题类似,
变量覆盖问题可能有以下两种情况造成:
 4.1代码的逻辑问题
 <?php
 //var.php?a=fuck
 $a='hi';
 foreach($_GET as $key => $value) {
 $$key = $value;
 }
 print $a;
 ?>
 这样a的值便成了fuck
 4.2 函数所带来的变量覆盖问题
 下面实例是由estract函数所引发的变量覆盖
问题:
 类似存在覆盖变量隐患的函数还有:
 parse_str(),mb_parse_str(),
import_request_variables()等
六.变量本身的key
 在web安全人员千方百计的封堵来自于value
的危险时,却忽略了变量本身的key也同样极
其危险。请看如下代码:
 倘若我们这样提交URL:
 这样变引发了一个xss,倘若在include或是其
他执行代码的函数中还有更大的发挥余地
七.一些危险的函数
 1.文件操作类函数:
 fopen(),file(),readfile(),openfile()等对于这些函数所
引用的参数一定要严加过滤,稍有不慎便可能造成
源码泄露甚至直接写入shell.
 2.执行命令类函数:
 exec(),system()shell_exec()passthru()等函数能直
接执行系统命令,这个杀伤力是毋庸置疑的
 3.执行代码类函数:
 eval(),preg_replace() 等函数能执行php代码
 在php中容易导致安全问题的函数还有一下这些:array_map()
usort(), uasort(), uksort()
array_filter()
array_reduce()
array_diff_uassoc(), array_diff_ukey()
array_udiff(), array_udiff_assoc(), array_udiff_uassoc()
array_intersect_assoc(), array_intersect_uassoc()
array_uintersect(), array_uintersect_assoc(), array_uintersect_uassoc()
array_walk(), array_walk_recursive()
xml_set_character_data_handler()
xml_set_default_handler()
xml_set_element_handler()
xml_set_end_namespace_decl_handler()
xml_set_external_entity_ref_handler()
xml_set_notation_decl_handler()
xml_set_processing_instruction_handler()
xml_set_start_namespace_decl_handler()
xml_set_unparsed_entity_decl_handler()
stream_filter_register()
set_error_handler()
register_shutdown_function()
register_tick_function()
八.不可忽略的细节
 1. apache服务器的解析漏洞:1.php.rar被当
成1.php解析,前提rar并未包括在mime types
中
 2. 反引号也能执行命令:“`”
 3. 分号作为php语句的分隔符,改变程序执
行流程
 4. globals[]与global的区别
总结
 看了这些代码审计的新思路,我们是否应该
思考如何扩充 属于自己的审计字典呢,我想
大概从一下几方面努力吧:1.多阅读他人发掘
的漏洞和EXP 2.多阅读php手册,扎实的基础
才是根本 3.逆向php的实现代码 4.和开发者
多交流。我想这样或许才能真正做好know it
then hack it.
Phpsecurity.ppt

More Related Content

PDF
MakerBoard: MT7688 Emulator
PPTX
深入PHP内核之路
PPTX
20220316 laravel I
PDF
App house
PDF
Asp.net mvc 從無到有 -twMVC#2
PPTX
猴子也能懂的Node.js
PDF
輕鬆上手Asp.net web api 2.1-twMVC#14
PDF
動手打造 application framework-twMVC#15
MakerBoard: MT7688 Emulator
深入PHP内核之路
20220316 laravel I
App house
Asp.net mvc 從無到有 -twMVC#2
猴子也能懂的Node.js
輕鬆上手Asp.net web api 2.1-twMVC#14
動手打造 application framework-twMVC#15

Viewers also liked (20)

PDF
F**k Gfw
PDF
Android dev o_auth
PDF
开源沙龙第一期 个人知识管理2
PDF
Vpn intro by dongshuzhao
PDF
开源沙龙第一期 Python intro
KEY
How GFW work
PDF
Hack Your Home Routers
PPTX
PPT
Tutorial para el uso de Biblioteca : Ingreso
PPS
PPT
Gure gorputza
PPT
Cardiovascular disorders epidemiology
PPT
Herrialdeen aurkezpena mo
PDF
Nota informativa redes
PDF
Thanh toan tien quoc khanh
PPS
04 prim. pedra dispensari 13-02-10
DOCX
Kidung kusumawicritra
PPSX
Atividades realizadas
PPT
Miniaturas militares
PDF
Dibujandoconluz
F**k Gfw
Android dev o_auth
开源沙龙第一期 个人知识管理2
Vpn intro by dongshuzhao
开源沙龙第一期 Python intro
How GFW work
Hack Your Home Routers
Tutorial para el uso de Biblioteca : Ingreso
Gure gorputza
Cardiovascular disorders epidemiology
Herrialdeen aurkezpena mo
Nota informativa redes
Thanh toan tien quoc khanh
04 prim. pedra dispensari 13-02-10
Kidung kusumawicritra
Atividades realizadas
Miniaturas militares
Dibujandoconluz
Ad

Similar to Phpsecurity.ppt (20)

DOC
高级PHP应用程序漏洞审核技术
PDF
Node.js 進攻桌面開發
PDF
Non-MVC Web Framework
PPT
富文本编辑器在互联网上的应用
PPT
课题二:Node.js那些事儿
PPT
漫谈php和java
PDF
Phalcon the fastest php framework 阿土伯
PDF
Phalcon phpconftw2012
PPTX
NODEjs Lesson1
PPT
Rails 炸機實務
PDF
凌波微步:wagon + VS Code 的輕功哲學
PDF
[PHP 也有 Day #64] PHP 升級指南
PDF
大话Php之性能
PPTX
Node.js长连接开发实践
PPTX
Docker Compose
PPTX
Island arch
PPTX
Nodejs部门分享
PDF
Clipper@datacon.2019.tw
PPTX
WebConf 2013「Best Practices - The Upload」
PDF
钱宝坤:多浏览器集成的JavaScript单元测试工具
高级PHP应用程序漏洞审核技术
Node.js 進攻桌面開發
Non-MVC Web Framework
富文本编辑器在互联网上的应用
课题二:Node.js那些事儿
漫谈php和java
Phalcon the fastest php framework 阿土伯
Phalcon phpconftw2012
NODEjs Lesson1
Rails 炸機實務
凌波微步:wagon + VS Code 的輕功哲學
[PHP 也有 Day #64] PHP 升級指南
大话Php之性能
Node.js长连接开发实践
Docker Compose
Island arch
Nodejs部门分享
Clipper@datacon.2019.tw
WebConf 2013「Best Practices - The Upload」
钱宝坤:多浏览器集成的JavaScript单元测试工具
Ad

Phpsecurity.ppt