php安全代码审计小结(2)

2013 年 6 月 6 日2800

二、函数篇

addslashed()添加反斜杠

stripslashed()去掉反斜杠

get_magic_quotes_gpc() 判断是否开启gpc

expode(".",$array)分割成数组

is_numeric()判断是否为数字

sizeof()判断长度

trim() 去除字符串开头和末尾的空格或其他字符

system() 输出并返回最后一行shell结果。

exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。

passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。

EscapeShellCmd(),把一个字符串中所有可能瞒过Shell而去执行另外一个命令的字符转义。这些字符在Shell中是有特殊含义的,象分号(;),重定向(>)和从文件读入 (<)等。

EscapeShellArg() 。在给定的字符串两边加上单引号,并把字符串中的单引号转义,这样这个字符串就可以安全地作为命令的参数。

用popen()函数打开进程

上面的方法只能简单地执行命令,却不能与命令交互。但有些时候必须向命令输入一些东西,如在增加Linux的系统用户时,要调用su来把当前用户换到root才行,而su命令必须要在命令行上输入root的密码。这种情况下,用上面提到的方法显然是不行的。

popen ()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在PHP3中,对这种句柄只能做单一 的操作模式,要么写,要么读;从PHP4开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则必须调用pclose()函数来关闭 它。

例子1:

/* PHP中如何增加一个系统用户

下面是一段例程,增加一个名字为james的用户,

root密码是 verygood。仅供参考

*/

$sucommand = "su --login root --command";

$useradd = "useradd ";

$rootpasswd = "verygood";

$user = "james";

$user_add = sprintf("%s "%s %s"",$sucommand,$useradd,$user);

$fp = @popen($user_add,"w");

@fputs($fp,$rootpasswd);

@pclose($fp);

require在被包含文件有错误代码时将不再往下执行

include在被包含文件有错误代码时仍然往下执行

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

预定义的字符是:

& (和号) 成为 &

" (双引号) 成为 "

' (单引号) 成为 '

< (小于) 成为 <

> (大于) 成为 >

move_uploaded_file() 函数将上传的文件移动到新位置。

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

对于数组中的每个元素,键名用于变量名,键值用于变量值。

第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时,extract() 函数如何对待这样的冲突。

本函数返回成功设置的变量数目。

语法

extract(array,extract_rules,prefix)

parse_str() 函数把查询字符串解析到变量中. (常见于变量覆盖漏洞)

语法

parse_str(string,array)

参数 描述

string 必需。规定要解析的字符串。

array 可选。规定存储变量的数组名称。该参数指示变量存储到数组中。

针对变量指定攻击

不使用foreach遍历$_GET变量,改用$_GET[(index)]

eval() 函数把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。

如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。

preg_replace 执行一个正则表达式的搜索和替换

/e参数执行代码

内容导航

第 1 页:工具篇 第 2 页:函数篇 第 3 页:漏洞篇 第 4 页:配置篇


原文:php安全代码审计小结(2) 返回网络安全首页

0 0