2017-10-04 15:20:17 +00:00
|
|
|
package modules
|
2017-08-01 23:13:28 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
log "github.com/sirupsen/logrus"
|
2017-08-16 16:09:20 +00:00
|
|
|
"github.com/zmap/zgrab2"
|
2017-08-01 23:13:28 +00:00
|
|
|
)
|
2017-07-20 21:09:13 +00:00
|
|
|
|
2017-09-26 18:02:27 +00:00
|
|
|
type TLSFlags struct {
|
|
|
|
zgrab2.BaseFlags
|
2018-02-02 20:54:05 +00:00
|
|
|
zgrab2.TLSFlags
|
2017-07-20 21:09:13 +00:00
|
|
|
}
|
|
|
|
|
2017-09-26 18:02:27 +00:00
|
|
|
type TLSModule struct {
|
|
|
|
}
|
|
|
|
|
|
|
|
type TLSScanner struct {
|
2017-09-29 22:59:37 +00:00
|
|
|
config *TLSFlags
|
2017-09-26 18:02:27 +00:00
|
|
|
}
|
|
|
|
|
2017-08-01 23:13:28 +00:00
|
|
|
func init() {
|
2017-08-10 19:10:34 +00:00
|
|
|
var tlsModule TLSModule
|
2017-09-26 18:02:27 +00:00
|
|
|
_, err := zgrab2.AddCommand("tls", "TLS Banner Grab", "Grab banner over TLS", 443, &tlsModule)
|
2017-08-01 23:13:28 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2017-07-20 21:09:13 +00:00
|
|
|
}
|
|
|
|
|
2017-09-26 18:02:27 +00:00
|
|
|
func (m *TLSModule) NewFlags() interface{} {
|
|
|
|
return new(TLSFlags)
|
|
|
|
}
|
|
|
|
|
2017-09-29 22:59:37 +00:00
|
|
|
func (m *TLSModule) NewScanner() zgrab2.Scanner {
|
2017-09-26 18:02:27 +00:00
|
|
|
return new(TLSScanner)
|
2017-08-25 16:04:16 +00:00
|
|
|
}
|
|
|
|
|
2017-09-26 18:02:27 +00:00
|
|
|
func (f *TLSFlags) Validate(args []string) error {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f *TLSFlags) Help() string {
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
2017-09-29 22:59:37 +00:00
|
|
|
func (s *TLSScanner) Init(flags zgrab2.ScanFlags) error {
|
2018-02-02 20:54:05 +00:00
|
|
|
f, ok := flags.(*TLSFlags)
|
|
|
|
if !ok {
|
|
|
|
return zgrab2.ErrMismatchedFlags
|
|
|
|
}
|
2017-09-29 22:59:37 +00:00
|
|
|
s.config = f
|
2017-09-26 18:02:27 +00:00
|
|
|
return nil
|
|
|
|
}
|
2017-08-07 21:51:15 +00:00
|
|
|
|
2017-09-26 18:02:27 +00:00
|
|
|
func (s *TLSScanner) GetName() string {
|
2017-10-04 02:47:58 +00:00
|
|
|
return s.config.Name
|
2017-08-07 21:51:15 +00:00
|
|
|
}
|
|
|
|
|
2017-09-26 18:02:27 +00:00
|
|
|
func (s *TLSScanner) InitPerSender(senderID int) error {
|
2017-08-01 23:13:28 +00:00
|
|
|
return nil
|
2017-07-21 16:48:53 +00:00
|
|
|
}
|
|
|
|
|
2017-12-15 14:25:17 +00:00
|
|
|
func (s *TLSScanner) Scan(t zgrab2.ScanTarget) (zgrab2.ScanStatus, interface{}, error) {
|
2018-02-02 20:54:05 +00:00
|
|
|
tcpConn, err := t.Open(&s.config.BaseFlags)
|
|
|
|
if err != nil {
|
|
|
|
return zgrab2.TryGetScanStatus(err), &zgrab2.TLSLog{}, err
|
|
|
|
}
|
|
|
|
var conn *zgrab2.TLSConnection
|
|
|
|
if conn, err = s.config.TLSFlags.GetTLSConnection(tcpConn); err != nil {
|
|
|
|
return zgrab2.TryGetScanStatus(err), &zgrab2.TLSLog{}, err
|
|
|
|
}
|
|
|
|
result := conn.GetLog()
|
|
|
|
if err = conn.Handshake(); err != nil {
|
|
|
|
return zgrab2.TryGetScanStatus(err), result, err
|
|
|
|
}
|
|
|
|
return zgrab2.SCAN_SUCCESS, result, nil
|
2017-07-20 21:09:13 +00:00
|
|
|
}
|
2018-03-12 17:36:11 +00:00
|
|
|
|
|
|
|
// Protocol returns the protocol identifer for the scanner.
|
|
|
|
func (s *TLSScanner) Protocol() string {
|
|
|
|
return "tls"
|
|
|
|
}
|