diff --git a/.gitignore b/.gitignore index 66fd13c..2928ec4 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ *.out # Dependency directories (remove the comment below to include it) -# vendor/ +vendor/ +.idea/ diff --git a/_example/main.go b/_example/main.go deleted file mode 100644 index 83b6a6e..0000000 --- a/_example/main.go +++ /dev/null @@ -1,19 +0,0 @@ -package main - -import ( - "fmt" - "github.com/yylt/gomsf" -) - -func main(){ - - cli := gomsf.NewMsf("127.0.0.1:55553",true) - token,err:=gomsf.Login(cli,"pass","pass") - if err!= nil { - fmt.Println(err) - return - } - err = gomsf.Logout(cli,token.Token,token.Token) - fmt.Printf("%v\n",err) - -} diff --git a/console.go b/console.go index 59f9a6a..fe63456 100644 --- a/console.go +++ b/console.go @@ -1,5 +1,7 @@ package gomsf +import "fmt" + const ( cslcreate = "console.create" csllist = "console.list" @@ -10,7 +12,7 @@ const ( cslsskill = "console.session_kill" cslssdetach = "console.session_detach" ) -// + type ConsoleInfo struct { Id string `msgpack:"id"` Prompt string `msgpack:"prompt"` @@ -22,131 +24,109 @@ type ConsoleDataInfo struct { Prompt string `msgpack:"prompt"` Busy bool `msgpack:"busy"` } -// -//func (m *MsfGo) ConsoleCreate() (*ConsoleInfo, error) { -// var ( -// bs []byte -// err error -// token = m.GetToken() -// ) -// if token == "" { -// return nil, ErrNotAuth -// } -// bodys := []string{cslcreate, token} -// bs, err = msgpack.Marshal(bodys) -// if err != nil { -// return nil, err -// } -// bs, err = m.send(false, bs) -// if err != nil { -// return nil, err -// } -// var ct ConsoleInfo -// err = msgpack.Unmarshal(bs, &ct) -// if err != nil { -// return nil, err -// } -// return &ct, nil -//} -// -//func (m *MsfGo) ConsoleList() ([]*ConsoleInfo, error) { -// var ( -// bs []byte -// err error -// token = m.GetToken() -// infos []*ConsoleInfo -// ) -// if token == "" { -// return nil, ErrNotAuth -// } -// bodys := []string{csllist, token} -// bs, err = msgpack.Marshal(bodys) -// if err != nil { -// return nil, err -// } -// bs, err = m.send(false, bs) -// if err != nil { -// return nil, err -// } -// var ct = map[string]*ConsoleInfo{} -// err = msgpack.Unmarshal(bs, &ct) -// if err != nil { -// return nil, err -// } -// for _, v := range ct { -// infos = append(infos, v) -// } -// return infos, nil -//} -// -//func (m *MsfGo) ConsoleDestroy(id string) error { -// var ( -// bs []byte -// err error -// token = m.GetToken() -// ) -// if token == "" { -// return ErrNotAuth -// } -// bodys := []string{cslrm, token, id} -// bs, err = msgpack.Marshal(bodys) -// if err != nil { -// return err -// } -// _, err = m.send(true, bs) -// return err -//} -// -//func (m *MsfGo) ConsoleWrite(cmd string) error { -// var ( -// bs []byte -// err error -// token = m.GetToken() -// ) -// if token == "" { -// return ErrNotAuth -// } -// cmd = fmt.Sprintf("%s\n", cmd) -// length := len(cmd) -// bodys := []string{cslwrite, token, cmd} -// bs, err = msgpack.Marshal(bodys) -// if err != nil { -// return err -// } -// var ct = map[string]int{} -// bs, err = m.send(false, bs) -// err = msgpack.Unmarshal(bs, &ct) -// if err != nil { -// return err -// } -// if v, ok := ct["wrote"]; ok { -// if v == length { -// return nil -// } -// return fmt.Errorf("wrong length %d", v) -// } -// return fmt.Errorf("wrong return-type: %v", ct) -//} -// -//func (m *MsfGo) ConsoleRead(id string) (string, error) { -// var ( -// bs []byte -// err error -// token = m.GetToken() -// ) -// if token == "" { -// return "", ErrNotAuth -// } -// bodys := []string{cslread, token, id} -// bs, err = msgpack.Marshal(bodys) -// if err != nil { -// return "", err -// } -// var ct ConsoleDataInfo -// bs, err = m.send(false, bs) -// err = msgpack.Unmarshal(bs, &ct) -// if err != nil { -// return "", err -// } -// return strings.TrimSpace(ct.Data), nil -//} + +type ConsoleTabInfo struct { + Tabs []string `msgpack:"tabs"` +} + +func ConsoleCreate(cli MsfCli, token string) (*ConsoleInfo, error) { + var ( + retv *ConsoleInfo + sts = []string{cslcreate, token} + ) + err := cli.Send(sts, &retv) + if err != nil { + return nil, err + } + return retv, nil +} + +func ConsoleDestory(cli MsfCli, token, consoleId string) (*Generic, error) { + var ( + retv *Generic + sts = []string{cslrm, token, consoleId} + ) + err := cli.Send(sts, &retv) + if err != nil { + return nil, err + } + return retv, nil +} + +func ConsoleList(cli MsfCli, token string) ([]*ConsoleInfo, error) { + var ( + retv []*ConsoleInfo + sts = []string{csllist, token} + ) + err := cli.Send(sts, &retv) + if err != nil { + return nil, err + } + return retv, nil +} + +func ConsoleWrite(cli MsfCli, token, consoleId string, data []byte) error { + var ( + sts = []string{cslwrite, token, consoleId, string(data)} + ) + var ret struct { + Wrote int `msgpack:"wrote"` + } + var r = &ret + err := cli.Send(sts, &r) + if err != nil { + return err + } + if ret.Wrote != len(data) { + return fmt.Errorf("write %d, but expect %d", ret.Wrote, len(data)) + } + return nil +} + +func ConsoleRead(cli MsfCli, token, consoleId string) (*ConsoleDataInfo, error) { + var ( + retv *ConsoleDataInfo + sts = []string{cslread, token, consoleId} + ) + err := cli.Send(sts, &retv) + if err != nil { + return nil, err + } + return retv, nil +} + +func ConsoleSessDetach(cli MsfCli, token, consoleId string) (*Generic, error) { + var ( + retv *Generic + sts = []string{cslssdetach, token, consoleId} + ) + err := cli.Send(sts, &retv) + if err != nil { + return nil, err + } + return retv, nil +} + +func ConsoleSessKill(cli MsfCli, token, consoleId string) (*Generic, error) { + var ( + retv *Generic + sts = []string{cslsskill, token, consoleId} + ) + err := cli.Send(sts, &retv) + if err != nil { + return nil, err + } + return retv, nil +} + +func ConsoleTabs(cli MsfCli, token, consoleId, input string) (*ConsoleTabInfo, error) { + var ( + retv *ConsoleTabInfo + sts = []string{csltabs, token, consoleId, input} + ) + err := cli.Send(sts, &retv) + if err != nil { + return nil, err + } + return retv, nil +} diff --git a/core.go b/core.go index 649741e..2f3b316 100644 --- a/core.go +++ b/core.go @@ -1,33 +1,63 @@ package gomsf + //TODO const ( coreAddModePath = "core.add_module_path" - coreModeStat = "core.module_stats" - coreReloadMode = "core.reload_modules" - coreSave = "core.save" - coreVersion = "core.version" - coreStop = "core.stop" + coreModeStat = "core.module_stats" + coreReloadMode = "core.reload_modules" + coreSave = "core.save" + coreVersion = "core.version" + coreStop = "core.stop" ) - type ModuleInfo struct { - Exploits string `msgpack:"exploits"` - Auxs string `msgpack:"auxiliary"` - Posts string `msgpack:"post"` - Encoders string `msgpack:"encoders"` - Nops string `msgpack:"nops"` - Payloads string `msgpack:"payloads"` + Exploits string `msgpack:"exploits"` + Auxs string `msgpack:"auxiliary"` + Posts string `msgpack:"post"` + Encoders string `msgpack:"encoders"` + Nops string `msgpack:"nops"` + Payloads string `msgpack:"payloads"` +} + +type VersionInfo struct { + Version string `msgpack:"version"` + Ruby string `msgpack:"ruby"` + Api string `msgpack:"api"` } func AddModulePath(cli MsfCli, user, pass string) (*ModuleInfo, error) { var ( retv *ModuleInfo - sts = []string{coreAddModePath, user, pass} + sts = []string{coreAddModePath, user, pass} ) - err := cli.Send(sts,&retv) + err := cli.Send(sts, &retv) if err != nil { return nil, err } - return retv,nil -} \ No newline at end of file + return retv, nil +} + +func Version(cli MsfCli, token string) (*VersionInfo, error) { + var ( + retv *VersionInfo + sts = []string{coreVersion, token} + ) + err := cli.Send(sts, &retv) + if err != nil { + return nil, err + } + return retv, nil +} + +func Stop(cli MsfCli, token string) (*Generic, error) { + var ( + retv *Generic + sts = []string{coreStop, token} + ) + err := cli.Send(sts, &retv) + if err != nil { + return nil, err + } + return retv, nil +} diff --git a/core_thread.go b/core_thread.go index f41b53a..afee2e1 100644 --- a/core_thread.go +++ b/core_thread.go @@ -7,66 +7,74 @@ import ( const ( coreThreadList = "core.thread_list" - coreThreadKill = "core.thread_kill" + coreThreadKill = "core.thread_kill" - - coreSetg = "core.setg" - coreUnSetg = "core.unsetg" + coreSetg = "core.setg" + coreUnSetg = "core.unsetg" ) type ThreadInfo struct { - Status string `msgpack:"status"` - Critical bool `msgpack:"critical"` - Name string `msgpack:"name"` - Started time.Time `msgpack:"started"` + Status string `msgpack:"status"` + Critical bool `msgpack:"critical"` + Name string `msgpack:"name"` + Started time.Time `msgpack:"started"` } -//TODO Should erase had seted? -func SetOption(cli MsfCli, token string, kvs ...string) (error) { +//TODO Should remove options when failed? +func SetOption(cli MsfCli, token string, kvs ...string) error { var ( err error sts = []string{coreSetg, token, "", ""} ) - if len(kvs)==0 || len(kvs) % 2 !=0 { + if len(kvs) == 0 || len(kvs)%2 != 0 { return fmt.Errorf("kv list is not odd or nil!") } - for i:=0;i