本帖最后由 adds 于 2021-2-1 20:53 编辑
command execution又称为命令执行或系统命令注入攻击。网站使用了于系统命令执行的高危函数时,恶意用户可以通过命令变形,间接控制网站后台系统。 目前系统命令注入主要用于asp/php/jsp等网页中嵌入webshell后,执行各种命令提权或收集系统信息。 一、模拟攻击 1、登录
默认密码为**/**
2、选择command executino选项
先输入baidu.com测试下。点击submit执行。
执行成功。 显示有乱码,重置了dvwa也一样。有可能是对方是中文系统原因。
翻译下: Ping baidu.com [220.181.38.148] with 32 bytes of date: Reply from 220.181.38.148: bytes=32 time=16ms TTL=128 Reply from 220.181.38.148: bytes=32 time=6ms TTL=128 Reply from 220.181.38.148: bytes=32 time=499ms TTL=128 Reply from 220.181.38.148: bytes=32 time=16ms TTL=128
Ping statistics for 220.181.38.148: packet: Sent=4,Received=4,lost=0(0% loss), Approxmimate round trip times in milli-seconds: Minimum=6ms,Maxmum=499ms,Average=134ms。
可以看出这是一个标准的Windows ping过程,得出的结果也没有任何的处理和过滤。
windows的ping本身是支持不少参数了,接下来,我们尝试一下是不是可以输入不只是IP,还可以输入其他ping参数。
3、我们使用服务器本身的地址去测试。 服务器地址为:192.168.80.134
同样执行成功,且可以带参数n,n表示只ping一次。
4、尝试使用系统命令获取更多信息 使用whoami查看当前用户
当前用户为system用户
使用set命令查看操作系统信息
可以看到是windows NT的系统
使用systeminfo获取更多的信息
通过systeminfo命令我们知道了目标系统为windows server 2008,部署在VMware的环境上,且知道了其IP地址为192.168.80.134。
尝试使用echo %username%输出当前用户
正常来说,这里输出的是username,即类似**istrator、guest这种。但这里输出了计算机名。
使用dir查看当前文件夹下的内容:
可以看到当前文件目录为D盘下的exec文件夹。
查看系统有哪些用户,同时使用>null将Ping的返回值传递到null不再显示,这样可以直接看到命令的返回值。
5、新增用户 添加命令: net user adds 123456 /add
执行后没有回显。这里没有回显,有可能是密码不够复杂,可以尝试修改为复杂度高的密码。
使用net user确认下。
系统里已经存在了adds用户。 查看该用户的所属组:
提升当前用户的所属组权限。 net localgroup **istrator adds /add
再使用net user确认下:
adds用户已经具备了**istrator用户组的权限。
6、开启mstsc服务 查看该服务器是否开了3389端口: netstat -ano
服务端没有开启mstsc服务。
使用命令开启: net start termservice,针对服务没有启动的情况,如里是注册表里禁了,就要修改注册表。
再使用netstat -ano | findstr 3389验证下
可尝试使用adds账号进行远程登录。 远程登录到主机桌面。
二、防护测试 1、将AF部署在攻击机和耙机中间。 逻辑环境大概如下:
实际环境: 攻击机位于HCI上。
耙机位于VMware Workstation上。
2、AF部署 AF的应用策略配置一个全放通的策略。数据先过应用控制模块,所以这里要放通数据。
配置一个防护策略。
3、执行完攻击行为后,查看防火墙日志 在【监控】--【日志】--【安全日志】下可以查看到攻击日志。
查看详细的命令执行攻击:
4、AF的安全日志生成大概要4-5分钟时间,可以看大屏快一些。 路径:【总览】-【业务安全】--【攻击事件汇总】-【投屏显示】
投屏:
5、如何防护 将AF的【安全防护策略】中的动作由“允许”变为“拒绝”即可。 配置完再看下安全日志:
6、代码审查 看一下关于测试页面的源代码:
代码逻辑如下: 提交的输入框内容点击submit后,通过post动作传递给服务器,并存储在$target变量中;判断系统类型,如果是Windows NT,就用ping $target,若不是,则使用linux的ping命令,即ping -c 3 $target。
查看上面的代码,发现用户输入的内容没有做任何过滤,直接传递给了shell_exec这个php函数,这个函数的作用是什么呢? shell_exec (PHP4,PHP5) shell_exec-Execute command via shell and reture the complete output as a string
shell_exe的作用是在系统shell中执行一个命令,比如linux的bash、windows的cmd等。 shell会有很多功能,多命令依次执行(linux使用“;”,windows使用“&”),多命令按成功顺序执行(Linux和windows使用“&&”),多命令失败顺序执行(Linux和windows使用“||”)。
除了上面使用AF进行防护外,还可以使用过滤非法字符的方式进行。 比如:
此页面将命令中出现的“;”和“&”全部替换为“ ”空格,那么通过&传递的命令就会执行失败,因此提高了安全性。 |