目录
就像这样,如果用到了禁用的函数,会回显被禁用函数
web58:
代码执行:
利用系统函数实现命令执行,在php下,允许命令执行的函数有:
eval():eval() 函数把字符串按照 PHP 代码来计算。
assert()
preg_replace():替换字符串
call_user_func():就是一种用于传参的函数
file_get_contents():获取文件内容
scandir() 函数返回一个数组,其中包含指定路径中的文件和目录。若成功,则返回一个数组,若失败,则返回 false。如果 directory 不是目录,则返回布尔值 false 并生成一条 E_WARNING 级的错误。
show source():查看文件内容
系统命令执行漏洞
system()
exec():执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array可以得到完整的结果,方法是把结果逐行追加到array的结尾处。
shell_exec()
passthru():passthru()只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上
pcntl_exec()
popen():FILE *popen(const char *cmd,const char *type); 返回值:若成功返回文件指针,出错则返回NULL
proc_open()
这个在查看器才能看到flag
web59:
highlight file:单个文件的语法高亮,使用PHP内置的语法高亮器所定义的颜色,打印输出或者返回输出或者返回语法高亮版本的PHP代码。别名:show_source();
fgets:
fgets的返回值:成功:返回指向该串的指针,失败或读到文件结尾返回空指针,所以可以通过fgets的返回值来判断文件是否读完.
web60:
先试了show_source()发现不行,echo file_get_contents也不行
web61:
print_r(scandir('.')); print_r()函数能打印出复杂类型变量的值。利用print_r()可以打印出整个数组内容及结构,按照一定格式显示键和元素。
web62:
这show_source()和highlight_file()屡试不爽,特别好用
web63:【完全同62】
web64:【完全同62】
web65:【同62】
web66:
终于,show_source()和highlight_file()不能用了
先用c=print_r(scandir('.'));扫描并以数组的形式打印出目录;
用highlight_file("flag.php")得出下列结果
注:[.]表示当前目录 [..]表示上一级目录 [/]根目录
现在猜测flag在根目录下
web67:【根目录】
直接查看flag.php发现发现得到一个假的flag,故之后用c=var_dump(scandir('/'));得出根目录,在根目录里看到flag.txt,读取该文件就可以得到flag;
用c=highlight_file("/flag.txt");就可以得到flag,注意命令写法
web68:【文件包含】
打开就发现是禁用了highlight_file()函数,然后习惯的尝试show_source()发现也被禁用了,print_r(scandir('/'))也被禁用,用var_dump(scandir('/'))发现根目录下有flag.txt
include()包括并运行指定文件 在处理失败时include() 产生一个警告,被导入的程序代码都会被执行,而且这些程序在执行的时候会拥有和源文件中呼叫到include()语句的位置相同的变量范围。
用c=include('/flag.txt');这条命令就会直接得到flag
小结(暂时):
看目录:
print_r(scandir('.')):看当前目录
print_r(scandir('..')):看上一级目录
print_r(scandir('/')):看根目录
print_r可换成var_dump;
读文件:
show_source("文件名")
highlight_file("文件名")
include('/目录')