php代码审计小总结

0x01 命令执行

php代码执行

  • eval()
  • assert()
  • preg_replace + '/e'
  • call_user_func()
  • call_user_func_arra()
  • create_function
  • array_map()

系统命令执行

  • system()
  • passthru()
  • exec()
  • pcntl_exec()
  • shell_exec()
  • popen()
  • proc_open()
  • `(反单引号)
  • ob_start()
  • escapeshellcmd() // 该函数用于过滤

0x02 文件上传

  • move_uploaded_file()
  • getimagesize() //验证文件头只要为GIF89a,就会返回真

0x03 文件删除

  • unlink()
  • session_destroy()

0x04 文件包含

本地文件包含

  • require()
  • include()
  • include_once()
  • require_once()

远程文件包含

  • allow_url_include = on

0x05 文件读取

读文件

  • hightlight_file($filename);
  • show_source($filename);
  • print_r(php_strip_whitespace($filename));
  • print_r(file_get_contents($filename));
  • readfile($filename);
  • print_r(file($filename)); // var_dump
  • fread(fopen($filename,"r"), $size);
  • include($filename); // 非php代码
  • include_once($filename); // 非php代码
  • require($filename); // 非php代码
  • require_once($filename); // 非php代码
  • print_r(fread(popen("cat flag", "r"), $size));
  • print_r(fgets(fopen($filename, "r"))); // 读取一行
  • fpassthru(fopen($filename, "r")); // 从当前位置一直读取到 EOF
  • print_r(fgetcsv(fopen($filename,"r"), $size));
  • print_r(fgetss(fopen($filename, "r"))); // 从文件指针中读取一行并过滤掉 HTML 标记
  • print_r(fscanf(fopen("flag", "r"),"%s"));
  • print_r(parse_ini_file($filename)); // 失败时返回 false , 成功返回配置数组

列目录

  • print_r(glob("*")); // 列当前目录
  • print_r(glob("/*")); // 列根目录 print_r(scandir("."));
  • print_r(scandir("/"));
  • $d=opendir(".");while(false!==($f=readdir($d))){echo"$f\n";}
  • $d=dir(".");while(false!==($f=$d->read())){echo$f."\n";}

超全局变量

0x06 变量覆盖

  • extract()
  • import_request_variables()
  • parse_str()
  • mb_parse_str()
  • 全局变量覆盖:register_globals为ON,$GLOBALS

0x07 php序列化函数

  • serialize()
  • unserialize()
  • ini_set('session.serialize_handler', 'php_serialize');

0x08 Reference

results matching ""

    No results matching ""