代码审计

代码审计工具: Seay RIPS

php配置常量 含义
PHP_INI_USER 该配置项可在用户的PHP脚本或者windows注册表配置
PHP_INI_PERDIR 该配置项可在php.ini .htaccess 或者 httpd.conf中设置
PHP_INI_SYSTEM 改配置项可在php.ini 或者httpd.conf中设置
PHP_INI_ALL 该配置项可在任何地方配置
php.ini only 该配置项仅可在php.ini中配置

PHP安全配置

PHP 安全配置多达百项,这里只列出和安全相关的配置项。

一、代码审计基础

1. register_globals(全局变量注册开关)

该选项设置为ON的情况下,会直接把GET、POST等方式传递的参数注册为全局变量并初始化为参数对应的值,使得提交的参数可以直接在脚本中使用。

register_globals 在PHP版本小于等于4.2.3版本时设置为PHP_INI_ALL,从PHP5.3.0起都被废弃,不推荐使用,在PHP5.4.0中移除了该选项。

php常见漏洞分析

目录绕过技巧

1.若存在字符检测,如strstr函数等,可以使用../http/../来绕过

其中http是strstr所检测字符

  1. ../ 效果等同于 ..//////

正则绕过技巧

在做一个比赛题目,需要绕过preg_match函数。

代码:

1
2
3
4
5
6
7
8
<?php
function is_php($data){
return preg_match('/<\?.*[(`;?>].*/is', $data);
}

if(!is_php($input)) {
// fwrite($f, $input); ...
}

正则匹配进行回溯过程的最大长度限制为100W,因此 构造 数据+ x*1000000可以绕过使正则匹配失效。

修复方法 使用 ===0 来对正则匹配的结果进行判断k


file(“./flag.php”) 读取文件
print_r() 输出变量
GLOBALS 全局变量!
php://filter/read/convert.base64-encode/resource=index.php

PHP超全局变量

$GLOBALS

$GLOBALS : 引用全局作用域中可用的全部变量

举例:

1
2
3
4
5
6
7
8
9
10
<?php
function test() {
$foo = "local variable";
echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
echo '$foo in current scope: ' . $foo . "\n";
}
$foo = "Example content";
test();
// 通过 $GLOBALS 可以访问之前已经定义的全局变量。
?>

PHP简介

问题1:php能做什么

PHP主要用于以下3个领域:

  • 服务端脚本 (主要)
  • 命令行脚本(执行shell脚本等)
  • 编写桌面应用程序

对于编写桌面应用程序,PHP可能不是最适合的一门语言,但若是用户非常精通PHP脚本语言,并希望在客户端应用程序中使用PHP的一些高级特性,可以利用PHP-GTK 来编写这些程序。

注:PHP从5.0版本开始支持面向对象语言开发。

PHP 最强大最显著的特性之一,是它支持很大范围的数据库。使用任何针对某数据库的扩展(例如 mysql)编写数据库支持的网页非常简单,或者使用抽象层如 PDO,或者通过 ODBC 扩展连接到任何支持 ODBC 标准的数据库。其它一些数据库也可能会用 cURL 或者 sockets,例如 CouchDB。