PHP

  • $json=json_decode($_GET['json'],true);
    $_GET['json'] 从URL查询字符串中获取’json’参数的值。例如,如果URL是 example.com?json={"key":"value"}$_GET['json'] 将返回 {"key":"value"}

include_once():在脚本执行期间包含并运行指定文件。该函数和include 函数类似,两者唯一的区别是 使用该函数的时候,php会加检查指定文件是否已经被包含过,如果是,则不会再被包含。

无字母数字绕过正则表达式总结(含上传临时文件、异或、或、取反、自增脚本)

<?php
error_reporting(0);
highlight_file(__FILE__);
$code=$_GET['code'];
if(preg_match('/[a-z0-9]/i',$code)){
die('hacker');
}
eval($code);

$_SERVE[‘PHP_SELF’] 读取的是当前执行脚本的文件名,意思就是读取文件夹下的一个文件如,

如下即为执行脚本的文件:

www.errorr0.com/errorr1/errorr2/ ------ /errorr1/errorr2/index.php

www.errorr0.com/errorr1/errorr2/index.php -------- /errorr1/errorr2/index.php

www.errorr0.com/errorr1/errorr2/flag.php --------- /errorr1/errorr2/flag.php

www.errorr0.com/errorr1/errorr2/index.php?key=value -------- index.php

$_SERVER['REQUEST_URI']是取得当前URL的 路径地址

/show_source/用show[source或者show.source绕过
basename()返回路径中的文件名部分

highlight_file可以起到文件读取的作用

eg:
preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF']) utils.php/%88 即可绕过
preg_match('/show_source/', $_SERVER['REQUEST_URI']) 用show.source或show[source绕过

intval() 是 PHP 中的一个函数,它用来获取变量的整数值。这个函数将会返回变量的整数表示,如果该变量不能转换为整数,那么返回 0。

变量拼接
?ip=127.0.0.1;a=ag;b=fl;cat$IFS$9$b$a.php

base64编码
;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

  • ctype_alpha是一个检测函数,用来检测所给参数是不是字母的函数。
  • is_numeric — 检测变量是否为数字或数字字符串。
  • md5()函数

伪随机数

mt_scrand() //播种 Mersenne Twister 随机数生成器。
mt_rand() //生成随机数

<?php  
mt_srand(1);
echo mt_rand()."###";
echo mt_rand()."###";
echo mt_rand()."###";
?>
<?php
mt_srand(1);
echo mt_rand()."###";
echo mt_rand()."###";
?>

得到结果
895547922###2141438069###1546885062###
895547922###2141438069###

原因:在/ext/standard/rand.c中可以看到,播完种后,将会将 mt_rand_is_seeded 的值设置为1,因此mt_rand只播种一次

使用:

┌──(sein㉿kali)-[~/php_mt_seed-4.0]
└─$ time ./php_mt_seed 1093633598

弱类型比较

布尔类型True与非零非NULL变量比较都会是True

其中用到了md5($pass,true)
第二个参数true会将md5值用原始的6字符输出,
在网上搜索后发现这个可以用ffifdyop绕过,绕过原理是:ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是’ or ‘6,而 heMysql 刚好又会把 hex 转成 ascii 解释,因此拼接之后的形式是 select * from ‘admin’ where password=’’ or ‘6xxxxx’,等价于 or 一个永真式,因此相当于万能密码,可以绕过md5($pass,true)函数

in_array()

函数搜索数组中是否存在指定的值。
in_array(search, array, type)
mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置

mb_strpos (haystack ,needle )
//haystack:要被检查的字符串。
//needle:要搜索的字符串。
mb_substr() //函数返回字符串的一部分。

//str 必需。从该 string 中提取子字符串。
//start 必需。规定在字符串的何处开始。
//ength 可选。规定要返回的字符串长度。默认是直到字符串的结尾。