远程操作系统命令注入 - 测试

信息安全 Web应用程序 渗透测试 开发 注射 空字节注入
2021-09-10 18:08:08

ZAP 扫描仪发现远程操作系统命令注入。

有没有万无一失的方法来检查这是否有效并且不是误报?

我试图让它休眠 50 秒,但这不是我可以直观看到的东西,而且页面似乎不需要更长的时间来加载。

这是扫描程序发现易受攻击的 URL:

http://*SECRET*/*SECRET*?from&to

这是漏洞:

Attack: ACG"&sleep 5s&"

所以我假设我应该写这样的 URL 来利用它:

http://*SECRET*/*SECRET*?from=ACG&sleep 5s&to=AMR

以上似乎不会使页面加载时间更长。要么我打错了字,要么当 URL 被清理为以下内容时它可能不容易受到攻击:

ACG&sleep%205s&to=AMR
2个回答

自动漏洞扫描程序通常会使用基于时间的有效负载产生误报。

这是因为扫描器只检查请求是否比注入的暂停时间长。如果网络流量很高——可能是因为你的扫描器产生了很多请求——即使没有执行有效负载也可能发生这种情况。

这意味着您应该始终手动确认基于时间的有效负载(因为您应该确认任何其他发现)。

我不太清楚这里的实际有效载荷是什么。其实有两种可能:

  • &意味着要进行编码,因此查询字符串将是:?from=ACG%22%26sleep%205s%26%22&to=AMR. 这是可能的情况。易受攻击的参数是from,而有效负载是ACG%22%26sleep%205s%26%22它将退出当前字符串上下文 via ",然后添加一个附加命令 via &(可用于在 windows 和 linux 中添加附加命令),最后"通过添加另一个命令 via摆脱尾随&
  • &并不意味着要编码,因此您将添加一个名为sleep%005s无值的附加参数(不太可能,但仍然可能)。

您应该尝试这两种变体,首先使用产生可见结果的命令 - 例如id, ls,dir等 - 然后使用定时命令,例如sleep.

sleep如果有的话,只会让线程进入休眠状态。尝试类似的东西

curl your.server.tld/whatever

并查看请求是否通过您的服务器日志。

但是,如果请求没有通过,这可能不是决定性的。

外部流量可能被阻止或 curl 未安装,或者其他任何事情都可能出错。