渗透测试技术----常见web漏洞--命令执行原理及防御

一、命令执行漏洞介绍

1.命令执行漏洞简介
命令执行漏洞时指服务器没有对执行的命令进行过滤,用户可以随意执行系统命令,命令执行漏洞属于高危漏洞之一,也属于代码执行的范围内。

2.命令执行漏洞的原理
应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用System()、exec()、shell_exec()、passthru()、popen()、proc_popen()等函数可以执行系统命令。当攻击者可以控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击。命令执行主要是对输入的命令没有进行过滤,攻击者可以使用&、&&、|、||等命令拼接自己想要查看的信息的相关命令,这样,连同攻击者的命令就会一块执行,这样就造成了命令执行漏洞。

3.命令执行漏洞产生的原因
(1):代码过滤不严或者无过滤。(没有过滤&、&&、|、||等连接符)
(2):系统漏洞造成的命令执行,bash破壳漏洞,该漏洞可以构造环境变量的值来执行具有攻击力的脚本代码,会影响到bash交互的多种应用,如http、ssh和dhcp等。
(3):调用第三方组件,如php(system()、shell_exec()、exec()、eval()),java(struct2),thinkphp(thinkphp是一个老牌的php)(比如一句话木马)

4.命令执行常用的管道符

  • Windows
    (1):"|":无论前面的命令是否执行成功,直接执行后面的命令(并且只执行后面的命令,不显示前面的命令执行结果)。
    (2):"||":如果前面的命令执行成功,则不执行后面的命令;如果前面的命令执行失败,则会执行后面的命令。
    (3):"&":如果前面的命令执行成功,则会接着去执行后面的语句;如果前面的语句执行失败,还会执行后面的语句。
    (4):"&&":如果前面的命令执行成功,后面的命令也会执行;如果前面的命令执行失败,则会直接报错。
  • Linux
    (1):";":执行完前面的命令再执行后面的命令。如果前面的命令执行成功,后面的命令也会执行;如果前面的命令执行失败,则会执行后面的命令。
    (2):"|":无论前面的命令是否执行成功,直接执行后面的命令(并且只执行后面的命令,不显示前面的命令执行结果)。
    (3):"||":如果前面的命令执行成功,则不执行后面的命令;如果前面的命令执行失败,则会执行后面的命令。
    (4):"&":如果前面的命令执行成功,则会接着去执行后面的语句;如果前面的语句执行失败,还会执行后面的语句。
    (5):"&&":如果前面的命令执行成功,后面的命令也会执行;如果前面的命令执行失败,则会直接报错。

5.命令执行中常用的命令

  • Windows
    dir----查看文件目录
    ipconfig----查看Windows的IP地址
    arp -a----查看ARP缓存表
    calc----在命令行打开计算器
    regedit----打开注册表
    netstat -ano----查看开放的端口信息
  • Linux
    cat /etc/passwd----查看passwd文件
    id----查看该用户的ID号
    groups----查看用户所属的组
    cat /etc/group----查看组信息
    whoami----查看当前用户
    pwd----查看当前路径
    uname -a----查看主机信息
    cat /etc/issue----查看主机的配置信息
    netstat -pantu----查看开放的端口信息
    netstat -nr----查看路由信息

二、命令执行漏洞实例

注意:以下测试是基于DVWA上进行的!

Windows

1."|":无论前面的命令是否执行成功,直接执行后面的命令(并且只执行后面的命令,不显示前面的命令执行结果)
127.0.0.1|dir(前面的命令执行成功,但是只显示后面的命令结果)
渗透测试技术----常见web漏洞--命令执行原理及防御_第1张图片
pwd|dir(前面的命令执行失败,但却执行了后面的命令)
渗透测试技术----常见web漏洞--命令执行原理及防御_第2张图片

