0x01 PHP file() 函数

file() 函数把整个文件读入一个数组中。

数组中的每个元素都是文件中相应的一行,包括换行符在内。

实例:

<?php
print_r(file("test.txt"));
?>

上面的代码将输出:

Array
(
[0] => Hello World. Testing testing!
[1] => Another day, another line.
[2] => If the array picks up this line,
[3] => then is it a pickup line?
)

0x02PHP print_r() 函数

print_r() 函数用于打印变量,以更容易理解的形式展示。

PHP 版本要求: PHP 4, PHP 5, PHP 7

实例:

<?php
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x','y','z'));
print_r ($a);
?>

输出结果为:

Array
(
[a] => apple
[b] => banana
[c] => Array
(
[0] => x
[1] => y
[2] => z
) )

0x03 php函数system(),exec(),passthru()的区别

php提供了system(),exec(),passthru()这几个函数来调用外部的命令.

区别: 
system() 输出并返回最后一行shell结果。 
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。 
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。 
相同点:都可以获得命令执行的状态码

0x04 php eval函数

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

例如:

eval("echo'hello world';");
上边代码等同于下边的代码:
echo"hello world";

在浏览器中都输出:hello world
1.eval函数的参数的字符串末尾一定要有分号,在最后还要另加一个分号(这个分号是php限制)

2.注意在命令式字符串(包括分号)两边必须要有双引号或者根据需要用单引号。否则报错。
命令式字符串是指:字符串中包括echo、print之类的命令的时候。
如果参数只有一个变量则可以不用。

3.注意单引号,双引号和反斜杠的运用。如果参数中带有变量时,并且变量有赋值操作的话,变量前的$符号钱一定要有\来转义。如果没有赋值操作可以不需要。

@ 放在函数前有屏蔽出错信息的作用。

0x05 PHP file_get_contents() 函数

file_get_contents() 把整个文件读入一个字符串中。

该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。

实例:

<?php
echo file_get_contents("test.txt");
?>

上面的代码将输出:

This is a test file with test text.

容易造成伪协议与文件包含

0x06 PHP的get_defined_functions()函数

列出所有函数

php内置函数和自己定义的所有函数

print_r(get_defined_functions());

0x07 PHP中的array_merge()函数与array+array的区别

在PHP中可以使用array_merge函数和两个数组相加array+array的方式进行数组合并,但两者效果并不相同,下面为大家介绍两者具体的使用区别.

区别如下:

1、当下标为数值时,array_merge()不会覆盖掉原来的值,但array+array合并数组则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖).

2、当下标为字符时,array+array仍然把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉,但array_merge()此时会覆盖掉前面相同键名的值.

例子:

$arr1 = ['PHP', 'apache'];
$arr2 = ['PHP', 'MySQl', 'HTML', 'CSS'];
$mergeArr = array_merge($arr1, $arr2);
$plusArr = $arr1 + $arr2;
var_dump($mergeArr);
var_dump($plusArr);

结果:

