CTF常用的PHP函数

记录一些ctf中的常见的PHP函数

$-GET

在 PHP 中,预定义的 $_GET 变量用于收集来自 method=”get” 的表单中的值。

is_numeric()

函数用于检测变量是否为数字或数字字符串。

isset()

isset()用于检测变量是否设置。

var_dump()

var_dump()方法是判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型.此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

var_dump里面的变量必须是存在的,如果变量存在但值是空的就会返回false;没有变量则返回NULL.他自己就有输出的功能。不必加其他的输出函数。

ereg()

ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字母的字符是大小写敏感的。

strpos()

strpos() 函数用于在字符串内查找一个字符或一段指定的文本。

如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。

die()

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

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

语法

die(status)

status 必需。规定在退出脚本之前写入的消息或状态号。状态号不会被写入输出。

如果 status 是字符串,则该函数会在退出前输出字符串。

如果 status 是整数,这个值会被用作退出状态。退出状态的值在 0 至 254 之间。退出状态 255 由 PHP 保留,不会被使用。状态 0 用于成功地终止程序。

md5()

函数计算字符串的 MD5 散列。

eval()

将字符串当做PHP代码执行,其中字符串要以 ; 结尾,且其语句要符合PHP语法

如:

<?php
$a = 'echo "100"."haha";';
eval($a);
?>

运行结果:

100haha

gzinflate(base64_decode())

经过base64和gzinflate加密

LFI

文件包含漏洞:通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入

PHP有include和require语句,可以将其他文件引入到当前文件并执行(其他文件可为其他类型,与文件后缀无关,如包含‘1.txt’文件时,会将其中的代码当做PHP运行)

include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:

当引入的文件中有错误时:
require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。

error_reporting()

规定不同的错误报告级别;error_reporting(0)为关闭错误报告

例如,/test/包含.php 文件内容:

<?php
error_reporting(0);
if($_GET['file'])
    include $_GET['file']
?>

在浏览器输入url

http://127.0.0.1/test/包含.php?file=send.php

即使不存在这个文件也不会报错,页面将显示空白

将 error_reporting(0) 注释掉后,页面正常显示错误

show_source()

本函数通过使用 PHP 语法高亮程序中定义的颜色,输出或返回包含在 filename 中的代码的语法高亮版本。

highlight_file()同上

FILE

FILE返回文件所在的绝对路径且有文件自身的名字在内

echo __FILE__ #返回当前文件路径及自身文件名
show_source(__FILE__) #使当前文件代码高亮并输出

$_REQUEST[]

用于接收表单数据,具有$_POST[]与$_GET[]功能

@

PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉

字符串函数

参考链接

http://www.w3school.com.cn/php/php_ref_string.asp

stristr()

函数搜索字符串在另一字符串中的第一次出现,并返回字符串的剩余部分:

stristr(string,search,before_search)

string    必需;规定被搜索的字符串。
search    必需;规定要搜索的字符串。

如果该参数是数字,则搜索匹配该数字对应的 ASCII 值的字符。

before_search    可选;默认值为 "false" 的布尔值。
如果设置为 "true",它将返回 search 参数第一次出现之前的字符串部分。

该函数对大小写不敏感

strstr()

函数搜索字符串在另一字符串中的第一次出现,并返回字符串的剩余部分

该函数对大小写敏感

preg_match()

用于进行正则表达式匹配,成功返回1,否则返回0

正则表达式详解参考:

https://www.cnblogs.com/hellohell/p/5718319.html
https://www.cnblogs.com/yafei236/p/4168290.html

file_get_contents()

函数把整个文件读入一个字符串中

trim()

函数移除字符串两侧的空白字符或其他预定义字符

格式:

trim(string,charlist)

参数:

string    必需。规定要检查的字符串。

charlist  可选。规定从字符串中删除哪些字符。如果被省略,则移除以下所有字符:

"\0" - NULL
"\t" - 制表符
"\n" - 换行
"\x0B" - 垂直制表符
"\r" - 回车
" " - 空格

extract()

函数从数组中将变量导入到当前的符号表。使用数组键名作为变量名,使用数组键值作为变量值。

$_SERVER[“REQUEST_URI”]

获得当前url的路径地址

substr()

返回字符串的提取部分

str_replace()

返回替换后的字符串

str_replace(find,replace,string,count)

参数    描述
find    必需。规定要查找的值。
replace    必需。规定替换 find 中的值的值。
string    必需。规定被搜索的字符串。

parse_str()

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

如:

<?php
    parse_str('str=123');
    echo $str;
?>

则会输出

123