2."||":如果前面的命令执行成功,则不执行后面的命令;如果前面的命令执行失败,则会执行后面的命令
127.0.0.1|dir(前面的命令执行成功,只显示前面的结果)
渗透测试技术----常见web漏洞--命令执行原理及防御_第3张图片
dir||ipconfig(前面的命令执行失败,只执行了后面的命令)
渗透测试技术----常见web漏洞--命令执行原理及防御_第4张图片

3."&":如果前面的命令执行成功,则会接着去执行后面的语句;如果前面的语句执行失败,还会执行后面的语句
127.0.0.1&dir(前面的命令执行成功,两条命令都执行)
渗透测试技术----常见web漏洞--命令执行原理及防御_第5张图片
ipconfig&dir(前面的命令执行失败,只执行了后面的命令)
渗透测试技术----常见web漏洞--命令执行原理及防御_第6张图片

4."&&":如果前面的命令执行成功,后面的命令也会执行;如果前面的命令执行失败,则会直接报错
ipconfig&&dir(前面的命令执行失败,直接报错)
渗透测试技术----常见web漏洞--命令执行原理及防御_第7张图片
127.0.0.1&&dir(前面的命令执行成功,后面的命令也会执行)
渗透测试技术----常见web漏洞--命令执行原理及防御_第8张图片

Linux

1.";":执行完前面的命令再执行后面的命令。如果前面的命令执行成功,后面的命令也会执行;如果前面的命令执行失败,则会执行后面的命令
127.0.0.1;pwd(前面的命令执行成功,后面的命令也会执行成功)
渗透测试技术----常见web漏洞--命令执行原理及防御_第9张图片
ls;pwd(前面的命令执行失败,只执行后面的命令)
渗透测试技术----常见web漏洞--命令执行原理及防御_第10张图片

2."|":无论前面的命令是否执行成功,直接执行后面的命令(并且只执行后面的命令,不显示前面的命令执行结果)。
127.0.0.1|pwd(前面命令执行成功,执行后面命令,只显示后面命令执行的结果)
渗透测试技术----常见web漏洞--命令执行原理及防御_第11张图片
ls|pwd(前面命令执行失败,执行后面命令,只显示后面命令执行的结果)
渗透测试技术----常见web漏洞--命令执行原理及防御_第12张图片

3."||":如果前面的命令执行成功,则不执行后面的命令;如果前面的命令执行失败,则会执行后面的命令。
127.0.0.1||pwd(前面的命令执行成功,后面的命令不会执行)
渗透测试技术----常见web漏洞--命令执行原理及防御_第13张图片
ls||pwd(前面的命令执行失败,然后会执行后面的命令)
渗透测试技术----常见web漏洞--命令执行原理及防御_第14张图片

4."&":如果前面的命令执行成功,则会接着去执行后面的语句;如果前面的语句执行失败,还会执行后面的语句。
127.0.0.1&pwd(前面的命令执行成功,接着执行了后面的命令)
渗透测试技术----常见web漏洞--命令执行原理及防御_第15张图片
ls&pwd(前面的命令执行失败,还是会执行后面的命令)
渗透测试技术----常见web漏洞--命令执行原理及防御_第16张图片

5."&&":如果前面的命令执行成功,后面的命令也会执行;如果前面的命令执行失败,则会直接报错。
127.0.0.1&&pwd(前面的命令执行成功,后面的命令也执行成功)
渗透测试技术----常见web漏洞--命令执行原理及防御_第17张图片
ls&&pwd(前面的命令执行失败,直接报错)
渗透测试技术----常见web漏洞--命令执行原理及防御_第18张图片

三、防御命令执行的方法

1.尽量不要使用命令执行函数,尽量不要执行外部命令
2.使用自定义函数或者函数库来代替外部命令的功能
3.客户端提交的变量在进入执行命令函数钱要做好过滤和检测
4.在使用动态函数之前,确保使用的函数是指定的函数之一
5.对PHP语言来说,不能完全控制的危险函数最好不要使用

你可能感兴趣的:(渗透测试技术,web漏洞介绍,命令执行,命令执行原理,命令执行防御)