perf: 优化FTP.go的代码,添加注释,规范输出

This commit is contained in:
ZacharyZcR 2024-12-18 23:38:49 +08:00
parent 8d5806e456
commit 5ad4c1a580

View File

@ -9,72 +9,85 @@ import (
"time" "time"
) )
// FtpScan 执行FTP服务扫描
func FtpScan(info *Config.HostInfo) (tmperr error) { func FtpScan(info *Config.HostInfo) (tmperr error) {
// 如果已开启暴力破解则直接返回
if Common.IsBrute { if Common.IsBrute {
return return
} }
starttime := time.Now().Unix() starttime := time.Now().Unix()
// 尝试匿名登录
flag, err := FtpConn(info, "anonymous", "") flag, err := FtpConn(info, "anonymous", "")
if flag && err == nil { if flag && err == nil {
return err return err
} else { }
errlog := fmt.Sprintf("[-] ftp %v:%v %v %v", info.Host, info.Ports, "anonymous", err) errlog := fmt.Sprintf("[-] ftp %v:%v %v %v", info.Host, info.Ports, "anonymous", err)
Common.LogError(errlog) Common.LogError(errlog)
tmperr = err tmperr = err
if Common.CheckErrs(err) { if Common.CheckErrs(err) {
return err return err
}
} }
// 尝试用户名密码组合
for _, user := range Common.Userdict["ftp"] { for _, user := range Common.Userdict["ftp"] {
for _, pass := range Common.Passwords { for _, pass := range Common.Passwords {
// 替换密码中的用户名占位符
pass = strings.Replace(pass, "{user}", user, -1) pass = strings.Replace(pass, "{user}", user, -1)
flag, err := FtpConn(info, user, pass) flag, err := FtpConn(info, user, pass)
if flag && err == nil { if flag && err == nil {
return err return err
} else { }
errlog := fmt.Sprintf("[-] ftp %v:%v %v %v %v", info.Host, info.Ports, user, pass, err)
Common.LogError(errlog) // 记录错误信息
tmperr = err errlog := fmt.Sprintf("[-] ftp %v:%v %v %v %v", info.Host, info.Ports, user, pass, err)
if Common.CheckErrs(err) { Common.LogError(errlog)
return err tmperr = err
}
if time.Now().Unix()-starttime > (int64(len(Common.Userdict["ftp"])*len(Common.Passwords)) * Common.Timeout) { if Common.CheckErrs(err) {
return err return err
} }
// 超时检查
if time.Now().Unix()-starttime > (int64(len(Common.Userdict["ftp"])*len(Common.Passwords)) * Common.Timeout) {
return err
} }
} }
} }
return tmperr return tmperr
} }
// FtpConn 建立FTP连接并尝试登录
func FtpConn(info *Config.HostInfo, user string, pass string) (flag bool, err error) { func FtpConn(info *Config.HostInfo, user string, pass string) (flag bool, err error) {
flag = false
Host, Port, Username, Password := info.Host, info.Ports, user, pass Host, Port, Username, Password := info.Host, info.Ports, user, pass
// 建立FTP连接
conn, err := ftp.DialTimeout(fmt.Sprintf("%v:%v", Host, Port), time.Duration(Common.Timeout)*time.Second) conn, err := ftp.DialTimeout(fmt.Sprintf("%v:%v", Host, Port), time.Duration(Common.Timeout)*time.Second)
if err == nil { if err != nil {
err = conn.Login(Username, Password) return false, err
if err == nil { }
flag = true
result := fmt.Sprintf("[+] ftp %v:%v:%v %v", Host, Port, Username, Password) // 尝试登录
dirs, err := conn.List("") if err = conn.Login(Username, Password); err != nil {
//defer conn.Logout() return false, err
if err == nil { }
if len(dirs) > 0 {
for i := 0; i < len(dirs); i++ { // 登录成功,获取目录信息
if len(dirs[i].Name) > 50 { result := fmt.Sprintf("[+] ftp %v:%v:%v %v", Host, Port, Username, Password)
result += "\n [->]" + dirs[i].Name[:50] dirs, err := conn.List("")
} else { if err == nil && len(dirs) > 0 {
result += "\n [->]" + dirs[i].Name // 最多显示前6个目录
} for i := 0; i < len(dirs) && i < 6; i++ {
if i == 5 { name := dirs[i].Name
break if len(name) > 50 {
} name = name[:50]
}
}
} }
Common.LogSuccess(result) result += "\n [->]" + name
} }
} }
return flag, err
Common.LogSuccess(result)
return true, nil
} }