PHP常用的无参函数绕过
getallheaders()
这个函数的内容就是获取http所有的头部信息。接着我们可以用var_dump函数来把函数的执行结果都打印出来。这个函数有一个缺陷,它只能在apache中间件环境下使用。我们来在本地测试一下无参函数的具体效果。
测试代码:
<?php
highlight_file(__FILE__);
if(isset($_GET['shell'])){
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['shell'])) {
eval($_GET['shell']);}
else
die('hacker!!!!');}
else
echo('hahaha');
?>
var_dump(getallheaders());语句传入进去。
end()
在php中end()函数是取出数组的最后一位。这个end函数是只会取出最后一位的键值,就是以字符串的形式输出出来,所以键名是可以随便起的。
我本地用var_dump输出getallheaders()函数的内容是倒着输的,(具体原因不清楚)所以使用end函数就截取了第一行的内容localhost。 其实原理是一样的。我们可以在http报文后加上我们要执行的恶意代码,再使用end函数截取最后一行,把var_dump函数换成eval函数就可以达到无参函数执行命令了。
session_id()
这种方法就是把恶意代码写在cookie的session_id里面。然后就用session_id()这个函数来读取它,然后它会返回出一个字符串,再用eval函数执行命令。但是,这种方法的前提是我们要开启session才能用session_id(),也就是说,要先session_start();用var_dump函数输出一下
session_id(session_start()),出来的是字符串,我们不需要做任何转换,但是session字符串只能有大小写字母和字符串。但不包含字符,所以我们在session这个地方注入命令就要做一些转换了,那么我们可以将字符串进行16进制编码后再用php中的hex2bin函数解码,执行恶意命令。
scandir()
列出当前目录的文件和目录,以数组的形式展现出来。
chdir()
chdir() 函数改变当前的目录。这个函数是是用来跳目录的,有时我们要读取的文件不在当前目录下,所以我们要改变当前目录。比如用chdir('..')来跳回上一级目录。再配合scandir函数遍历任意目录下的文件。
array_reverse()
根据单词意思就知道这个函数的功能就是将数组倒过来。
highlight_file()
这个函数用来高亮代码,可以相当于文件读取。相当于show_source()。
getcwd()
这个函数返回当前工作目录。成功则返回当前工作目录,失败则返回FALSE。也需要用scandir函数遍历当前工作目录。
dirname()
这个函数返回路径中的目录名称部分。
get_defined_vars()
返回由所有已定义变量所组成的数组。
返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。
具体使用参考菜鸟教程
标签:无参,函数,dump,session,var,绕过,PHP,目录 From: https://www.cnblogs.com/follycat/p/18097776