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. Vue 路由&组件懒加载(按需加载)

    当打包构建应用时,Javascript 包会变得非常大,影响页面加载速度.使用Vue路由懒加载和组件懒加载可以提升页面加载速度,减少白屏时间,提升用户体验. 用法有如下三种:(路由懒加载与组件懒加载用 ...

  2. 解决MySql客户端秒退(找不到my.ini)

    问题说明(环境:windows7,MySql8.0) 今天安装好MySql后启动MySql服务-->启动服务都失败的就不要往下看了,自行百度解决. 打开客户端秒退,但在cmd中是可以使用数据库的 ...

  3. opencv —— convexHull 寻找并绘制凸包

    凸包的定义: 包含点集 S 所有点的最小凸多边形称为凸包. 凸包绘制原理:Graham 扫描法 首先选择 y 方向上最低的点作为起始点 p0. 然后以 p0 为原点,建立极坐标系,做逆时针极坐标扫描, ...

  4. JavaWeb学生公寓(宿舍)管理系统源码

    开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+MySQL数据库 运行效果图 源码及原文链接:https://javadao.xyz/forum.php?mod ...

  5. HTML连载67-手风琴效果、2D转换模块

    一.手风琴效果 <style> *{ margin:0; padding:0; } ul{ width: 960px; height: 300px; margin:100px auto; ...

  6. springboot整合WebService简单版

    一.什么是webservice 关于webservice的介绍摘自百度百科,上面的介绍很详细.(链接:https://baike.baidu.com/item/Web%20Service/121503 ...

  7. imx6ull+debian10 构建静态qt交叉编译环境

    # PC:Ubuntu18.04# GCC: arm-linux-gnueabihf- 7.4.0# 开发板:# imx6ull+debian10(文件系统为野火提供的) # 此处需要编译的是带gst ...

  8. Node.js文档-path

    用于处理文件路径和目录路径 引入 const path = require('path') path.extname(path) 返回扩展名.从最后一次出现 . 字符到字符串结束. const pat ...

  9. xshell远程打开Linux图形界面加速方法:

    https://blog.csdn.net/zyy247796143/article/details/82143832 服务器安装: yum install Xvfb    :在安装完谷歌浏览器后,安 ...

  10. 复习promise---node

    promise这个东西,我都不知道见过多少回了!,非常重要,这里在回忆一遍 发现问题 const fs = require('fs') fs.readFile('./data/1.txt', (err ...