splitting dumpster fire up into manageable pieces
This commit is contained in:
parent
bc7153e867
commit
7ff78d8acd
39
config.go
Normal file
39
config.go
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
/////////////
|
||||||
|
/////////
|
||||||
|
/// RPC
|
||||||
|
var RPCPort string = "4321"
|
||||||
|
var RPCHost string = "127.0.0.1"
|
||||||
|
var cowPipe string = "/tmp/sh0rtbus.cowrie.fifo"
|
||||||
|
/////////
|
||||||
|
/// IRC
|
||||||
|
var ircHost string = "10.8.0.1"
|
||||||
|
var ircPort int = 6667
|
||||||
|
var ircSSL bool = false
|
||||||
|
var ircFlood bool = true
|
||||||
|
var ircDebug uintptr = 0 //os.Stdout
|
||||||
|
var ircVersion string = "sh0rtbus 0.2"
|
||||||
|
// Bot
|
||||||
|
var ircHome string = "#bees"
|
||||||
|
var ircOwner string = "kayos"
|
||||||
|
var ircNick string = "sh0rtbus"
|
||||||
|
var ircUser string
|
||||||
|
var ircPass string // username:pasword defined in auth.text
|
||||||
|
// Proxy
|
||||||
|
var proxyProto string = "false" // "false" to disable proxy
|
||||||
|
var proxyHost string = "127.0.0.1"
|
||||||
|
var proxyPort string = "9050"
|
||||||
|
//// Cowrie
|
||||||
|
var cowVerbose bool = false
|
||||||
|
var cowLogs string = "/home/cowrie/cowrie/var/log/cowrie"
|
||||||
|
// Cowrie SQL
|
||||||
|
//var sqlHost string = "127.0.0.1"
|
||||||
|
//var sqlPort string = "3306"
|
||||||
|
//var sqlDB string = "cowrie"
|
||||||
|
//var sqlUser string = "sh0rtbus"
|
||||||
|
//var sqlPass string = "Eir4OcertEutpyfryWadbiwobJaphAlf"
|
||||||
|
///////////////////
|
||||||
|
//var db *sql.DB
|
||||||
|
var err error
|
||||||
|
//////////////////
|
320
ircbot.go
Normal file
320
ircbot.go
Normal file
@ -0,0 +1,320 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import(
|
||||||
|
"github.com/lrstanley/girc"
|
||||||
|
"golang.org/x/net/proxy"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"net/url"
|
||||||
|
"bufio"
|
||||||
|
"time"
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
func ircbot() {
|
||||||
|
//////////////////////////////////
|
||||||
|
//////////////////////////////////
|
||||||
|
///////////////// TCP Server
|
||||||
|
//inbound, err := net.ListenTCP("tcp", Host+":"+Port) // Define TCP Listener
|
||||||
|
//if err != nil { //logr.Fatal("RPC Listener error! " + err) }
|
||||||
|
//psad := new(psadRPC) // Create a new handler of type psadRPC
|
||||||
|
//rpc.Register(psad)// Adds all relevant functions to RPC registry (gives client options)
|
||||||
|
//rpc.Accept(inbound) // Begins listening on socket and offering functions
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//logr := //logr.WithContext("IRC")
|
||||||
|
|
||||||
|
if (len(os.Args) > 1) {
|
||||||
|
ircNick = os.Args[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
var SASLbool bool = false
|
||||||
|
var client *girc.Client
|
||||||
|
var ircSASL *girc.SASLPlain
|
||||||
|
|
||||||
|
fmt.Println("[IRC] Opening auth file for nickserv creds...")
|
||||||
|
f, err := os.Open("auth.txt")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[IRC] Error opening auth.txt file!")
|
||||||
|
fmt.Println("[IRC] Proceeding without authentication...")
|
||||||
|
ircUser = ircNick
|
||||||
|
ircPass = ""
|
||||||
|
} else {
|
||||||
|
defer f.Close()
|
||||||
|
scanner := bufio.NewScanner(f)
|
||||||
|
scanner.Scan()
|
||||||
|
line := scanner.Text()
|
||||||
|
auth := strings.Split(line, ":")
|
||||||
|
ircUser = auth[0]
|
||||||
|
ircPass = auth[1]
|
||||||
|
ircSASL = &girc.SASLPlain{User: ircUser, Pass: ircPass}
|
||||||
|
SASLbool = true
|
||||||
|
f.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
if SASLbool == true {
|
||||||
|
client = girc.New(girc.Config{
|
||||||
|
Server: ircHost,
|
||||||
|
Port: ircPort,
|
||||||
|
Nick: ircNick,
|
||||||
|
Name: ircNick,
|
||||||
|
User: ircUser,
|
||||||
|
SSL: ircSSL,
|
||||||
|
SASL: ircSASL,
|
||||||
|
AllowFlood: ircFlood,
|
||||||
|
Out: os.Stdout,
|
||||||
|
Version: ircVersion,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
client = girc.New(girc.Config{
|
||||||
|
Server: ircHost,
|
||||||
|
Port: ircPort,
|
||||||
|
Nick: ircNick,
|
||||||
|
Name: ircNick,
|
||||||
|
User: ircUser,
|
||||||
|
SSL: ircSSL,
|
||||||
|
AllowFlood: ircFlood,
|
||||||
|
Out: os.Stdout,
|
||||||
|
Version: ircVersion,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
client.Handlers.Add(girc.CONNECTED, func(c *girc.Client, e girc.Event) {
|
||||||
|
fmt.Println("[IRC] Successfully connected to: " + ircHost)
|
||||||
|
c.Cmd.Join(ircHome)
|
||||||
|
fmt.Println("[IRC] Joining channel: " + ircHome)
|
||||||
|
|
||||||
|
err = Cowrie(c)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[IPC] Error: " + err.Error())
|
||||||
|
c.Cmd.Message(ircOwner, "IPC Error: err.Error()")
|
||||||
|
os.Exit(2)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
client.Handlers.Add(girc.INVITE, func(c *girc.Client, e girc.Event) {
|
||||||
|
c.Cmd.Join(e.Last())
|
||||||
|
})
|
||||||
|
client.Handlers.Add(girc.ERR_CANNOTSENDTOCHAN, func(c *girc.Client, e girc.Event) {
|
||||||
|
Target := ircHome
|
||||||
|
if (strings.Contains(girc.Fmt(e.String()), ircHome)) {
|
||||||
|
Target = ircOwner
|
||||||
|
}
|
||||||
|
c.Cmd.Message(Target, "ERR_INVITEONLYCHAN:")
|
||||||
|
c.Cmd.Message(Target, girc.Fmt(e.String()))
|
||||||
|
})
|
||||||
|
client.Handlers.Add(girc.ERR_INVITEONLYCHAN, func(c *girc.Client, e girc.Event) {
|
||||||
|
Phone(c,"ERR_INVITEONLYCHAN:")
|
||||||
|
Phone(c,girc.Fmt(e.String()))
|
||||||
|
})
|
||||||
|
client.Handlers.Add(girc.RPL_WHOISUSER, func(c *girc.Client, e girc.Event) {
|
||||||
|
Phone(c,"RPL_WHOISUSER:")
|
||||||
|
Phone(c,girc.Fmt(e.String()))
|
||||||
|
})
|
||||||
|
client.Handlers.Add(girc.RPL_WHOISOPERATOR, func(c *girc.Client, e girc.Event) {
|
||||||
|
Phone(c,"RPL_WHOISOPERATOR:")
|
||||||
|
Phone(c,girc.Fmt(e.String()))
|
||||||
|
})
|
||||||
|
client.Handlers.Add(girc.RPL_WHOISIDLE, func(c *girc.Client, e girc.Event) {
|
||||||
|
Phone(c,"RPL_WHOISIDLE:")
|
||||||
|
Phone(c,girc.Fmt(e.String()))
|
||||||
|
})
|
||||||
|
client.Handlers.Add(girc.RPL_WHOISSERVER, func(c *girc.Client, e girc.Event) {
|
||||||
|
Phone(c,"RPL_WHOISSERVER:")
|
||||||
|
Phone(c,girc.Fmt(e.String()))
|
||||||
|
})
|
||||||
|
client.Handlers.Add(girc.RPL_WHOISCHANOP, func(c *girc.Client, e girc.Event) {
|
||||||
|
Phone(c,"RPL_WHOISCHANOP:")
|
||||||
|
Phone(c,girc.Fmt(e.String()))
|
||||||
|
})
|
||||||
|
|
||||||
|
client.Handlers.Add(girc.RPL_WHOISCHANOP, func(c *girc.Client, e girc.Event) {
|
||||||
|
Phone(c,"RPL_LINKS:")
|
||||||
|
Phone(c,girc.Fmt(e.String()))
|
||||||
|
})
|
||||||
|
|
||||||
|
client.Handlers.Add(girc.RPL_WHOISCHANOP, func(c *girc.Client, e girc.Event) {
|
||||||
|
Phone(c,"RPL_STATSLINKINFO:")
|
||||||
|
Phone(c,girc.Fmt(e.String()))
|
||||||
|
})
|
||||||
|
|
||||||
|
client.Handlers.Add(girc.RPL_WHOISCHANOP, func(c *girc.Client, e girc.Event) {
|
||||||
|
Phone(c,"RPL_TRACELINK:")
|
||||||
|
Phone(c,girc.Fmt(e.String()))
|
||||||
|
})
|
||||||
|
|
||||||
|
client.Handlers.Add(girc.RPL_TOPICWHOTIME, func(c *girc.Client, e girc.Event) {
|
||||||
|
Chan := strings.Split(e.String(), " ")[4]
|
||||||
|
if Chan != ircHome {
|
||||||
|
Phone(c,"Joined " + Chan + " on " + e.Source.ID())
|
||||||
|
Phone(c,girc.Fmt(e.String()))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
client.Handlers.Add(girc.RPL_NAMREPLY, func(c *girc.Client, e girc.Event) {
|
||||||
|
reply := strings.Split(e.String(), " ")
|
||||||
|
if reply[5] != ircHome {
|
||||||
|
|
||||||
|
for i, h := range reply {
|
||||||
|
if i < 4 { continue }
|
||||||
|
Phone(c,h)
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ircBanner(c)
|
||||||
|
Phone(c,ircVersion)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
client.Handlers.Add(girc.RPL_WHOISCHANNELS, func(c *girc.Client, e girc.Event) {
|
||||||
|
Phone(c,"RPL_WHOISCHANNELS:")
|
||||||
|
Phone(c,e.String())
|
||||||
|
})
|
||||||
|
|
||||||
|
client.Handlers.Add(girc.PRIVMSG, func(c *girc.Client, e girc.Event) {
|
||||||
|
Sender := e.Source.Name
|
||||||
|
if Sender == "NickServ" {
|
||||||
|
fmt.Println("[IRC] NickServ response: " + e.Last())
|
||||||
|
}
|
||||||
|
if (strings.HasPrefix(e.Last(), "!")) {
|
||||||
|
|
||||||
|
fmt.Println("[IRC] "+e.String())
|
||||||
|
|
||||||
|
thyWill := strings.Split(e.Last(), " ")
|
||||||
|
|
||||||
|
switch thyWill[0] {
|
||||||
|
|
||||||
|
case "!whois":
|
||||||
|
if len(thyWill) == 1 {
|
||||||
|
c.Cmd.ReplyTo(e, girc.Fmt("Usage: !whois nick"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println("[IRC] <"+string(Sender)+"> !spider " + thyWill[1])
|
||||||
|
if girc.IsValidNick(thyWill[1]) {
|
||||||
|
c.Cmd.Whois(thyWill[1])
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
fmt.Println("[IRC] ERROR: Bad whois target!")
|
||||||
|
Phone(c,"Bad Target! Wtf is that shit?")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
case "!spider":
|
||||||
|
thyWill := strings.Split(e.Last(), " ")
|
||||||
|
var thyMark string
|
||||||
|
if len(thyWill) == 1 {
|
||||||
|
c.Cmd.ReplyTo(e, girc.Fmt("Usage: !spider #channel"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
thyMark = thyWill[1]
|
||||||
|
fmt.Println("[IRC] <"+string(Sender)+"> !spider " + thyMark)
|
||||||
|
|
||||||
|
if girc.IsValidChannel(thyMark) {
|
||||||
|
fmt.Println("[IRC][SPIDER] Joining target " + thyMark)
|
||||||
|
Phone(c,"Joining " + thyMark)
|
||||||
|
c.Cmd.Join(thyMark)
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
fmt.Println("[IRC][SPIDER] Bad scan target! " + thyMark)
|
||||||
|
Phone(c,"Bad Target! Wtf is that shit?")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
case "!stop":
|
||||||
|
if Sender == ircOwner {
|
||||||
|
c.Close()
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
c.Cmd.Kick(ircHome,Sender,"yeah okay retard")
|
||||||
|
}
|
||||||
|
|
||||||
|
case "!motd":
|
||||||
|
ircBanner(c)
|
||||||
|
|
||||||
|
case "!cowrie":
|
||||||
|
if (len(thyWill) < 3) {
|
||||||
|
cowSay(c,"Cowrie","-v [0/1] verbose on/off ")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if thyWill[1] == "-v" {
|
||||||
|
if thyWill[2] == "0" {
|
||||||
|
cowVerbose = false
|
||||||
|
cowSay(c,"Aight, den.", "Cowrie verbose log output stopped")
|
||||||
|
}
|
||||||
|
if thyWill[2] == "1" {
|
||||||
|
cowVerbose = true
|
||||||
|
cowSay(c,"I seent em!", "Cowrie verbose log output started")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
case "!telnet":
|
||||||
|
if (len(thyWill) < 3) {
|
||||||
|
Phone(c,"not even sure")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if thyWill[1] == "add" {
|
||||||
|
for i, t := range thyWill {
|
||||||
|
if i < 3 { continue }
|
||||||
|
Phone(c,t)
|
||||||
|
}
|
||||||
|
if thyWill[2] == "0" {
|
||||||
|
cowVerbose = false
|
||||||
|
cowSay(c,"Aight, den.", "Cowrie verbose log output stopped")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
Phone(c,"what")
|
||||||
|
fmt.Println("[IRC] Unknown bot command issued: " + thyWill[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
sslString := " "
|
||||||
|
|
||||||
|
////logr.Debug("Parsing proxy URI: " + ProxyURI)
|
||||||
|
//logr.Debug("Validating " + proxyProto + " proxy at host " + proxyHost + " on port " + proxyPort)
|
||||||
|
if ircSSL == true {
|
||||||
|
sslString = "-ssl"
|
||||||
|
}
|
||||||
|
if proxyProto != "false" {
|
||||||
|
ProxyUrl, err := url.Parse(proxyProto + "://" + proxyHost + ":" + proxyPort)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Proxy URI is malformed!")
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
dialer, _ := proxy.FromURL(ProxyUrl, &net.Dialer{Timeout: 5 * time.Second})
|
||||||
|
for {
|
||||||
|
fmt.Println("[IRC] Dialing through a " + proxyProto + " proxy at host " + proxyHost + " on port " + proxyPort)
|
||||||
|
fmt.Println("[IRC] Connecting to " + ircHost + "/" + strconv.Itoa(ircPort) + " " + sslString)
|
||||||
|
if err := client.DialerConnect(dialer); err != nil {
|
||||||
|
fmt.Println("[IRC] Connection error! " + err.Error())
|
||||||
|
fmt.Println("[IRC] reconnecting...")
|
||||||
|
time.Sleep(1)
|
||||||
|
} else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for {
|
||||||
|
fmt.Println("[IRC] Connecting to " + ircHost + "/" + strconv.Itoa(ircPort) + " " + sslString)
|
||||||
|
if err := client.Connect(); err != nil {
|
||||||
|
fmt.Println("[IRC] Connection error! " + err.Error())
|
||||||
|
fmt.Println("[IRC] reconnecting...")
|
||||||
|
time.Sleep(1)
|
||||||
|
} else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
18
main.go
Normal file
18
main.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "os"
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
fmt.Println("yeet")
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
if (len(os.Args) > 2 && os.Args[1] == "client") {
|
||||||
|
//fmt.Println("Starting client...")
|
||||||
|
} else {
|
||||||
|
conBanner()
|
||||||
|
ircbot()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
381
sh0rtbus.go
381
sh0rtbus.go
@ -1,76 +1,17 @@
|
|||||||
package main
|
package main
|
||||||
import (
|
import (
|
||||||
// "database/sql"
|
// "database/sql"
|
||||||
"encoding/base64"
|
"github.com/lrstanley/girc"
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"net/url"
|
|
||||||
"syscall"
|
"syscall"
|
||||||
"bytes"
|
"bytes"
|
||||||
"bufio"
|
|
||||||
"time"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
|
||||||
////////
|
////////
|
||||||
// _ "github.com/go-sql-driver/mysql"
|
// _ "github.com/go-sql-driver/mysql"
|
||||||
"github.com/lrstanley/girc"
|
|
||||||
"golang.org/x/net/proxy"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
/////////////
|
|
||||||
/////////
|
|
||||||
/// RPC
|
|
||||||
var RPCPort string = "4321"
|
|
||||||
var RPCHost string = "127.0.0.1"
|
|
||||||
var cowPipe string = "/tmp/sh0rtbus.cowrie.fifo"
|
|
||||||
/////////
|
|
||||||
/// IRC
|
|
||||||
var ircHost string = "10.8.0.1"
|
|
||||||
var ircPort int = 6667
|
|
||||||
var ircSSL bool = false
|
|
||||||
var ircFlood bool = true
|
|
||||||
var ircDebug uintptr = 0 //os.Stdout
|
|
||||||
var ircVersion string = "sh0rtbus 0.2"
|
|
||||||
// Bot
|
|
||||||
var ircHome string = "#bees"
|
|
||||||
var ircOwner string = "kayos"
|
|
||||||
var ircNick string = "sh0rtbus"
|
|
||||||
var ircUser string
|
|
||||||
var ircPass string // username:pasword defined in auth.text
|
|
||||||
// Proxy
|
|
||||||
var proxyProto string = "false" // "false" to disable proxy
|
|
||||||
var proxyHost string = "127.0.0.1"
|
|
||||||
var proxyPort string = "9050"
|
|
||||||
//// Cowrie
|
|
||||||
var cowVerbose bool = false
|
|
||||||
var cowLogs string = "/home/cowrie/cowrie/var/log/cowrie"
|
|
||||||
// Cowrie SQL
|
|
||||||
//var sqlHost string = "127.0.0.1"
|
|
||||||
//var sqlPort string = "3306"
|
|
||||||
//var sqlDB string = "cowrie"
|
|
||||||
//var sqlUser string = "sh0rtbus"
|
|
||||||
//var sqlPass string = "Eir4OcertEutpyfryWadbiwobJaphAlf"
|
|
||||||
///////////////////
|
|
||||||
//var db *sql.DB
|
|
||||||
var err error
|
|
||||||
//////////////////
|
|
||||||
|
|
||||||
func b64d(str string) string {
|
|
||||||
data, err := base64.StdEncoding.DecodeString(str)
|
|
||||||
if err != nil {
|
|
||||||
return err.Error()
|
|
||||||
}
|
|
||||||
return string(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
func conBanner() {
|
|
||||||
data := "ICAgICAgICAg4paI4paIICAgICAgIOKWiOKWiOKWiOKWiCAgICAgICAgICAg4paI4paIICAg4paI4paIICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg4paR4paI4paIICAgICAg4paI4paR4paR4paR4paI4paIICAgICAgICAg4paR4paI4paIICDilpHilojiloggICAgICAgICAgICAgICAgICAgICAKICDilojilojilojilojilojilojilpHilojiloggICAgIOKWkeKWiCAg4paI4paR4paIIOKWiOKWiOKWiOKWiOKWiOKWiCDilojilojilojilojilojilojilpHilojiloggICAgICDilojiloggICDilojiloggIOKWiOKWiOKWiOKWiOKWiOKWiAog4paI4paI4paR4paR4paR4paRIOKWkeKWiOKWiOKWiOKWiOKWiOKWiCDilpHilogg4paIIOKWkeKWiOKWkeKWkeKWiOKWiOKWkeKWkeKWiOKWkeKWkeKWkeKWiOKWiOKWkSDilpHilojilojilojilojilojilogg4paR4paI4paIICDilpHilojilogg4paI4paI4paR4paR4paR4paRIArilpHilpHilojilojilojilojilogg4paR4paI4paI4paR4paR4paR4paI4paI4paR4paI4paIICDilpHilogg4paR4paI4paIIOKWkSAgIOKWkeKWiOKWiCAg4paR4paI4paI4paR4paR4paR4paI4paI4paR4paI4paIICDilpHilojilojilpHilpHilojilojilojilojiloggCiDilpHilpHilpHilpHilpHilojilojilpHilojiloggIOKWkeKWiOKWiOKWkeKWiCAgIOKWkeKWiCDilpHilojiloggICAgIOKWkeKWiOKWiCAg4paR4paI4paIICDilpHilojilojilpHilojiloggIOKWkeKWiOKWiCDilpHilpHilpHilpHilpHilojilogKIOKWiOKWiOKWiOKWiOKWiOKWiCDilpHilojiloggIOKWkeKWiOKWiOKWkSDilojilojilojilogg4paR4paI4paI4paIICAgICDilpHilpHilojilogg4paR4paI4paI4paI4paI4paI4paIIOKWkeKWkeKWiOKWiOKWiOKWiOKWiOKWiCDilojilojilojilojilojiloggCuKWkeKWkeKWkeKWkeKWkeKWkSAg4paR4paRICAg4paR4paRICDilpHilpHilpHilpEgIOKWkeKWkeKWkSAgICAgICDilpHilpEgIOKWkeKWkeKWkeKWkeKWkSAgICDilpHilpHilpHilpHilpHilpEg4paR4paR4paR4paR4paR4paRICAK"
|
|
||||||
fmt.Println(b64d(data))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//func stainSelect(query string) {
|
//func stainSelect(query string) {
|
||||||
@ -106,7 +47,6 @@ func Cowrie(c *girc.Client) error {
|
|||||||
fmt.Printf("[IPC] sending data to [IRC]: %s\n", dataStr)
|
fmt.Printf("[IPC] sending data to [IRC]: %s\n", dataStr)
|
||||||
Phone(c,dataStr)
|
Phone(c,dataStr)
|
||||||
}
|
}
|
||||||
//psad <- dataStr
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,314 +70,6 @@ func Phone(c *girc.Client, Msg string) {
|
|||||||
c.Cmd.Message(target, girc.Fmt(Msg))
|
c.Cmd.Message(target, girc.Fmt(Msg))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func ircbot() {
|
|
||||||
//////////////////////////////////
|
|
||||||
//////////////////////////////////
|
|
||||||
///////////////// TCP Server
|
|
||||||
//inbound, err := net.ListenTCP("tcp", Host+":"+Port) // Define TCP Listener
|
|
||||||
//if err != nil { //logr.Fatal("RPC Listener error! " + err) }
|
|
||||||
//psad := new(psadRPC) // Create a new handler of type psadRPC
|
|
||||||
//rpc.Register(psad)// Adds all relevant functions to RPC registry (gives client options)
|
|
||||||
//rpc.Accept(inbound) // Begins listening on socket and offering functions
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
//logr := //logr.WithContext("IRC")
|
|
||||||
|
|
||||||
if (len(os.Args) > 1) {
|
|
||||||
ircNick = os.Args[1]
|
|
||||||
}
|
|
||||||
|
|
||||||
var SASLbool bool = false
|
|
||||||
var client *girc.Client
|
|
||||||
var ircSASL *girc.SASLPlain
|
|
||||||
|
|
||||||
fmt.Println("[IRC] Opening auth file for nickserv creds...")
|
|
||||||
f, err := os.Open("auth.txt")
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("[IRC] Error opening auth.txt file!")
|
|
||||||
fmt.Println("[IRC] Proceeding without authentication...")
|
|
||||||
ircUser = ircNick
|
|
||||||
ircPass = ""
|
|
||||||
} else {
|
|
||||||
defer f.Close()
|
|
||||||
scanner := bufio.NewScanner(f)
|
|
||||||
scanner.Scan()
|
|
||||||
line := scanner.Text()
|
|
||||||
auth := strings.Split(line, ":")
|
|
||||||
ircUser = auth[0]
|
|
||||||
ircPass = auth[1]
|
|
||||||
ircSASL = &girc.SASLPlain{User: ircUser, Pass: ircPass}
|
|
||||||
SASLbool = true
|
|
||||||
f.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
if SASLbool == true {
|
|
||||||
client = girc.New(girc.Config{
|
|
||||||
Server: ircHost,
|
|
||||||
Port: ircPort,
|
|
||||||
Nick: ircNick,
|
|
||||||
Name: ircNick,
|
|
||||||
User: ircUser,
|
|
||||||
SSL: ircSSL,
|
|
||||||
SASL: ircSASL,
|
|
||||||
AllowFlood: ircFlood,
|
|
||||||
Out: os.Stdout,
|
|
||||||
Version: ircVersion,
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
client = girc.New(girc.Config{
|
|
||||||
Server: ircHost,
|
|
||||||
Port: ircPort,
|
|
||||||
Nick: ircNick,
|
|
||||||
Name: ircNick,
|
|
||||||
User: ircUser,
|
|
||||||
SSL: ircSSL,
|
|
||||||
AllowFlood: ircFlood,
|
|
||||||
Out: os.Stdout,
|
|
||||||
Version: ircVersion,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
client.Handlers.Add(girc.CONNECTED, func(c *girc.Client, e girc.Event) {
|
|
||||||
fmt.Println("[IRC] Successfully connected to: " + ircHost)
|
|
||||||
c.Cmd.Join(ircHome)
|
|
||||||
fmt.Println("[IRC] Joining channel: " + ircHome)
|
|
||||||
|
|
||||||
err = Cowrie(c)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("[IPC] Error: " + err.Error())
|
|
||||||
c.Cmd.Message(ircOwner, "IPC Error: err.Error()")
|
|
||||||
os.Exit(2)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
client.Handlers.Add(girc.INVITE, func(c *girc.Client, e girc.Event) {
|
|
||||||
c.Cmd.Join(e.Last())
|
|
||||||
})
|
|
||||||
client.Handlers.Add(girc.ERR_CANNOTSENDTOCHAN, func(c *girc.Client, e girc.Event) {
|
|
||||||
Target := ircHome
|
|
||||||
if (strings.Contains(girc.Fmt(e.String()), ircHome)) {
|
|
||||||
Target = ircOwner
|
|
||||||
}
|
|
||||||
c.Cmd.Message(Target, "ERR_INVITEONLYCHAN:")
|
|
||||||
c.Cmd.Message(Target, girc.Fmt(e.String()))
|
|
||||||
})
|
|
||||||
client.Handlers.Add(girc.ERR_INVITEONLYCHAN, func(c *girc.Client, e girc.Event) {
|
|
||||||
Phone(c,"ERR_INVITEONLYCHAN:")
|
|
||||||
Phone(c,girc.Fmt(e.String()))
|
|
||||||
})
|
|
||||||
client.Handlers.Add(girc.RPL_WHOISUSER, func(c *girc.Client, e girc.Event) {
|
|
||||||
Phone(c,"RPL_WHOISUSER:")
|
|
||||||
Phone(c,girc.Fmt(e.String()))
|
|
||||||
})
|
|
||||||
client.Handlers.Add(girc.RPL_WHOISOPERATOR, func(c *girc.Client, e girc.Event) {
|
|
||||||
Phone(c,"RPL_WHOISOPERATOR:")
|
|
||||||
Phone(c,girc.Fmt(e.String()))
|
|
||||||
})
|
|
||||||
client.Handlers.Add(girc.RPL_WHOISIDLE, func(c *girc.Client, e girc.Event) {
|
|
||||||
Phone(c,"RPL_WHOISIDLE:")
|
|
||||||
Phone(c,girc.Fmt(e.String()))
|
|
||||||
})
|
|
||||||
client.Handlers.Add(girc.RPL_WHOISSERVER, func(c *girc.Client, e girc.Event) {
|
|
||||||
Phone(c,"RPL_WHOISSERVER:")
|
|
||||||
Phone(c,girc.Fmt(e.String()))
|
|
||||||
})
|
|
||||||
client.Handlers.Add(girc.RPL_WHOISCHANOP, func(c *girc.Client, e girc.Event) {
|
|
||||||
Phone(c,"RPL_WHOISCHANOP:")
|
|
||||||
Phone(c,girc.Fmt(e.String()))
|
|
||||||
})
|
|
||||||
|
|
||||||
client.Handlers.Add(girc.RPL_WHOISCHANOP, func(c *girc.Client, e girc.Event) {
|
|
||||||
Phone(c,"RPL_LINKS:")
|
|
||||||
Phone(c,girc.Fmt(e.String()))
|
|
||||||
})
|
|
||||||
|
|
||||||
client.Handlers.Add(girc.RPL_WHOISCHANOP, func(c *girc.Client, e girc.Event) {
|
|
||||||
Phone(c,"RPL_STATSLINKINFO:")
|
|
||||||
Phone(c,girc.Fmt(e.String()))
|
|
||||||
})
|
|
||||||
|
|
||||||
client.Handlers.Add(girc.RPL_WHOISCHANOP, func(c *girc.Client, e girc.Event) {
|
|
||||||
Phone(c,"RPL_TRACELINK:")
|
|
||||||
Phone(c,girc.Fmt(e.String()))
|
|
||||||
})
|
|
||||||
|
|
||||||
client.Handlers.Add(girc.RPL_TOPICWHOTIME, func(c *girc.Client, e girc.Event) {
|
|
||||||
Chan := strings.Split(e.String(), " ")[4]
|
|
||||||
if Chan != ircHome {
|
|
||||||
Phone(c,"Joined " + Chan + " on " + e.Source.ID())
|
|
||||||
Phone(c,girc.Fmt(e.String()))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
client.Handlers.Add(girc.RPL_NAMREPLY, func(c *girc.Client, e girc.Event) {
|
|
||||||
reply := strings.Split(e.String(), " ")
|
|
||||||
if reply[5] != ircHome {
|
|
||||||
|
|
||||||
for i, h := range reply {
|
|
||||||
if i < 4 { continue }
|
|
||||||
Phone(c,h)
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
ircBanner(c)
|
|
||||||
Phone(c,ircVersion)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
client.Handlers.Add(girc.RPL_WHOISCHANNELS, func(c *girc.Client, e girc.Event) {
|
|
||||||
Phone(c,"RPL_WHOISCHANNELS:")
|
|
||||||
Phone(c,e.String())
|
|
||||||
})
|
|
||||||
|
|
||||||
client.Handlers.Add(girc.PRIVMSG, func(c *girc.Client, e girc.Event) {
|
|
||||||
Sender := e.Source.Name
|
|
||||||
if Sender == "NickServ" {
|
|
||||||
fmt.Println("[IRC] NickServ response: " + e.Last())
|
|
||||||
}
|
|
||||||
if (strings.HasPrefix(e.Last(), "!")) {
|
|
||||||
|
|
||||||
fmt.Println("[IRC] "+e.String())
|
|
||||||
|
|
||||||
thyWill := strings.Split(e.Last(), " ")
|
|
||||||
|
|
||||||
switch thyWill[0] {
|
|
||||||
|
|
||||||
case "!whois":
|
|
||||||
if len(thyWill) == 1 {
|
|
||||||
c.Cmd.ReplyTo(e, girc.Fmt("Usage: !whois nick"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
fmt.Println("[IRC] <"+string(Sender)+"> !spider " + thyWill[1])
|
|
||||||
if girc.IsValidNick(thyWill[1]) {
|
|
||||||
c.Cmd.Whois(thyWill[1])
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
fmt.Println("[IRC] ERROR: Bad whois target!")
|
|
||||||
Phone(c,"Bad Target! Wtf is that shit?")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
case "!spider":
|
|
||||||
thyWill := strings.Split(e.Last(), " ")
|
|
||||||
var thyMark string
|
|
||||||
if len(thyWill) == 1 {
|
|
||||||
c.Cmd.ReplyTo(e, girc.Fmt("Usage: !spider #channel"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
thyMark = thyWill[1]
|
|
||||||
fmt.Println("[IRC] <"+string(Sender)+"> !spider " + thyMark)
|
|
||||||
|
|
||||||
if girc.IsValidChannel(thyMark) {
|
|
||||||
fmt.Println("[IRC][SPIDER] Joining target " + thyMark)
|
|
||||||
Phone(c,"Joining " + thyMark)
|
|
||||||
c.Cmd.Join(thyMark)
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
fmt.Println("[IRC][SPIDER] Bad scan target! " + thyMark)
|
|
||||||
Phone(c,"Bad Target! Wtf is that shit?")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
case "!stop":
|
|
||||||
if Sender == ircOwner {
|
|
||||||
c.Close()
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
c.Cmd.Kick(ircHome,Sender,"yeah okay retard")
|
|
||||||
}
|
|
||||||
|
|
||||||
case "!motd":
|
|
||||||
ircBanner(c)
|
|
||||||
|
|
||||||
case "!cowrie":
|
|
||||||
if (len(thyWill) < 3) {
|
|
||||||
cowSay(c,"Cowrie","-v [0/1] verbose on/off ")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if thyWill[1] == "-v" {
|
|
||||||
if thyWill[2] == "0" {
|
|
||||||
cowVerbose = false
|
|
||||||
cowSay(c,"Aight, den.", "Cowrie verbose log output stopped")
|
|
||||||
}
|
|
||||||
if thyWill[2] == "1" {
|
|
||||||
cowVerbose = true
|
|
||||||
cowSay(c,"I seent em!", "Cowrie verbose log output started")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
case "!telnet":
|
|
||||||
if (len(thyWill) < 3) {
|
|
||||||
Phone(c,"not even sure")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if thyWill[1] == "add" {
|
|
||||||
for i, t := range thyWill {
|
|
||||||
if i < 3 { continue }
|
|
||||||
Phone(c,t)
|
|
||||||
}
|
|
||||||
if thyWill[2] == "0" {
|
|
||||||
cowVerbose = false
|
|
||||||
cowSay(c,"Aight, den.", "Cowrie verbose log output stopped")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
Phone(c,"what")
|
|
||||||
fmt.Println("[IRC] Unknown bot command issued: " + thyWill[0])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
sslString := " "
|
|
||||||
|
|
||||||
////logr.Debug("Parsing proxy URI: " + ProxyURI)
|
|
||||||
//logr.Debug("Validating " + proxyProto + " proxy at host " + proxyHost + " on port " + proxyPort)
|
|
||||||
if ircSSL == true {
|
|
||||||
sslString = "-ssl"
|
|
||||||
}
|
|
||||||
if proxyProto != "false" {
|
|
||||||
ProxyUrl, err := url.Parse(proxyProto + "://" + proxyHost + ":" + proxyPort)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("Proxy URI is malformed!")
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
dialer, _ := proxy.FromURL(ProxyUrl, &net.Dialer{Timeout: 5 * time.Second})
|
|
||||||
for {
|
|
||||||
fmt.Println("[IRC] Dialing through a " + proxyProto + " proxy at host " + proxyHost + " on port " + proxyPort)
|
|
||||||
fmt.Println("[IRC] Connecting to " + ircHost + "/" + strconv.Itoa(ircPort) + " " + sslString)
|
|
||||||
if err := client.DialerConnect(dialer); err != nil {
|
|
||||||
fmt.Println("[IRC] Connection error! " + err.Error())
|
|
||||||
fmt.Println("[IRC] reconnecting...")
|
|
||||||
time.Sleep(1)
|
|
||||||
} else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for {
|
|
||||||
fmt.Println("[IRC] Connecting to " + ircHost + "/" + strconv.Itoa(ircPort) + " " + sslString)
|
|
||||||
if err := client.Connect(); err != nil {
|
|
||||||
fmt.Println("[IRC] Connection error! " + err.Error())
|
|
||||||
fmt.Println("[IRC] reconnecting...")
|
|
||||||
time.Sleep(1)
|
|
||||||
} else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func ircBanner(c *girc.Client) {
|
func ircBanner(c *girc.Client) {
|
||||||
c.Cmd.Message(ircHome, girc.Fmt("{purple,black} {green,black} ___ {purple,black} {c}"))
|
c.Cmd.Message(ircHome, girc.Fmt("{purple,black} {green,black} ___ {purple,black} {c}"))
|
||||||
c.Cmd.Message(ircHome, girc.Fmt("{purple,black} | {green,black}| /|{purple,black} | | {silver,black}v0.1{c}{red,black}a {c}"))
|
c.Cmd.Message(ircHome, girc.Fmt("{purple,black} | {green,black}| /|{purple,black} | | {silver,black}v0.1{c}{red,black}a {c}"))
|
||||||
@ -447,14 +79,3 @@ func ircBanner(c *girc.Client) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
if (len(os.Args) > 2 && os.Args[1] == "client") {
|
|
||||||
//fmt.Println("Starting client...")
|
|
||||||
} else {
|
|
||||||
conBanner()
|
|
||||||
ircbot()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user