安全渗透第二次作业 PHP 函数##把字符串当作 PHP 代码执行 // eval()这种写法会暴露系统信息?php eval($_GET[code]); phpinfo(); system(ls -l);php代码中用于执行系统命令的 //执行的是php中的函数 ?**Webshell 常见写法**/;/一句话木马?php eval($_POST[cmd]); ?1.核心上传函数函数作用示例move_uploaded_file()将上传的临时文件移动到新位置move_uploaded_file($tmp, $dest)is_uploaded_file()判断文件是否通过 HTTP POST 上传is_uploaded_file($tmp)copy()复制文件copy($src, $dest)file_put_contents()写入文件file_put_contents($file, $content)2.判断上传错误的常量常量值含义UPLOAD_ERR_OK0上传成功UPLOAD_ERR_INI_SIZE1超出 php.ini 的upload_max_filesizeUPLOAD_ERR_FORM_SIZE2超出表单MAX_FILE_SIZEUPLOAD_ERR_PARTIAL3文件只有部分被上传UPLOAD_ERR_NO_FILE4没有文件被上传UPLOAD_ERR_NO_TMP_DIR6找不到临时文件夹3.文件上传3.1无任何校验高危?php $target uploads/ . $_FILES[file][name]; move_uploaded_file($_FILES[file][tmp_name], $target); ?漏洞: 直接上传 webshell无任何限制3.2只校验 Content-Type前端校验可绕过?php $type $_FILES[file][type]; if ($type image/jpeg || $type image/png) { move_uploaded_file($_FILES[file][tmp_name], $target); } ?漏洞:Content-Type由客户端控制抓包改Content-Type: image/jpeg即可绕过3.3只校验后缀名黑名单?php $block array(php, php3, php5, phtml, pht); $ext pathinfo($filename, PATHINFO_EXTENSION); if (!in_array($ext, $block)) { move_uploaded_file(...); } ?漏洞: 可上传xxx.php.jpg、xxx.phtml、xxx.PhP大小写、xxx.php%00.jpg00截断3.4只校验文件扩展名白名单?php $allow array(jpg, png, gif); $ext strtolower(pathinfo($filename, PATHINFO_EXTENSION)); if (in_array($ext, $allow)) { move_uploaded_file(...); } ?漏洞: 依赖服务器解析漏洞apache 的x.php.jpg解析为 PHP或内容中包含代码4.直接执行系统命令函数说明返回system()执行命令并输出结果最后一行exec()执行命令不输出最后一行shell_exec()执行命令返回完整输出整个输出passthru()执行命令直接输出原始结果无popen()打开进程管道文件指针proc_open()更底层的进程控制资源