$mergeArr:
array (size=6)
0 => string 'PHP' (length=3)
1 => string 'apache' (length=5)
2 => string 'PHP' (length=3)
3 => string 'MySQl' (length=5)
4 => string 'HTML' (length=4)
5 => string 'CSS' (length=3) $plusArr:
array (size=4)
0 => string 'PHP' (length=3)
1 => string 'apache' (length=5)
2 => string 'HTML' (length=4)
3 => string 'CSS' (length=3

0x08 PHP中的include()函数

include()语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中。

<?php include 'filename'; ?>
<?php include("dbconnect.php");
?>

require语句和include的功能是相同的,只是在错误处理方面不一样。

require 会生成致命错误(E_COMPILE_ERROR)并停止脚本。

include 只生成警告(E_WARNING),并且脚本会继续。

容易造成文件包含

0x09 PHP中的die()函数

die() 函数输出一条消息,并退出当前脚本。

该函数是 exit() 函数的别名。

die(status)

0x10 PHP中preg_replace() 函数

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

就是php中的匹配正则的函数

例如

<?php
$string = 'google 123, 456';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = 'runoob ${2},$3';
echo preg_replace($pattern, $replacement, $string);
?>

执行结果如下所示:

runoob 123,456

ctf中可以利用其存在的”/e“漏洞,函数的第一个参数的值为”/(.*)/e“即可造成第二个参数的代码执行。

0x11 PHP中var_dump() 函数

var_dump() 函数用于输出变量的相关信息。

var_dump() 函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

CTF中配合超级全局变量GLOBALS使用,将全局变量里面的结构和值给输出来。

0x12 PHP中strstr()、substr()、str_replace() 函数

strstr() 函数搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE。区分大小写

查找 "world" 在 "Hello world!" 中是否存在,如果是,返回该字符串及后面剩余部分:
<?php
echo strstr("Hello world!","world"); // 输出 world!
?>

substr() 函数返回字符串的一部分。字符串0索引开始,后面的值代表从哪个索引开始截取

从字符串中的索引6截取后面的字符串,即返回 "world":
<?php
echo substr("Hello world",6);
?>

str_replace() 函数替换字符串中的一些字符(区分大小写)。

把字符串 "Hello world!" 中的字符 "world" 替换成 "Peter":
<?php
echo str_replace("world","Peter","Hello world!");
?>
//输出Hello Peter!
这里可以用双写绕过

0x13 PHP中$_SERVER['REQUEST_URI'] 变量

SERVER['REQUEST_URI']:访问此页面所需的 URI 。

例如:http://www.5idev.com/php/index.php/test/foo?username=hbolive

$_SERVER['REQUEST_URI'] 得到:/php/index.php/test/foo?username=hbolive

0x14 PHP中的parse_str() 函数

parse_str() 函数把查询字符串解析到变量中。

<?php
parse_str("name=Peter&age=43");
echo $name."<br>";
echo $age;
?>
//字符串name已经变为变量,且值为Peter,输入为Peter和43

这个函数可造成变量覆盖漏洞,如果前面有一个$name变量,那么用来了这个函数之后,就将以前的$name变量给覆盖了,且值为Peter。

0x14 PHP中的strcmp()函数

strcmp() 函数比较两个字符串,且区分大小写

     - 如果两个字符串相等
< - 如果 string1 小于 string2
> - 如果 string1 大于 string2

这个函数有个漏洞

就是只要一个字符属于数组或其他类型的,就会始终返回0

例如strcmp($st[]="admin",$flag)

0x14 PHP中的sha1()函数

计算字符串的hash值

在ctf中,如果遇到使两个变量的hash值相等,那么把两个变量定义成数组,因为数组的哈希值相等。

例如:bugku中的 各种绕过

0x15 PHP中的unserialize()函数和serialize()函数

serialize()函数是将字符串序列化,而unserialize()则是将序列化的字符反序列化为字符串。

如果要查询某个字符串的序列化字符,可以在本机上敲php代码加上serialize()函数,让其print输出就行。

0x16 parse_url函数

作用:parse_url — 解析 URL,返回其组成部分

parse_url($_SERVER['REQUEST_URI']);

获取请求的url所有的组成部分。

对严重不合格的 URL,parse_url() 可能会返回 FALSE (CTF常用 返回值False 用于逃逸判断)

加入url为:http://127.0.0.1/test/baby.php?id=1&love=flag.php
在test前敲“///”就会匹配为false,这样可以绕过很多对请求变量的正则过滤。
http://127.0.0.1///test/baby.php?id=1&love=flag.php

0x17 parse_str()函数

parse_str() 函数用于把查询字符串解析到变量中,如果没有array 参数,则由该函数设置的变量将覆盖已存在的同名变量。 极度不建议 在没有 array参数的情况下使用此函数,并且在 PHP 7.2 中将废弃不设置参数的行为。此函数没有返回值

@parse_str($id)把查询字符串解析到变量中,没有使用array选项,若有同名变量,将原来的覆盖。这里明显将原来的$a的值给覆盖掉。

这就可能造成了变量覆盖漏洞。

遇到的基础php函数、方法的更多相关文章

  1. Kotlin——基础的函数/方法详解

    对于Kotlin中的函数来说,和JavaScript或者Lua这些语言很像,它有着这些语言的特性.但是也与这些语言就着许多不同之处.或许你更了解Java语言,然而对于Java语言来说,它不是不是闭包这 ...

  2. JAVA基础语法:函数(方法)、类和对象(转载)

    4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...

  3. python基础操作_方法(函数)

    #函数,方法#普通方法def hello(): print('hello')hello()#带形参的方法def hello1(name): print('hello%s'%name)hello1('布 ...

  4. Js基础知识5-函数返回值、函数参数、函数属性、函数方法

    函数返回值 所有函数都有返回值,没有return语句时,默认返回内容为undefined,和其他面向对象的编程语言一样,return语句不会阻止finally子句的执行. function testF ...

  5. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  6. 如何设计PHP业务模块(函数/方法)返回结果的结构?

    如题:如何设计业务模块返回结果的结构? 一个业务函数/方法执行后,对外输出数据的结构通常有以下几种: 1.返回数字,如 成功时返回 0,失败时返回 -1,有的还会用一个全局变量输出错误信息: < ...

  7. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  8. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

  9. Java之--Java语言基础组成—函数

    Java语言基础组成-函数 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的函数,函数 ...

  10. 【2017-03-05】函数基础、函数四种结构、ref和out参数、递归

    一.函数基础 1.函数/方法:非常抽象独立完成某项功能的一个个体 2.函数的作用: 提高代码的重用性提高功能开发的效率提高程序代码的可维护性 3.分类 固定功能函数高度抽象函数 4.函数四要素:输入, ...

随机推荐

  1. VMware vCenter Server6.0安装及群集配置介绍

    在本项目中,将在VMware Workstation 模拟的Windows Server 2008 R2虚拟机中安装VMware vCenter Server ,并且使用vCenter Server捆 ...

  2. sublime text安装与使用记录

    一.安装Sublime Text 3 官网 http://www.sublimetext.com/3 进入官网选择所需版本下载 打开ST3,点击菜单 View -> Show Console,会 ...

  3. Laravel + Serverless Framework 快速创建 CMS 内容管理系统

    今天,为大家带来一篇 Laravel + Serverless Framework 的综合实战,里面信息量有点多,大家仔细看哦- 首先,我来介绍下主要的本地环境吧: Git:不多说,只要会敲代码就应该 ...

  4. 分享8个laravel模型时间戳使用技巧

    默认情况下,Laravel Eloquent 模型默认数据表有 created_at 和 updated_at 两个字段.当 然,我们可以做很多自定义配置,实现很多有趣的功能.下面举例说明. 1. 禁 ...

  5. Winfrom 减少控件重绘闪烁的方法

    Winform控件的双缓冲.控件的双缓冲属性是隐藏的,可以通过反射改变其属性值. lv.GetType().GetProperty("DoubleBuffered", Bindin ...

  6. GitLab Runner

    GitLab Runner是一个开源项目,用于运行你的作业(jobs)并将结果发送回GitLab.它与GitLab CI结合使用,GitLab CI是GitLab用于协调jobs的开源持续集成服务. ...

  7. 安装Matlab R2017a 出现 “弹出DVD1 并插入DVD2” 解决办法超简单

    打开此电脑 找到驱动器虚拟镜像 右击选择弹出 点击另一个文件装载 点击确定即可

  8. h5 中修改input中 placeholder的颜色

    input::-webkit-input-placeholder{ color:blue; } input::-moz-placeholder{ /* Mozilla Firefox 19+ */ c ...

  9. 修改 div 的滚动条的样式

    修改 div 的滚动条的样式 需要用到浏览器专属的伪元素,没有万能的办法,支持的浏览器不是很多. 假设有一个(你已经)设好宽高.定好位的 div, <div class="group- ...

  10. idea 阿波罗(apollo)设置

    项目启动时需要配置环境