笔者burpsuite在线安全学院的OS command injection学习笔记。限于本人水平,笔记质量不是很高,假如有看到的大佬轻喷,很多地方是Google翻译的,还请多多包涵。
文章目录
操作系统命令注入
在本节中,我们将解释什么是OS命令注入,描述如何检测和利用漏洞,为不同的操作系统拼写一些有用的命令和技术,并总结如何防止OS命令注入。
什么是OS命令注入?
操作系统命令注入(也称为shell注入)是一个Web安全漏洞,它使攻击者可以在运行应用程序的服务器上执行任意操作系统(OS)命令,并且通常会完全破坏该应用程序及其所有数据。攻击者通常可以利用OS命令注入漏洞来破坏托管基础结构的其他部分,利用信任关系将攻击转移到组织内的其他系统。
执行任意命令
考虑一个购物应用程序,该应用程序使用户可以查看特定商店中是否有库存商品。该信息可通过如下网址访问:
https://insecure-website.com/stockStatus?productID=381&storeID=29
为了提供库存信息,应用程序必须查询各种旧系统。由于历史原因,该功能是通过使用产品和存储ID作为参数调用shell命令来实现的:
stockreport.pl 381 29
此命令输出指定项目的库存状态,并返回给用户。
由于该应用程序无法防御OS命令注入,因此攻击者可以提交以下输入以执行任意命令:
& echo aiwefwlguh &
如果此输入是通过productID参数提交的,则应用程序执行的命令为:
stockreport.pl & echo aiwefwlguh & 29
该echo命令仅使提供的字符串在输出中回显,并且是测试某些类型的OS命令注入的有用方法。该&字符是一个shell命令分隔符,因此执行的实际上是一个接一个的三个独立命令。结果,返回给用户的输出为:
Error - productID was not provided
aiwefwlguh
29: command not found
输出的三行表明:
- stockreport.pl执行 原始命令时没有预期的参数,因此返回了错误消息。
- echo执行 注入的命令,并在输出中回显提供的字符串。
- 原始参数29作为命令执行,从而导致错误。
&通常, 将附加命令分隔符放在注入命令之后是有用的,因为它会将注入命令与注入点后面的内容分开。这减少了随后发生的事件阻止注入的命令执行的可能性。