Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "log"
- "os"
- "time"
- "github.com/reiver/go-oi"
- "github.com/reiver/go-telnet"
- )
- var out *os.File
- func main() {
- var err error
- out, err = os.OpenFile("./results.list", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)
- if err != nil {
- panic(err)
- }
- //defer fuser.Close()
- var handler telnet.Handler = DumpEchoHandler
- err = telnet.ListenAndServe(":23", handler)
- if nil != err {
- //@TODO: Handle this error better.
- panic(err)
- }
- }
- //DumpEchoHandler dump/b honeypot telnet handler
- var DumpEchoHandler = handler{}
- type handler struct{}
- func readLine(r telnet.Reader) (string, error) {
- var output string
- buffer := make([]byte, 1)
- for {
- _, err := r.Read(buffer)
- if nil != err {
- return "", err
- }
- if buffer[0] == '\r' {
- continue //Return line
- }
- if buffer[0] == '\n' {
- break //End of line
- }
- output += string(buffer)
- }
- return output, nil
- }
- func (h handler) ServeTELNET(ctx telnet.Context, w telnet.Writer, r telnet.Reader) {
- oi.LongWriteString(w, "\n")
- for i := 0; i < 3; i++ {
- time.Sleep(100 * time.Millisecond)
- oi.LongWriteString(w, "IPC login: ")
- user, err := readLine(r)
- if nil != err {
- //panic(err)
- break
- }
- if user == "" {
- continue //Skip empy user
- }
- time.Sleep(100 * time.Millisecond)
- //TODO find how to hide pass prompt
- //oi.LongWrite(w, []byte{0xFF, 0xFC, 0x01})
- //oi.LongWriteString(w, "\033[?25h")
- oi.LongWriteString(w, "Password: ")
- pass, err := readLine(r)
- if nil != err {
- //panic(err)
- break
- }
- log.Println(user, pass)
- if _, err = out.WriteString(user + ":" + pass + "\n"); err != nil {
- //panic(err)
- break
- }
- out.Sync()
- time.Sleep(1 * time.Second)
- oi.LongWriteString(w, "Login incorrect\n")
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement