完成简单的漏洞报告功能

This commit is contained in:
chenxinquan 2022-12-07 15:17:34 +08:00
parent c86bb0deed
commit fe9f46216e
85 changed files with 613 additions and 399 deletions

0
.gitignore vendored Executable file → Normal file
View File

0
LICENSE Executable file → Normal file
View File

0
Makefile Executable file → Normal file
View File

0
README.md Executable file → Normal file
View File

0
data/config_template/common/CVE-2021-3156-another.yaml Executable file → Normal file
View File

0
data/config_template/common/CVE-2021-3156.json Executable file → Normal file
View File

0
data/config_template/common/CVE-2021-3156.yaml Executable file → Normal file
View File

0
data/config_template/common/ExplorersListConfig.json Executable file → Normal file
View File

0
data/config_template/common/ExplorersListConfig.yaml Executable file → Normal file
View File

0
data/config_template/common/Sample1.json Executable file → Normal file
View File

0
data/config_template/common/bin/ls Executable file → Normal file
View File

0
data/config_template/common/bin/man Executable file → Normal file
View File

0
data/config_template/kernel/CVE-2021-3156.yaml Executable file → Normal file
View File

0
data/config_template/sample1.yaml Executable file → Normal file
View File

View File

0
data/config_template/web/CVE-2021-22205.yaml Executable file → Normal file
View File

0
data/pocs/CVE-2021-22555/CVE-2021-22555.c Executable file → Normal file
View File

0
data/pocs/CVE-2021-22555/CVE-2021-22555.yaml Executable file → Normal file
View File

0
data/pocs/CVE-2021-22555/for_test_inter.cpp Executable file → Normal file
View File

0
data/pocs/CVE-2021-22555/test_process Executable file → Normal file
View File

0
data/pocs/CVE-2021-22555/test_process.go Executable file → Normal file
View File

0
data/pocs/CVE-2021-3156/CVE-2021-3156.json Executable file → Normal file
View File

0
data/pocs/CVE-2021-3156/CVE-2021-3156.yaml Executable file → Normal file
View File

0
data/pocs/CVE-2021-3156/Makefile Executable file → Normal file
View File

0
data/pocs/CVE-2021-3156/README.md Executable file → Normal file
View File

0
data/pocs/CVE-2021-3156/exploit.c Executable file → Normal file
View File

View File

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

0
data/pocs/CVE-2021-3156/libnss_x/x.so.2 Executable file → Normal file
View File

0
data/pocs/CVE-2021-3156/shellcode.c Executable file → Normal file
View File

0
data/pocs/pocs.json Executable file → Normal file
View File

3
data/pocs/pocs.yaml Executable file → Normal file
View File

@ -1,4 +1,5 @@
ConfigFilePrefix: /home/test/桌面/genmai/data/pocs/
#ConfigFilePrefix: /home/test/桌面/genmai/data/pocs/
ConfigFilePrefix: /home/alpha/Developments/kylinprojects/genmai/data/pocs/
ExplorerItems:
- Type: kernel
ConfigFile: CVE-2021-3156/CVE-2021-3156.yaml

0
docs/test Executable file → Normal file
View File

0
image/frameworker.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

0
image/mod.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 95 KiB

3
src/gconsole/FrameBase.go Executable file → Normal file
View File

@ -32,7 +32,8 @@ import (
"github.com/jesseduffield/gocui"
)
type FrameBase interface{
type
FrameBase interface {
Setup()
Quit(g *gocui.Gui, v*gocui.View)
KeyBinding(g *gocui.Gui)

3
src/gconsole/FrameMain.go Executable file → Normal file
View File

@ -31,7 +31,8 @@ package gconsole
import (
)
type FrameMain struct {
type
FrameMain struct {
Title string
}

6
src/gconsole/FrameMainKBind.go Executable file → Normal file
View File

@ -33,7 +33,8 @@ import (
)
// TODO: to make it can config
func (fm *FrameMain)KeyBinding(g *gocui.Gui) error {
func
(fm *FrameMain)KeyBinding(g *gocui.Gui) error {
rcs := []error{}
// Program Command
@ -99,6 +100,7 @@ func (fm *FrameMain)KeyBinding(g *gocui.Gui) error {
return nil
}
func (fm *FrameMain)Quit(g *gocui.Gui, v*gocui.View) error {
func
(fm *FrameMain)Quit(g *gocui.Gui, v*gocui.View) error {
return gocui.ErrQuit
}

24
src/gconsole/FrameMainView.go Executable file → Normal file
View File

@ -41,29 +41,37 @@ const (
///////////////////////////////
// navigation
func (fm *FrameMain)NextView(g *gocui.Gui, v *gocui.View) error {
func
(fm *FrameMain)NextView(g *gocui.Gui, v *gocui.View) error {
return nil
}
func (fm *FrameMain)PreView(g *gocui.Gui, v *gocui.View) error {
func
(fm *FrameMain)PreView(g *gocui.Gui, v *gocui.View) error {
return nil
}
/* */
func (fm *FrameMain)NextSummary(g *gocui.Gui, v *gocui.View) error {
func
(fm *FrameMain)NextSummary(g *gocui.Gui, v *gocui.View) error {
return nil
}
func (fm *FrameMain)PreSummary(g *gocui.Gui, v *gocui.View) error {
func
(fm *FrameMain)PreSummary(g *gocui.Gui, v *gocui.View) error {
return nil
}
/* */
func (fm *FrameMain)CursorDown(g *gocui.Gui, v *gocui.View) error {
func
(fm *FrameMain)CursorDown(g *gocui.Gui, v *gocui.View) error {
return nil
}
func (fm *FrameMain)CursorUp(g *gocui.Gui, v *gocui.View) error {
func
(fm *FrameMain)CursorUp(g *gocui.Gui, v *gocui.View) error {
return nil
}
func (fm *FrameMain)CursorPageDown(g *gocui.Gui, v *gocui.View) error {
func
(fm *FrameMain)CursorPageDown(g *gocui.Gui, v *gocui.View) error {
return nil
}
func (fm *FrameMain)CursorPageUp(g *gocui.Gui, v *gocui.View) error {
func
(fm *FrameMain)CursorPageUp(g *gocui.Gui, v *gocui.View) error {
return nil
}

37
src/gconsole/FrameReport.go Executable file → Normal file
View File

@ -33,30 +33,33 @@ import (
"main/genmai"
)
type FrameReport struct {
reports []genmai.ReportBase
curReport genmai.ReportBase
type
FrameReport struct {
reports []genmai.ReportKernel
curReport genmai.ReportKernel
vulnInfos []genmai.VulnInfoCommon
curVulnInfo int
curVulnInfoViewLimitY int
curVuln int
curVulnViewLimitY int
curReportViewLimitY int
}
var G_FrameReport FrameReport
// TODO: may be should remove this function
func (fr *FrameReport)Setup() {
fr.reports = append(fr.reports, genmai.GetTemplateReportKernel())
fr.reports = append(fr.reports, genmai.GetTemplateReportKernel())
func
(fr *FrameReport)Setup(rps []genmai.ReportKernel) {
// fr.reports = append(fr.reports, genmai.GetTemplateReportKernel())
// fr.reports = append(fr.reports, genmai.GetTemplateReportKernel())
// /* */
// fr.reports = append(fr.reports, genmai.GetTemplateReportDBus())
// fr.reports = append(fr.reports, genmai.GetTemplateReportDBus())
// /* */
// fr.reports = append(fr.reports, genmai.GetTemplateReportSystem())
// fr.reports = append(fr.reports, genmai.GetTemplateReportSystem())
/* */
fr.reports = append(fr.reports, genmai.GetTemplateReportDBus())
fr.reports = append(fr.reports, genmai.GetTemplateReportDBus())
/* */
fr.reports = append(fr.reports, genmai.GetTemplateReportSystem())
fr.reports = append(fr.reports, genmai.GetTemplateReportSystem())
//fr.curReport =
/* */
fr.curVulnInfo = 1
fr.curVulnInfoViewLimitY = 1
fr.reports = rps
fr.curReport = rps[0]
fr.curVuln = 0
fr.curVulnViewLimitY = 1
fr.curReportViewLimitY = 1
}

6
src/gconsole/FrameReportKBind.go Executable file → Normal file
View File

@ -33,7 +33,8 @@ import (
)
// TODO: to make it can config
func (fr *FrameReport)KeyBinding(g *gocui.Gui) error {
func
(fr *FrameReport)KeyBinding(g *gocui.Gui) error {
rcs := []error{}
// Program Command
@ -261,6 +262,7 @@ func (fr *FrameReport)KeyBinding(g *gocui.Gui) error {
return nil
}
func (fr *FrameReport)Quit(g *gocui.Gui, v*gocui.View) error {
func
(fr *FrameReport)Quit(g *gocui.Gui, v*gocui.View) error {
return gocui.ErrQuit
}

130
src/gconsole/FrameReportView.go Executable file → Normal file
View File

@ -31,7 +31,7 @@ package gconsole
import (
"fmt"
//"strings"
//"errors"
"errors"
"github.com/jesseduffield/gocui"
)
@ -42,7 +42,8 @@ const (
FRAMEREPORTVIEW_VIEWNAME_REPORT string = "report"
)
type ViewRact struct {
type
ViewRact struct {
Left int
Top int
Right int
@ -51,25 +52,29 @@ type ViewRact struct {
///////////////////////////////
// layout ract
func VIEWRACT_TARGET(maxx int, maxy int) ViewRact {
func
VIEWRACT_TARGET(maxx int, maxy int) ViewRact {
return ViewRact{(-1),
(-1),
32,
maxy }
}
func VIEWRACT_VULN(maxx int, maxy int) ViewRact {
func
VIEWRACT_VULN(maxx int, maxy int) ViewRact {
return ViewRact{32,
-1,
maxx,
int(float64(maxy)*0.3) }
}
func VIEWRACT_VULNINFO(maxx int, maxy int) ViewRact {
func
VIEWRACT_VULNINFO(maxx int, maxy int) ViewRact {
return ViewRact{32 + (int(float64(maxx - 32)*0.5)),
(int(float64(maxy)*0.3)),
maxx,
maxy }
}
func VIEWRACT_REPORT(maxx int, maxy int) ViewRact {
func
VIEWRACT_REPORT(maxx int, maxy int) ViewRact {
return ViewRact{32,
(int(float64(maxy)*0.3)),
32 + (int(float64(maxx - 32)*0.5)),
@ -78,7 +83,8 @@ func VIEWRACT_REPORT(maxx int, maxy int) ViewRact {
// layout ract
///////////////////////////////
func (fr *FrameReport)SetTargetLayout(g *gocui.Gui) error {
func
(fr *FrameReport)SetTargetLayout(g *gocui.Gui) error {
viewract := VIEWRACT_TARGET(g.Size())
view, rc := g.SetView(FRAMEREPORTVIEW_VIEWNAME_TARGET,
@ -102,9 +108,17 @@ func (fr *FrameReport)SetTargetLayout(g *gocui.Gui) error {
rpt.GetReportCommon().RCExploredIPv6Addrs[0] +
":" +
rpt.GetReportCommon().RCExploredIPv4Addrs[0] )
} // for _, rp ...
} // for _, rpt ...
if ( 0 == len(fr.reports) ) {
A_DEBUG_WARNING("No report!")
/* */
// TODO
return errors.New("No report!")
}
fr.curReport = fr.reports[0]
rc = g.SetCurrentView(FRAMEREPORTVIEW_VIEWNAME_TARGET)
/* */
if (nil != rc) {
@ -115,7 +129,8 @@ func (fr *FrameReport)SetTargetLayout(g *gocui.Gui) error {
return nil
}
func (fr *FrameReport)SetVulnLayout(g *gocui.Gui) error {
func
(fr *FrameReport)SetVulnLayout(g *gocui.Gui) error {
viewract := VIEWRACT_VULN(g.Size())
view, rc := g.SetView(FRAMEREPORTVIEW_VIEWNAME_VULN,
@ -132,7 +147,7 @@ func (fr *FrameReport)SetVulnLayout(g *gocui.Gui) error {
view.Wrap = false
// TODO: the initial number:0, not that precise
for _, vinfo := range fr.reports[0].GetReportCommon().RCExploredVulns {
for _, vinfo := range fr.curReport.GetReportCommon().RCExploredVulns {
fmt.Fprintln(view, vinfo)
} // for _, vinfo ...
} // if (nil ...
@ -140,7 +155,8 @@ func (fr *FrameReport)SetVulnLayout(g *gocui.Gui) error {
return nil
}
func (fr *FrameReport)SetVulnInfoLayout(g *gocui.Gui) error {
func
(fr *FrameReport)SetVulnInfoLayout(g *gocui.Gui) error {
viewract := VIEWRACT_VULNINFO(g.Size())
view, rc := g.SetView(FRAMEREPORTVIEW_VIEWNAME_VULNINFO,
@ -153,7 +169,7 @@ func (fr *FrameReport)SetVulnInfoLayout(g *gocui.Gui) error {
}
// TODO: the initial number:0, not that precise
fmt.Fprintln(view, fr.reports[0].GetReportCommon().RCExploredVulns[0])
fmt.Fprintln(view, fr.curReport.GetReportCommon().RCExploredVulns[fr.curVuln])
view.Editable = false
view.Wrap = false
@ -162,7 +178,8 @@ func (fr *FrameReport)SetVulnInfoLayout(g *gocui.Gui) error {
return nil
}
func (fr *FrameReport)SetReportLayout(g *gocui.Gui) error {
func
(fr *FrameReport)SetReportLayout(g *gocui.Gui) error {
viewract := VIEWRACT_REPORT(g.Size())
view, rc := g.SetView(FRAMEREPORTVIEW_VIEWNAME_REPORT,
@ -176,10 +193,10 @@ func (fr *FrameReport)SetReportLayout(g *gocui.Gui) error {
}
// TODO: the initial number:0, not that precise
fmt.Fprintln(view, fr.reports[0].GetReportCommon().RCServerUUID)
fmt.Fprintln(view, fr.reports[0].GetReportCommon().RCServerName)
fmt.Fprintln(view, fr.reports[0].GetReportCommon().RCFamily)
fmt.Fprintln(view, fr.reports[0].GetReportCommon())
fmt.Fprintln(view, fr.curReport.GetReportCommon().RCServerUUID)
fmt.Fprintln(view, fr.curReport.GetReportCommon().RCServerName)
fmt.Fprintln(view, fr.curReport.GetReportCommon().RCFamily)
fmt.Fprintln(view, fr.curReport.GetReportCommon())
view.Editable = false
view.Wrap = false
@ -190,7 +207,8 @@ func (fr *FrameReport)SetReportLayout(g *gocui.Gui) error {
///////////////////////////////
// navigation
func (fr *FrameReport)NextView(g *gocui.Gui, v *gocui.View) error {
func
(fr *FrameReport)NextView(g *gocui.Gui, v *gocui.View) error {
var rc error
if (nil == v) {
@ -212,7 +230,8 @@ func (fr *FrameReport)NextView(g *gocui.Gui, v *gocui.View) error {
return rc
}
func (fr *FrameReport)PreView(g *gocui.Gui, v *gocui.View) error {
func
(fr *FrameReport)PreView(g *gocui.Gui, v *gocui.View) error {
var rc error
if (nil == v) {
@ -235,14 +254,17 @@ func (fr *FrameReport)PreView(g *gocui.Gui, v *gocui.View) error {
return rc
}
/* */
func (fr *FrameReport)NextVulnItem(g *gocui.Gui, v *gocui.View) error {
func
(fr *FrameReport)NextVulnItem(g *gocui.Gui, v *gocui.View) error {
return nil
}
func (fr *FrameReport)PreVulnItem(g *gocui.Gui, v *gocui.View) error {
func
(fr *FrameReport)PreVulnItem(g *gocui.Gui, v *gocui.View) error {
return nil
}
/* */
func (fr *FrameReport)CursorDown(g *gocui.Gui, v *gocui.View) error {
func
(fr *FrameReport)CursorDown(g *gocui.Gui, v *gocui.View) error {
if (nil != v) {
cx, cy := v.Cursor()
ox, oy := v.Origin()
@ -277,7 +299,8 @@ func (fr *FrameReport)CursorDown(g *gocui.Gui, v *gocui.View) error {
return nil
}
func (fr *FrameReport)CursorUp(g *gocui.Gui, v *gocui.View) error {
func
(fr *FrameReport)CursorUp(g *gocui.Gui, v *gocui.View) error {
if (nil != v) {
ox, oy := v.Origin()
cx, cy := v.Cursor()
@ -297,17 +320,20 @@ func (fr *FrameReport)CursorUp(g *gocui.Gui, v *gocui.View) error {
/* */
return nil
}
func (fr *FrameReport)CursorPageDown(g *gocui.Gui, v *gocui.View) error {
func
(fr *FrameReport)CursorPageDown(g *gocui.Gui, v *gocui.View) error {
return nil
}
func (fr *FrameReport)CursorPageUp(g *gocui.Gui, v *gocui.View) error {
func
(fr *FrameReport)CursorPageUp(g *gocui.Gui, v *gocui.View) error {
return nil
}
///////////////////////////////
// Utils
func (fr *FrameReport)movable(v *gocui.View, nextY int) (ok bool, yLimit int) {
func
(fr *FrameReport)movable(v *gocui.View, nextY int) (ok bool, yLimit int) {
switch ( v.Name() ) {
case FRAMEREPORTVIEW_VIEWNAME_TARGET:
yLimit = len(fr.reports) - 1
@ -325,7 +351,7 @@ func (fr *FrameReport)movable(v *gocui.View, nextY int) (ok bool, yLimit int) {
/* */
return true, yLimit
case FRAMEREPORTVIEW_VIEWNAME_VULNINFO:
return false, fr.curVulnInfoViewLimitY
return false, fr.curVulnViewLimitY
case FRAMEREPORTVIEW_VIEWNAME_REPORT:
return false, fr.curReportViewLimitY
default:
@ -334,13 +360,29 @@ func (fr *FrameReport)movable(v *gocui.View, nextY int) (ok bool, yLimit int) {
}
// redraw views
func (fr *FrameReport)onMovingCursorRedrawView(g *gocui.Gui, v *gocui.View) error {
func
(fr *FrameReport)onMovingCursorRedrawView(g *gocui.Gui, v *gocui.View) error {
switch ( v.Name() ) {
case FRAMEREPORTVIEW_VIEWNAME_TARGET:
if rc := fr.redrawViewTarget(g, v); (nil != rc) {
return rc
}
case FRAMEREPORTVIEW_VIEWNAME_VULN:
// we don't need to redraw
// if rc := fr.redrawViewVuln(g, v); (nil != rc) {
// return rc
// } // if rc := ...
// /* */
// we just need to chage fr.curVuln
_, cy := v.Cursor()
_, rc_t := v.Line(cy)
rc := rc_t
if (nil != rc) {
return rc
} // if (nil != ...
// TODO: 这样不够准确
fr.curVuln = cy
if rc := fr.redrawViewVulnInfo(g); (nil != rc) {
return rc
} // if rc := ...
@ -352,7 +394,8 @@ func (fr *FrameReport)onMovingCursorRedrawView(g *gocui.Gui, v *gocui.View) erro
return nil
}
func (fr *FrameReport)redrawViewTarget(g *gocui.Gui, v *gocui.View) error {
func
(fr *FrameReport)redrawViewTarget(g *gocui.Gui, v *gocui.View) error {
rc := g.DeleteView(FRAMEREPORTVIEW_VIEWNAME_REPORT)
/* */
if (nil != rc) {
@ -405,7 +448,31 @@ func (fr *FrameReport)redrawViewTarget(g *gocui.Gui, v *gocui.View) error {
return rc
}
func (fr *FrameReport)redrawViewVulnInfo(g *gocui.Gui) error {
func
(fr *FrameReport)redrawViewVuln(g *gocui.Gui, v *gocui.View) error {
rc := g.DeleteView(FRAMEREPORTVIEW_VIEWNAME_VULN)
/* */
if (nil != rc) {
return rc
} // if (nil ...
_, cy := v.Cursor()
_, rc_t := v.Line(cy)
rc = rc_t
if (nil != rc) {
return rc
} // if (nil != ...
//targetname := strings.TrimSpace(l)
// TODO: 这样不够准确
fr.curVuln = cy
return fr.SetVulnLayout(g)
}
func
(fr *FrameReport)redrawViewVulnInfo(g *gocui.Gui) error {
rc := g.DeleteView(FRAMEREPORTVIEW_VIEWNAME_VULNINFO)
/* */
if (nil != rc) {
@ -415,7 +482,8 @@ func (fr *FrameReport)redrawViewVulnInfo(g *gocui.Gui) error {
return fr.SetVulnInfoLayout(g)
}
func (fr *FrameReport)redrawViewReport(g *gocui.Gui) error {
func
(fr *FrameReport)redrawViewReport(g *gocui.Gui) error {
rc := g.DeleteView(FRAMEREPORTVIEW_VIEWNAME_REPORT)
/* */
if (nil != rc) {

100
src/gconsole/Utils.go Normal file
View File

@ -0,0 +1,100 @@
////////////////////////////////////////////////////////////////
//
// Filename: Utils.go
//
// Version: 1.0
// Created: 2022年11月08日 21时05分02秒
// Revision: none
// Compiler: go
//
// Author: alpha
// Organization: alpha
// Contacts: chenxinquan@kylinos.com
//
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// Description:
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// Log:
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// Todo:
//
////////////////////////////////////////////////////////////////
package gconsole
import (
"fmt"
"os"
"strings"
// "log"
)
var A_DEBUG_LEVEL int = 0
var A_DEBUG_NEED_HEAD bool = true
////////////////////////////////////////////////////////////////
// ALOG
const (
A_DEBUG_LEVEL_INFO int = 0
A_DEBUG_LEVEL_NOTE int = 1
A_DEBUG_LEVEL_WARNING int = 2
A_DEBUG_LEVEL_ERROR int = 3
A_DEBUG_LEVEL_STR_INFO string = "info"
A_DEBUG_LEVEL_STR_NOTE string = "note"
A_DEBUG_LEVEL_STR_WARNING string = "warning"
A_DEBUG_LEVEL_STR_ERROR string = "error"
)
func A_DEBUG(head string, args ...interface{}) {
if (true == A_DEBUG_NEED_HEAD) {
fmt.Print(head)
}
fmt.Println(args...)
}
func A_DEBUG_INFO(args ...interface{}) {
if (A_DEBUG_LEVEL <= A_DEBUG_LEVEL_INFO) {
A_DEBUG(A_DEBUG_LEVEL_STR_INFO + ":", args...)
}
}
func A_DEBUG_NOTE(args ...interface{}) {
if (A_DEBUG_LEVEL <= A_DEBUG_LEVEL_NOTE) {
A_DEBUG(A_DEBUG_LEVEL_STR_NOTE + ":", args...)
}
}
func A_DEBUG_WARNING(args ...interface{}) {
if (A_DEBUG_LEVEL <= A_DEBUG_LEVEL_WARNING) {
A_DEBUG(A_DEBUG_LEVEL_STR_WARNING + ":", args...)
}
}
func A_DEBUG_ERROR(args ...interface{}) {
if (A_DEBUG_LEVEL <= A_DEBUG_LEVEL_ERROR) {
A_DEBUG(A_DEBUG_LEVEL_STR_ERROR + ":", args...)
}
}
////////////////////////////////////////////////////////////////
// File , Path
func GetPrefixPath(path string) string {
index := strings.LastIndex(path, string(os.PathSeparator))
/* */
return path[:index]
}
func GetSubfixPath(path string) string {
index := strings.LastIndex(path, string(os.PathSeparator))
/* */
return path[(index+1):]
}
func GetSubfixFile(path string) string {
index := strings.LastIndex(path, ".")
/* */
return path[index:]
}

18
src/gconsole/gconsole.go Executable file → Normal file
View File

@ -33,10 +33,21 @@ import (
//"log"
"github.com/jesseduffield/gocui"
"main/genmai"
)
func Draw() (rc error) {
G_FrameReport.Setup()
func
Draw() (rc error) {
genmai.DoctorIns().Reset()
// genmai.DoctorIns().LoadExplorersListConfig("/home/test/桌面/genmai/data/pocs/pocs.yaml")
genmai.DoctorIns().LoadExplorersListConfig("/home/alpha/Developments/kylinprojects/genmai/data/pocs/pocs.yaml")
var rpks []genmai.ReportKernel
A_DEBUG_INFO(">>Genmai>>")
rpk := genmai.DoctorIns().Genmai()
rpks = append(rpks, rpk)
G_FrameReport.Setup(rpks)
g := gocui.NewGui()
g.Init()
@ -58,7 +69,8 @@ func Draw() (rc error) {
return rc
}
func layout(g *gocui.Gui) error {
func
layout(g *gocui.Gui) error {
rc := G_FrameReport.SetTargetLayout(g)
/* */
if (nil != rc) {

0
src/genmai/ArgParser/ArgSecurityCheck.go Executable file → Normal file
View File

0
src/genmai/ArgParser/ParameterParser.go Executable file → Normal file
View File

0
src/genmai/Cache/Cache.go Executable file → Normal file
View File

3
src/genmai/ConfigParserBase.go Executable file → Normal file
View File

@ -43,7 +43,8 @@ var (
errors.New("The config file is nil")
)
type ConfigParserBase interface {
type
ConfigParserBase interface {
Parse(file string) (rc error)
Mashal(file string) (rc error)
}

12
src/genmai/ConfigParserDefault.go Executable file → Normal file
View File

@ -47,11 +47,13 @@ import (
Center in the future
*/
// 继承于 ConfigParserBase接口
type ConfigParserDefault map[string]interface {}
type
ConfigParserDefault map[string]interface {}
///////////////////////////////
// override ConfigParserBase functions
func (cpd *ConfigParserDefault)Parse(file string) (rc error) {
func
(cpd *ConfigParserDefault)Parse(file string) (rc error) {
configfile, ok := os.Open(file)
rc = ok;
/* */
@ -77,7 +79,8 @@ func (cpd *ConfigParserDefault)Parse(file string) (rc error) {
return rc
}
func (cpd *ConfigParserDefault)Mashal(file string) (rc error) {
func
(cpd *ConfigParserDefault)Mashal(file string) (rc error) {
if (nil == cpd) {
rc = RC_ERR_EMPTY_INTERFACE
return
@ -111,6 +114,7 @@ func (cpd *ConfigParserDefault)Mashal(file string) (rc error) {
////////////////////////////////////////////////////////////////
// others
func NewConfig() ConfigParserBase {
func
NewConfig() ConfigParserBase {
return &ConfigParserDefault{}
}

9
src/genmai/ConfigParserJSON.go Executable file → Normal file
View File

@ -39,11 +39,13 @@ import (
// ConfigParserJSON
// 继承于 ConfigParserBase接口
type ConfigParserJSON map[string]interface {}
type
ConfigParserJSON map[string]interface {}
///////////////////////////////
// override ConfigParserBase functions
func (cpj *ConfigParserJSON)Parse(file string) (rc error) {
func
(cpj *ConfigParserJSON)Parse(file string) (rc error) {
configfile, ok := os.Open(file)
rc = ok;
/* */
@ -63,7 +65,8 @@ func (cpj *ConfigParserJSON)Parse(file string) (rc error) {
return rc
}
func (cpj *ConfigParserJSON)Mashal(file string) (rc error) {
func
(cpj *ConfigParserJSON)Mashal(file string) (rc error) {
if (nil == cpj) {
rc = RC_ERR_EMPTY_INTERFACE
return rc

9
src/genmai/ConfigParserYAML.go Executable file → Normal file
View File

@ -39,11 +39,13 @@ import (
// ConfigParserYAML
// 继承于 ConfigParserBase接口
type ConfigParserYAML map[string]interface {}
type
ConfigParserYAML map[string]interface {}
///////////////////////////////
// override ConfigParserBase functions
func (cpy *ConfigParserYAML)Parse(file string) (rc error) {
func
(cpy *ConfigParserYAML)Parse(file string) (rc error) {
configfile, ok := os.Open(file)
rc = ok;
/* */
@ -70,7 +72,8 @@ func (cpy *ConfigParserYAML)Parse(file string) (rc error) {
return rc
}
func (cpy *ConfigParserYAML)Mashal(file string) (rc error) {
func
(cpy *ConfigParserYAML)Mashal(file string) (rc error) {
if (nil == cpy) {
rc = RC_ERR_EMPTY_INTERFACE
return rc

86
src/genmai/Doctor.go Executable file → Normal file
View File

@ -30,6 +30,7 @@ package genmai
import (
"sync"
"time"
"github.com/mitchellh/mapstructure"
// TODO:
@ -47,7 +48,8 @@ const (
EXP_TYPE_WEB = "web"
)
type doctor struct {
type
doctor struct {
ExplorersDBus map[string]ExplorerDBus
ExplorersKernel map[string]ExplorerKernel
ExplorersSystem map[string]ExplorerSystem
@ -55,12 +57,14 @@ type doctor struct {
}
type ExplorerItem struct {
type
ExplorerItem struct {
Type string
ConfigFile string
}
type ExplorersListConfig struct {
type
ExplorersListConfig struct {
ConfigFilePrefix string
ExplorerItems []ExplorerItem
}
@ -75,7 +79,8 @@ var (
once sync.Once
)
func DoctorIns() (*doctor) {
func
DoctorIns() (*doctor) {
once.Do( func() {
instance = &doctor{}
// go is fuck,
@ -89,18 +94,71 @@ func DoctorIns() (*doctor) {
///////////////////////////////
// doctor functions
func (dtr *doctor)Reset() {
func
(dtr *doctor)Reset() {
// 清空所有map元素
dtr.ExplorersKernel = make(map[string]ExplorerKernel)
}
func (dtr *doctor)Genmai() {
func
(dtr *doctor)Genmai() (rp ReportKernel) {
// TODO
var expvuls []VulnInfoCommon
/* */
var expip4addr []string
expip4addr = append(expip4addr, "0.0.0.0")
var expip6addr []string
expip6addr = append(expip6addr, "0.0.0.0")
/* */
rp.ReportCommon.RCServerUUID = "TBD:so far: " + "alpha"
rp.RCServerUUID = "1234-5678-1234-5678"
rp.RCServerName = "aServer-Kernel"
rp.RCFamily = "RCFamily"
rp.RCRelease = "RCRelease"
rp.RCContainer = "RCContainer"
/* */
rp.RCExploredTimeAt = time.Now()
rp.RCExploredMode = "RCExploredMode"
rp.RCExploredVersion = "RCExploredVersion"
rp.RCExploredRevision = "RCExploredRevision"
rp.RCExploredBy = "RCExploredBy"
rp.RCExploredVia = "RCExploredVia"
rp.RCExploredIPv4Addrs = expip4addr
rp.RCExploredIPv6Addrs = expip6addr
/* */
rp.RCReportedAt = time.Now()
rp.RCReportedVersion = "RCReportedVersion"
rp.RCReportedBy = "RCReportedBy"
/* */
rp.RCErrors = "RCErrors"
rp.RCWarnings = "RCWarnings"
rp.RCReunningKernelInfo = ReportKernelInfo {
"0.0",
"0.0",
false,
}
rp.RCPackages = "RCPackages"
rp.RCSrcPackages = "RCSrcPackages"
rp.RCOptional = "RCOptional"
for _, v := range dtr.ExplorersKernel {
v.Start()
expvul, rc := v.Explore()
// TODO: is append expvul to expvuls according to rc
if nil != rc {
}
expvuls = append(expvuls, expvul)
} // for _, v ...
// TODO: should be type: ConfigCommon..
rp.RCExploredVulns = expvuls
return rp
}
func (dtr *doctor)LoadExplorersListConfig(configf string) (rc error) {
func
(dtr *doctor)LoadExplorersListConfig(configf string) (rc error) {
var parser ConfigParserBase
filetype := GetSubfixFile(configf)
@ -147,7 +205,8 @@ func (dtr *doctor)LoadExplorersListConfig(configf string) (rc error) {
return rc
}
func (dtr *doctor)PushExplorerDBus(configfile string) error {
func
(dtr *doctor)PushExplorerDBus(configfile string) error {
// // TODO: need to test
// ed := ExplorerDBus{}
// ed.Setup(&ConfigParserYAML{}, &ExplorerConfigDBus{})
@ -166,7 +225,8 @@ func (dtr *doctor)PushExplorerDBus(configfile string) error {
return nil
}
func (dtr *doctor)PushExplorerKernel(configfile string) error {
func
(dtr *doctor)PushExplorerKernel(configfile string) error {
// TODO: need to test
ek := ExplorerKernel{}
ek.Setup(&ConfigParserYAML{}, &ExplorerConfigKernel{})
@ -183,7 +243,8 @@ func (dtr *doctor)PushExplorerKernel(configfile string) error {
return nil
}
func (dtr *doctor)PushExplorerSystem(configfile string) error {
func
(dtr *doctor)PushExplorerSystem(configfile string) error {
// // TODO: need to test
// es := ExplorerSystem{}
// es.Setup(&ConfigParserYAML{}, &ExplorerConfigSystem{})
@ -202,7 +263,8 @@ func (dtr *doctor)PushExplorerSystem(configfile string) error {
return nil
}
func (dtr *doctor)PushExplorerWeb(configfile string) error {
func
(dtr *doctor)PushExplorerWeb(configfile string) error {
// // TODO: need to test
// ew := ExplorerWeb{}
// ew.Setup(&ConfigParserYAML{}, &ExplorerConfigWeb{})

43
src/genmai/ExplorerCommon.go Executable file → Normal file
View File

@ -48,19 +48,22 @@ var (
)
// Matchers 解析验证
type Matchers struct{
type
Matchers struct{
Type string
Condition string
MatcherMap map[string]string
}
type ImArray struct {
type
ImArray struct {
Exec string
Args string
}
//Implement 解析执行类型
type Implement struct {
type
Implement struct {
RawTypes []string
Condition string
// ImMap map[string]string
@ -69,14 +72,16 @@ type Implement struct {
}
// SiteRequests 解析请求中的值
type SiteRequests struct {
type
SiteRequests struct {
Implement
ReqCondition bool
Matchers
}
// SiteClassification 解析Info中的信息
type SiteClassification struct {
type
SiteClassification struct {
CvssMetrics string
CvssScore float32
CveId string
@ -86,7 +91,8 @@ type SiteClassification struct {
}
// Info yaml文件的Info
type SiteInfo struct {
type
SiteInfo struct {
Name string
Severity string
Description string
@ -99,7 +105,8 @@ type SiteInfo struct {
/*
Explorer的模板
*/
type ConfigCommon struct {
type
ConfigCommon struct {
FormatVer int
Id string
Belong string
@ -113,7 +120,8 @@ type ConfigCommon struct {
///////////////////////////////
//
type ExplorerConfigBase interface {
type
ExplorerConfigBase interface {
// 每个结构体实现应该完成这个函数以返回具体类型的Config
// 由于需要用到具体类型且因为go语言的限制需要开发者编
// 写具体类型。
@ -123,7 +131,8 @@ type ExplorerConfigBase interface {
// GetExplorerConfig*() (config *Config*, rc error) {
}
type ExplorerCommon struct {
type
ExplorerCommon struct {
EcConfigParser ConfigParserBase
EcConfig ExplorerConfigBase
EcConfigFilePrefix string
@ -131,14 +140,17 @@ type ExplorerCommon struct {
isSetup bool
}
func (ec *ExplorerCommon)Setup(parser ConfigParserBase, config ExplorerConfigBase) {
func
(ec *ExplorerCommon)Setup(parser ConfigParserBase,
config ExplorerConfigBase) {
ec.EcConfigParser = parser
ec.EcConfig = config
/* */
ec.isSetup = true
}
func (ec *ExplorerCommon)LoadConfig(file string) (rc error) {
func
(ec *ExplorerCommon)LoadConfig(file string) (rc error) {
if (true != ec.isSetup) {
return ERR_STRUCT_NOTSETUP
}
@ -159,6 +171,11 @@ func (ec *ExplorerCommon)LoadConfig(file string) (rc error) {
///////////////////////////////
// ExplorerBase
type ExplorerBase interface {
Explore(configfile string) (rp ReportCommon, rc error)
type
ExplorerBase interface {
Explore() (rp ReportBase, rc error)
}
///////////////////////////////
// auxiliary function

6
src/genmai/ExplorerDBus.go Executable file → Normal file
View File

@ -37,7 +37,8 @@ import (
sandbox "main/genmai/Sandbox"
)
type ExplorerConfigDBus struct {
type
ExplorerConfigDBus struct {
FormatVer int
Id string
Belong string
@ -48,7 +49,8 @@ type ExplorerConfigDBus struct {
}
type ExplorerDBus struct {
type
ExplorerDBus struct {
ExplorerCommon
/* */
esSandbox sandbox.SandboxBase

75
src/genmai/ExplorerKernel.go Executable file → Normal file
View File

@ -47,7 +47,8 @@ import (
inter "main/genmai/Interpreter"
)
type ExplorerConfigKernel struct {
type
ExplorerConfigKernel struct {
FormatVer int
Id string
Belong string
@ -57,7 +58,8 @@ type ExplorerConfigKernel struct {
SiteRequests SiteRequests
}
type ExplorerKernel struct {
type
ExplorerKernel struct {
ExplorerCommon
/* */
//EkConfigParser ConfigParserBase
@ -71,7 +73,8 @@ type ExplorerKernel struct {
///////////////////////////////
// ExplorerKernel functions
func (ek *ExplorerKernel)GetExplorerConfigKernel() (config *ExplorerConfigKernel, rc error) {
func
(ek *ExplorerKernel)GetExplorerConfigKernel() (config *ExplorerConfigKernel, rc error) {
cf, ret := ek.ExplorerCommon.EcConfig.(*ExplorerConfigKernel)
/* */
if (true == ret) {
@ -85,17 +88,20 @@ func (ek *ExplorerKernel)GetExplorerConfigKernel() (config *ExplorerConfigKernel
return config, rc
}
func (ek *ExplorerKernel)SetupSandbox(sb sandbox.SandboxBase) {
func
(ek *ExplorerKernel)SetupSandbox(sb sandbox.SandboxBase) {
ek.EkSandbox = sb
/* */
ek.isSetup = true
}
func (ek *ExplorerKernel)startWithPath(execpath string, args ...string) error {
func
(ek *ExplorerKernel)exploreWithPath(execpath string,
args ...string ) error {
interio , rc := ek.EkSandbox.Process(execpath, args...)
/* */
if (nil != rc) {
A_DEBUG_ERROR("startWithPath()->Process() error! rc = ", rc)
A_DEBUG_ERROR("exploreWithPath()->Process() error! rc = ", rc)
/* */
return rc
}
@ -103,7 +109,9 @@ func (ek *ExplorerKernel)startWithPath(execpath string, args ...string) error {
config, rc1 := ek.GetExplorerConfigKernel()
rc = rc1
if (nil != rc) {
A_DEBUG_ERROR("startWithPath()->GetExplorerConfigKernel() error ! rc = ", rc)
A_DEBUG_ERROR("exploreWithPath()-> "+
"GetExplorerConfigKernel() error ! rc = ",
rc )
/* */
return rc
} // if (nil != ...
@ -134,13 +142,17 @@ func (ek *ExplorerKernel)startWithPath(execpath string, args ...string) error {
ou, _ := interio.Recv( len (itr[icmd_len : ]) )
/* */
if ( ou == itr[ icmd_len : ] ) {
A_DEBUG_INFO("startWithPath():",
"\"" + inter.INTERPRETER_CMD_RECV_POC_CHECK + "\":",
A_DEBUG_INFO("exploreWithPath():",
"\"" +
inter.INTERPRETER_CMD_RECV_POC_CHECK +
"\":" ,
"Check poc successfully!" )
/* */
return RC_POC_CHECK_SUCCESSFULLY
} else {
A_DEBUG_INFO("startWithPath():\"<?\":Check poc failed!")
A_DEBUG_INFO("exploreWithPath():",
inter.INTERPRETER_CMD_RECV_POC_CHECK,
"Check poc failed!" )
/* */
return RC_POC_CHECK_FAILED
}
@ -150,38 +162,49 @@ func (ek *ExplorerKernel)startWithPath(execpath string, args ...string) error {
return rc
}
func (ek *ExplorerKernel)Start() (rc error) {
//func
//(ek *ExplorerKernel)Explore() (rc error) {
//}
///////////////////////////////
// override ExplorerBase functions
func
(ek *ExplorerKernel)Explore() (expvul VulnInfoCommon, rc error) {
config, rc_t := ek.GetExplorerConfigKernel()
rc = rc_t
if (nil != rc) {
A_DEBUG_ERROR("Start()->GetExplorerConfigKernel() error! rc = ", rc)
A_DEBUG_ERROR("Explore()->GetExplorerConfigKernel() "+
"error! rc = ", rc )
/* */
return rc
return VulnInfoCommon{}, rc
}
///////////////
// starting explore
for _, im := range config.SiteRequests.ImArray {
rc = ek.startWithPath(ek.ExplorerCommon.EcConfigFilePrefix +
rc = ek.exploreWithPath(ek.ExplorerCommon.EcConfigFilePrefix +
string(os.PathSeparator) +
im.Exec ,
im.Args )
expvul.VICCveId = config.Id
expvul.VICConfidences = Confidence {
CScore: config.SiteInfo.SiteClassification.CvssScore,
CDetectionMethod: "TBD",
SortOrder: 1,
}
expvul.VICVulnType = config.Belong
return rc
}
} // for _, im ...
///////////////////////////////
// override ExplorerBase functions
func (ek *ExplorerKernel)Explore(configfile string) (rp ReportCommon, rc error) {
ek.Setup(&ConfigParserYAML{}, &ExplorerConfigKernel{})
ek.LoadConfig(configfile)
ek.SetupSandbox(&sandbox.SandboxDefault{})
// ending explore
///////////////
ek.Start()
// TODO:
return ReportCommon{}, nil
return expvul, nil
}
///////////////////////////////

41
src/genmai/ExplorerSystem.go Executable file → Normal file
View File

@ -46,7 +46,8 @@ import (
inter "main/genmai/Interpreter"
)
type ExplorerConfigSystem struct {
type
ExplorerConfigSystem struct {
FormatVer int
Id string
Belong string
@ -56,7 +57,8 @@ type ExplorerConfigSystem struct {
SiteRequests SiteRequests
}
type ExplorerSystem struct {
type
ExplorerSystem struct {
ExplorerCommon
/* */
EsSandbox sandbox.SandboxBase
@ -65,7 +67,8 @@ type ExplorerSystem struct {
///////////////////////////////
// ExplorerSystem functions
func (es *ExplorerSystem)GetExplorerConfigSystem() (config *ExplorerConfigSystem, rc error) {
func
(es *ExplorerSystem)GetExplorerConfigSystem() (config *ExplorerConfigSystem, rc error) {
cf, ret := es.ExplorerCommon.EcConfig.(*ExplorerConfigSystem)
/* */
if (true == ret) {
@ -79,13 +82,15 @@ func (es *ExplorerSystem)GetExplorerConfigSystem() (config *ExplorerConfigSystem
return config, rc
}
func (es *ExplorerSystem)SetupSandbox(sb sandbox.SandboxBase) {
func
(es *ExplorerSystem)SetupSandbox(sb sandbox.SandboxBase) {
es.EsSandbox = sb
/* */
es.isSetup = true
}
func (es *ExplorerSystem)startWithPath(execpath string, args ...string) error {
func
(es *ExplorerSystem)startWithPath(execpath string, args ...string) error {
interio , rc := es.EsSandbox.Process(execpath, args...)
/* */
if (nil != rc) {
@ -144,7 +149,8 @@ func (es *ExplorerSystem)startWithPath(execpath string, args ...string) error {
return rc
}
func (es *ExplorerSystem)Start() (rc error) {
func
(es *ExplorerSystem)Start() (rc error) {
config, rc_t := es.GetExplorerConfigSystem()
rc = rc_t
if (nil != rc) {
@ -165,17 +171,18 @@ func (es *ExplorerSystem)Start() (rc error) {
///////////////////////////////
// override ExplorerBase functions
func (es *ExplorerSystem)Explore(configfile string) (rp ReportCommon, rc error) {
es.Setup(&ConfigParserYAML{}, &ExplorerConfigSystem{})
es.LoadConfig(configfile)
es.SetupSandbox(&sandbox.SandboxDefault{})
es.Start()
// TODO:
return ReportCommon{}, nil
}
//func
//(es *ExplorerSystem)Explore(configfile string) (rp ReportCommon, rc error) {
// es.Setup(&ConfigParserYAML{}, &ExplorerConfigSystem{})
// es.LoadConfig(configfile)
//
// es.SetupSandbox(&sandbox.SandboxDefault{})
//
// es.Start()
//
// // TODO:
// return ReportCommon{}, nil
//}
///////////////////////////////

6
src/genmai/ExplorerWeb.go Executable file → Normal file
View File

@ -37,7 +37,8 @@ import (
sandbox "main/genmai/Sandbox"
)
type ExplorerConfigWeb struct {
type
ExplorerConfigWeb struct {
FormatVer int
Id string
Belong string
@ -48,7 +49,8 @@ type ExplorerConfigWeb struct {
}
type ExplorerWeb struct {
type
ExplorerWeb struct {
ExplorerCommon
/* */
esSandbox sandbox.SandboxBase

0
src/genmai/FrameWorkCheck/FwCheck.go Executable file → Normal file
View File

0
src/genmai/FrameWorkCheck/LiunxFwCheck.go Executable file → Normal file
View File

0
src/genmai/FrameWorkCheck/WinFwCheck.go Executable file → Normal file
View File

24
src/genmai/Interpreter/InterIO.go Executable file → Normal file
View File

@ -35,28 +35,32 @@ import (
////////////////////////////////////////////////////////////////
// InterIO struct
type InterIO struct {
type
InterIO struct {
Reader *bufio.Reader
Writer *bufio.Writer
}
///////////////////////////////
// InterIO functions
func (iio InterIO) Send(str string) (rc error) {
func
(iio InterIO) Send(str string) (rc error) {
_, rc = iio.Writer.WriteString(str)
iio.Writer.Flush()
/* */
return rc
}
func (iio InterIO) Sendline(str string) (rc error) {
func
(iio InterIO) Sendline(str string) (rc error) {
_, rc = iio.Writer.WriteString(str + "\n")
iio.Writer.Flush()
/* */
return rc
}
func (iio InterIO) RecvUntil(delim_s string) (ret string, rc error) {
func
(iio InterIO) RecvUntil(delim_s string) (ret string, rc error) {
output := ""
/* */
for {
@ -81,20 +85,23 @@ func (iio InterIO) RecvUntil(delim_s string) (ret string, rc error) {
return ret, rc
}
func (iio InterIO) RecvUntilByte(delim_b byte) (string, error) {
func
(iio InterIO) RecvUntilByte(delim_b byte) (string, error) {
recv, rc := iio.Reader.ReadBytes(delim_b)
/* */
return string(recv), rc
}
func (iio InterIO) RecvLine() (string, bool, error) {
func
(iio InterIO) RecvLine() (string, bool, error) {
recv, isPrefix, rc := iio.Reader.ReadLine()
return string(recv), isPrefix, rc
}
func (iio InterIO) Recv(n int) (string, error) {
func
(iio InterIO) Recv(n int) (string, error) {
var out []byte
var rc error
for i := 0; i < n ; i++ {
@ -107,7 +114,8 @@ func (iio InterIO) Recv(n int) (string, error) {
return string(out), rc
}
func (iio InterIO) RecvString(delim byte) (line string, rc error) {
func
(iio InterIO) RecvString(delim byte) (line string, rc error) {
line, rc = iio.Reader.ReadString(delim)
return line, rc

3
src/genmai/Interpreter/Interpreter.go Executable file → Normal file
View File

@ -43,6 +43,7 @@ const (
)
////////////////////////////////////////////////////////////////
// Interpreter interface
type Interpreter interface {
type
Interpreter interface {
Process(execpath string, args...string) (InterIO, error)
}

24
src/genmai/Interpreter/Utils.go Executable file → Normal file
View File

@ -56,7 +56,8 @@ const (
A_DEBUG_LEVEL_STR_WARNING string = "warning"
A_DEBUG_LEVEL_STR_ERROR string = "error"
)
func A_DEBUG(head string, args ...interface{}) {
func
A_DEBUG(head string, args ...interface{}) {
if (true == A_DEBUG_NEED_HEAD) {
fmt.Print(head)
}
@ -64,22 +65,26 @@ func A_DEBUG(head string, args ...interface{}) {
fmt.Println(args...)
}
func A_DEBUG_INFO(args ...interface{}) {
func
A_DEBUG_INFO(args ...interface{}) {
if (A_DEBUG_LEVEL <= A_DEBUG_LEVEL_INFO) {
A_DEBUG(A_DEBUG_LEVEL_STR_INFO + ":", args...)
}
}
func A_DEBUG_NOTE(args ...interface{}) {
func
A_DEBUG_NOTE(args ...interface{}) {
if (A_DEBUG_LEVEL <= A_DEBUG_LEVEL_NOTE) {
A_DEBUG(A_DEBUG_LEVEL_STR_NOTE + ":", args...)
}
}
func A_DEBUG_WARNING(args ...interface{}) {
func
A_DEBUG_WARNING(args ...interface{}) {
if (A_DEBUG_LEVEL <= A_DEBUG_LEVEL_WARNING) {
A_DEBUG(A_DEBUG_LEVEL_STR_WARNING + ":", args...)
}
}
func A_DEBUG_ERROR(args ...interface{}) {
func
A_DEBUG_ERROR(args ...interface{}) {
if (A_DEBUG_LEVEL <= A_DEBUG_LEVEL_ERROR) {
A_DEBUG(A_DEBUG_LEVEL_STR_ERROR + ":", args...)
}
@ -87,19 +92,22 @@ func A_DEBUG_ERROR(args ...interface{}) {
////////////////////////////////////////////////////////////////
// File , Path
func GetPrefixPath(path string) string {
func
GetPrefixPath(path string) string {
index := strings.LastIndex(path, string(os.PathSeparator))
/* */
return path[:index]
}
func GetSubfixPath(path string) string {
func
GetSubfixPath(path string) string {
index := strings.LastIndex(path, string(os.PathSeparator))
/* */
return path[(index+1):]
}
func GetSubfixFile(path string) string {
func
GetSubfixFile(path string) string {
index := strings.LastIndex(path, ".")
/* */
return path[index:]

0
src/genmai/Pool/CoprogramPool.go Executable file → Normal file
View File

0
src/genmai/RemoteCheck/SCPFile.go Executable file → Normal file
View File

0
src/genmai/RemoteCheck/SSHConnect.go Executable file → Normal file
View File

47
src/genmai/ReportCommon.go Executable file → Normal file
View File

@ -32,7 +32,8 @@ import (
"time"
)
type ReportContianer struct {
type
ReportContianer struct {
RCContainerID string
RCName string
RCImage string
@ -40,18 +41,21 @@ type ReportContianer struct {
RCUUID string
}
type ReportPlatform struct {
type
ReportPlatform struct {
RPName string
RPInstanceID string
}
type ReportKernelInfo struct {
type
ReportKernelInfo struct {
RKRelease string
RKVersion string
RKRebootRequired bool
}
type ReportCommon struct {
type
ReportCommon struct {
RCServerUUID string
RCServerName string
RCFamily string
@ -81,7 +85,8 @@ type ReportCommon struct {
RCOptional string // TBD: type
}
type ReportBase interface {
type
ReportBase interface {
GetReportCommon() ReportCommon
}
@ -96,7 +101,8 @@ type ReportBase interface {
//}
// TODO: to complete
type VulnInfoCommon struct {
type
VulnInfoCommon struct {
VICCveId string
VICConfidences Confidence
VICAffectedPackages []PackageFixStatus
@ -113,22 +119,26 @@ type VulnInfoCommon struct {
// TODO: TBD
}
type Confidence struct {
CScore int
type
Confidence struct {
CScore float32
CDetectionMethod DetectionMethod
SortOrder int
}
type DetectionMethod string
type
DetectionMethod string
type PackageFixStatus struct {
type
PackageFixStatus struct {
PFSName string
PFSNotFixedYet bool
PFSFixState string
PFSFixedIn string
}
type DistroAdvisory struct {
type
DistroAdvisory struct {
DAAdvisoryId string
DASeverity string
DAIssued time.Time
@ -137,10 +147,12 @@ type DistroAdvisory struct {
}
// TODO:
type CveContent struct {
type
CveContent struct {
}
type ExploitInfo struct {
type
ExploitInfo struct {
EIExploitType string // TODO: TBD
EIId string
EIURL string
@ -150,19 +162,22 @@ type ExploitInfo struct {
EIBinaryURL []string
}
type MitigationInfo struct {
type
MitigationInfo struct {
// MICveContentType
MIMitigationInfo string
MIURL string
}
type AlertInfo struct {
type
AlertInfo struct {
AIURL string
AITitle string
AITeam string
}
type AlerDict struct {
type
AlerDict struct {
ADCISA []AlertInfo
ADJPCERT []AlertInfo
ADUSCERT []AlertInfo

19
src/genmai/ReportDBus.go Executable file → Normal file
View File

@ -32,15 +32,18 @@ import (
"time"
)
type ReportDBus struct {
type
ReportDBus struct {
ReportCommon
}
type VulnInfoDBus struct {
type
VulnInfoDBus struct {
VulnInfoCommon
}
func GetTemplateReportDBus() (*ReportDBus) {
func
GetTemplateReportDBus() (*ReportDBus) {
var expvuls []VulnInfoCommon
expvuls = append(expvuls, GetTemplateVulnInfoDBus().VulnInfoCommon)
expvuls = append(expvuls, GetTemplateVulnInfoDBus().VulnInfoCommon)
@ -54,7 +57,7 @@ func GetTemplateReportDBus() (*ReportDBus) {
return &ReportDBus{
ReportCommon {
RCServerUUID: "1234-5678-1234-5678",
RCServerName: "aServer",
RCServerName: "aServer-DBus",
RCFamily: "RCFamily",
RCRelease: "RCRelease",
RCContainer: "RCContainer",
@ -88,13 +91,14 @@ func GetTemplateReportDBus() (*ReportDBus) {
}
}
func GetTemplateVulnInfoDBus() (*VulnInfoDBus) {
func
GetTemplateVulnInfoDBus() (*VulnInfoDBus) {
return &VulnInfoDBus {
VulnInfoCommon {
VICCveId: "VICCveId",
VICConfidences: Confidence {
CScore: 123,
CDetectionMethod: "CDetectionMethod",
CDetectionMethod: "CDetectionMethod-DBus",
SortOrder: 1, },
//VICAffectedPackages:
// ...
@ -106,6 +110,7 @@ func GetTemplateVulnInfoDBus() (*VulnInfoDBus) {
////////////////////////////////////////////////////////////////
// ReportBase methods
func (rd *ReportDBus)GetReportCommon() ReportCommon {
func
(rd *ReportDBus)GetReportCommon() ReportCommon {
return rd.ReportCommon
}

19
src/genmai/ReportKernel.go Executable file → Normal file
View File

@ -32,18 +32,19 @@ import (
"time"
)
type ReportKernel struct {
type
ReportKernel struct {
ReportCommon
}
type VulnInfoKernel struct {
type
VulnInfoKernel struct {
VulnInfoCommon
}
func GetTemplateReportKernel() (*ReportKernel) {
func
GetTemplateReportKernel() (*ReportKernel) {
var expvuls []VulnInfoCommon
expvuls = append(expvuls, GetTemplateVulnInfoKernel().VulnInfoCommon)
expvuls = append(expvuls, GetTemplateVulnInfoKernel().VulnInfoCommon)
expvuls = append(expvuls, GetTemplateVulnInfoKernel().VulnInfoCommon)
/* */
var expip4addr []string
expip4addr = append(expip4addr, "0.0.0.0")
@ -53,7 +54,7 @@ func GetTemplateReportKernel() (*ReportKernel) {
return &ReportKernel {
ReportCommon {
RCServerUUID: "1234-5678-1234-5678",
RCServerName: "aServer",
RCServerName: "aServer-Kernel",
RCFamily: "RCFamily",
RCRelease: "RCRelease",
RCContainer: "RCContainer",
@ -87,7 +88,8 @@ func GetTemplateReportKernel() (*ReportKernel) {
}
}
func GetTemplateVulnInfoKernel() VulnInfoKernel {
func
GetTemplateVulnInfoKernel() VulnInfoKernel {
return VulnInfoKernel {
VulnInfoCommon {
VICCveId: "VICCveId",
@ -105,6 +107,7 @@ func GetTemplateVulnInfoKernel() VulnInfoKernel {
////////////////////////////////////////////////////////////////
// ReportBase methods
func (rk *ReportKernel)GetReportCommon() ReportCommon {
func
(rk *ReportKernel)GetReportCommon() ReportCommon {
return rk.ReportCommon
}

19
src/genmai/ReportSystem.go Executable file → Normal file
View File

@ -32,15 +32,18 @@ import (
"time"
)
type ReportSystem struct {
type
ReportSystem struct {
ReportCommon
}
type VulnInfoSystem struct {
type
VulnInfoSystem struct {
VulnInfoCommon
}
func GetTemplateReportSystem() (*ReportSystem) {
func
GetTemplateReportSystem() (*ReportSystem) {
var expvuls []VulnInfoCommon
expvuls = append(expvuls, GetTemplateVulnInfoSystem().VulnInfoCommon)
expvuls = append(expvuls, GetTemplateVulnInfoSystem().VulnInfoCommon)
@ -54,7 +57,7 @@ func GetTemplateReportSystem() (*ReportSystem) {
return &ReportSystem{
ReportCommon {
RCServerUUID: "1234-5678-1234-5678",
RCServerName: "aServer",
RCServerName: "aServer-System",
RCFamily: "RCFamily",
RCRelease: "RCRelease",
RCContainer: "RCContainer",
@ -88,13 +91,14 @@ func GetTemplateReportSystem() (*ReportSystem) {
}
}
func GetTemplateVulnInfoSystem() (*VulnInfoSystem) {
func
GetTemplateVulnInfoSystem() (*VulnInfoSystem) {
return &VulnInfoSystem {
VulnInfoCommon {
VICCveId: "VICCveId",
VICConfidences: Confidence {
CScore: 123,
CDetectionMethod: "CDetectionMethod-Kernel",
CDetectionMethod: "CDetectionMethod-System",
SortOrder: 1, },
//VICAffectedPackages:
// ...
@ -106,6 +110,7 @@ func GetTemplateVulnInfoSystem() (*VulnInfoSystem) {
////////////////////////////////////////////////////////////////
// ReportBase methods
func (rs *ReportSystem)GetReportCommon() ReportCommon {
func
(rs *ReportSystem)GetReportCommon() ReportCommon {
return rs.ReportCommon
}

17
src/genmai/ReportWeb.go Executable file → Normal file
View File

@ -32,16 +32,19 @@ import (
"time"
)
type ReportWeb struct {
type
ReportWeb struct {
ReportCommon
}
type VulnInfoWeb struct {
type
VulnInfoWeb struct {
VulnInfoCommon
}
func GetTemplateReportWeb() (*ReportWeb) {
func
GetTemplateReportWeb() (*ReportWeb) {
var expvuls []VulnInfoCommon
expvuls = append(expvuls, GetTemplateVulnInfoWeb().VulnInfoCommon)
expvuls = append(expvuls, GetTemplateVulnInfoWeb().VulnInfoCommon)
@ -55,7 +58,7 @@ func GetTemplateReportWeb() (*ReportWeb) {
return &ReportWeb{
ReportCommon {
RCServerUUID: "1234-5678-1234-5678",
RCServerName: "aServer",
RCServerName: "aServer-Web",
RCFamily: "RCFamily",
RCRelease: "RCRelease",
RCContainer: "RCContainer",
@ -89,7 +92,8 @@ func GetTemplateReportWeb() (*ReportWeb) {
}
}
func GetTemplateVulnInfoWeb() (*VulnInfoWeb) {
func
GetTemplateVulnInfoWeb() (*VulnInfoWeb) {
return &VulnInfoWeb {
VulnInfoCommon {
VICCveId: "VICCveId",
@ -107,6 +111,7 @@ func GetTemplateVulnInfoWeb() (*VulnInfoWeb) {
////////////////////////////////////////////////////////////////
// ReportBase methods
func (rw *ReportWeb)GetReportCommon() ReportCommon {
func
(rw *ReportWeb)GetReportCommon() ReportCommon {
return rw.ReportCommon
}

3
src/genmai/Sandbox/SandboxBase.go Executable file → Normal file
View File

@ -38,7 +38,8 @@ import (
)
// 继承于Interpreter接口
type SandboxBase interface {
type
SandboxBase interface {
inter.Interpreter
/* */
}

9
src/genmai/Sandbox/SandboxDefault.go Executable file → Normal file
View File

@ -44,19 +44,22 @@ import (
)
// 继承与SandBoxBase接口
type SandboxDefault struct {
type
SandboxDefault struct {
}
///////////////////////////////
// override functions
func (sbd *SandboxDefault)cmdGuard(execpath string) error {
func
(sbd *SandboxDefault)cmdGuard(execpath string) error {
// TODO: Very Important
A_DEBUG_ERROR("cmdGuard():NEED TO IMPLEMENT!")
return nil
}
func (sbd *SandboxDefault)Process(execpath string, args ...string) (inter.InterIO, error) {
func
(sbd *SandboxDefault)Process(execpath string, args ...string) (inter.InterIO, error) {
// TODO: make ALOG
A_DEBUG_INFO("Starting process for : ", GetSubfixPath(execpath), " ...\n")

24
src/genmai/Sandbox/Utils.go Executable file → Normal file
View File

@ -56,7 +56,8 @@ const (
A_DEBUG_LEVEL_STR_WARNING string = "warning"
A_DEBUG_LEVEL_STR_ERROR string = "error"
)
func A_DEBUG(head string, args ...interface{}) {
func
A_DEBUG(head string, args ...interface{}) {
if (true == A_DEBUG_NEED_HEAD) {
fmt.Print(head)
}
@ -64,22 +65,26 @@ func A_DEBUG(head string, args ...interface{}) {
fmt.Println(args...)
}
func A_DEBUG_INFO(args ...interface{}) {
func
A_DEBUG_INFO(args ...interface{}) {
if (A_DEBUG_LEVEL <= A_DEBUG_LEVEL_INFO) {
A_DEBUG(A_DEBUG_LEVEL_STR_INFO + ":", args...)
}
}
func A_DEBUG_NOTE(args ...interface{}) {
func
A_DEBUG_NOTE(args ...interface{}) {
if (A_DEBUG_LEVEL <= A_DEBUG_LEVEL_NOTE) {
A_DEBUG(A_DEBUG_LEVEL_STR_NOTE + ":", args...)
}
}
func A_DEBUG_WARNING(args ...interface{}) {
func
A_DEBUG_WARNING(args ...interface{}) {
if (A_DEBUG_LEVEL <= A_DEBUG_LEVEL_WARNING) {
A_DEBUG(A_DEBUG_LEVEL_STR_WARNING + ":", args...)
}
}
func A_DEBUG_ERROR(args ...interface{}) {
func
A_DEBUG_ERROR(args ...interface{}) {
if (A_DEBUG_LEVEL <= A_DEBUG_LEVEL_ERROR) {
A_DEBUG(A_DEBUG_LEVEL_STR_ERROR + ":", args...)
}
@ -87,19 +92,22 @@ func A_DEBUG_ERROR(args ...interface{}) {
////////////////////////////////////////////////////////////////
// File , Path
func GetPrefixPath(path string) string {
func
GetPrefixPath(path string) string {
index := strings.LastIndex(path, string(os.PathSeparator))
/* */
return path[:index]
}
func GetSubfixPath(path string) string {
func
GetSubfixPath(path string) string {
index := strings.LastIndex(path, string(os.PathSeparator))
/* */
return path[(index+1):]
}
func GetSubfixFile(path string) string {
func
GetSubfixFile(path string) string {
index := strings.LastIndex(path, ".")
/* */
return path[index:]

0
src/genmai/Utils.go Executable file → Normal file
View File

3
src/genmai/genmai.go Executable file → Normal file
View File

@ -178,7 +178,8 @@ func Test() {
DoctorIns().Reset()
DoctorIns().LoadExplorersListConfig("/home/test/桌面/genmai/data/pocs/pocs.yaml")
// DoctorIns().LoadExplorersListConfig("/home/test/桌面/genmai/data/pocs/pocs.yaml")
DoctorIns().LoadExplorersListConfig("/home/alpha/Developments/kylinprojects/genmai/data/pocs/pocs.yaml")
A_DEBUG_INFO(">>Genmai>>")
DoctorIns().Genmai()

0
src/genmai/log.go Executable file → Normal file
View File

0
src/go.mod Executable file → Normal file
View File

0
src/go.sum Executable file → Normal file
View File

2
src/log.go Executable file → Normal file
View File

@ -1,4 +1,4 @@
package genmai
package main
import (
"log"

BIN
src/main

Binary file not shown.

View File

@ -1,162 +0,0 @@
package main
import (
"main/genmai/ArgParser"
"main/genmai/FrameWorkCheck"
"fmt"
"flag"
"log"
"strconv"
"strings"
genmai "main/genmai"
gcon "main/gconsole"
)
type Vul struct{
ParserNum int //协程数
System string //执行系统漏洞检测
Web string //Web漏洞检测
Kernel string //内核漏洞检测
Fuzz string //Fuzz
BaseLine string //基线检测
Update string //更新软件
Docs string //生成报告
PoolStatNum int //启动协程任务数
IP string //web 制定IP
MD string //生成MD文件
RemoteAssessment string //远程检测,所需参数在RAVUL中
WKPWD string //弱口令生成,所需参数在WKPWDVUL结构体中
SSHBurst string //SSH爆破
Nmap string //Nmap模块,端口和IP放在RAVUL中
Fofa string //fofa接口调用需要输入查询命令
}
type FofaCommand struct{
FofaCom string
}
type RAVUL struct{
Host string //主机IP
User string //用户名
Password string //密码
Port string //端口
}
type WKPWDVUL struct{
CompanyName string //公司名
Name string //名字
Nums string //特殊数字
}
func main(){
var vul Vul //定义vul
var RAV RAVUL
var WKV WKPWDVUL
var FC FofaCommand
vul.PoolStatNum =0
//开始日志打印日志
genmai.LogInit()
//检测系统架构
frameWork:=FrameWorkCheck.FwCheck()
if len(frameWork) > 0{
log.Println("frameWork sure")
}else{
return
}
Help := flag.Bool("help", false,"")
//识别参数,执行模块
flag.IntVar(&vul.ParserNum, "poolNums", 100, "设置协程的数量默认数量为0最大数量为1000")
flag.StringVar(&vul.Web, "web", "false", "使用web漏洞的验证模块可联合其他模块使用")
flag.StringVar(&vul.IP, "ip", "false", "设置ip可设置ip段进行验证")
flag.StringVar(&vul.System, "system", "false", "使用系统漏洞的验证模块,可联合其他模块使用")
flag.StringVar(&vul.Kernel, "kernel", "false", "使用内核漏洞的验证模块,可联合其他模块使用")
flag.StringVar(&vul.BaseLine, "baseline", "false", "使用基线检测模块,可联合其他模块使用")
//远程模块参数
RA := flag.Bool("RA", false, "使用远程检测,只能单独使用模块")
flag.StringVar(&RAV.Host, "host", "false", "IP")
flag.StringVar(&RAV.Port, "port", "all", "端口")
flag.StringVar(&RAV.User, "user", "false", "用户名")
flag.StringVar(&RAV.Password, "passwd", "false", "远程登录密码")
//弱密码生成模块
WK := flag.Bool("WKPWD", false, "使用弱口令生成器模块,选用参数CPN,Name,Nums")
flag.StringVar(&WKV.CompanyName, "CPN", "0", "设置特定公司名")
flag.StringVar(&WKV.Name, "Name", "0", "设置姓名")
flag.StringVar(&WKV.Nums, "Nums", "0", "设置特殊数字(如年份)")
// SSH爆破模块
SSHB:= flag.Bool("SSHBurst", false, "使用SSH爆破,必用参数host,选用参数poolNums")
// Nmap模块
NmapScan:= flag.Bool("Nmap",false,"使用Nmap模块进行扫描,必用参数host,选用参数port")
// Fofa模块
Fofa:=flag.Bool("Fofa",false,"Fofa探测,必用参数FofaCom")
flag.StringVar(&FC.FofaCom, "fofaCom", "null", "设置特定公司名")
//
All := flag.Bool("all", false, "只扫描system,kernel的所有poc以及检测baselin模块不可联合其他参数使用")
Update := flag.Bool("update", false, "更新程序到最新版本,不可联合其他参数使用")
//flag解析
flag.Parse()
//将插件模块的值存放到数组中
PWDList :=[...]string{WKV.CompanyName,WKV.Name,WKV.Nums}
poolNums:=strconv.Itoa(vul.ParserNum)
SSHBurstList :=[...]string{RAV.Host,poolNums}
NmapScanList :=[...]string{RAV.Host,RAV.Port}
//初始化bool值
sAll :=strconv.FormatBool(*All)
vul.Update=strconv.FormatBool(*Update)
vul.RemoteAssessment=strconv.FormatBool(*RA)
vul.WKPWD=strconv.FormatBool(*WK)
help:=strconv.FormatBool(*Help)
vul.SSHBurst =strconv.FormatBool(*SSHB)
vul.Nmap = strconv.FormatBool(*NmapScan)
vul.Fofa = strconv.FormatBool(*Fofa)
//是否开启远程检测
if vul.RemoteAssessment=="true"{
checkResult:=ArgParser.RemoteArgParser(RAV.Host,RAV.User,RAV.Password)
checkResult=strings.TrimSpace(checkResult)
if checkResult=="true"{
fmt.Println("不允许登录root/administrator用户进行验证")
log.Println("不允许登录root/administrator用户进行验证")
}else if checkResult=="false"{
ArgParser.ParameterParser(vul.System,vul.Kernel,vul.Web,vul.BaseLine,sAll,vul.PoolStatNum,vul.ParserNum,vul.Update,vul.IP,help)
}
}else{
ArgParser.WKPWD(vul.WKPWD,PWDList[:])
ArgParser.SSHBurst(vul.SSHBurst,SSHBurstList[:])
ArgParser.NmapScan(vul.Nmap, NmapScanList[:])
ArgParser.FofaApi(vul.Fofa,FC.FofaCom)
return
ArgParser.ParameterParser(vul.System,vul.Kernel,vul.Web,vul.BaseLine,sAll,vul.PoolStatNum,vul.ParserNum,vul.Update,vul.IP,help)
}
return
///////////////////////////////
// test "main/genmai"
genmai.Test()
// config := genmai.NewConfig()
fmt.Println(">>")
//fmt.Println(config["id"])
///////////////////////////////
// test gconsole
gcon.Draw()
return
}

BIN
src/test

Binary file not shown.

View File

@ -1,9 +0,0 @@
package main
import(
"main/tools/SSHExplosion"
)
func main(){
SSHExplosion.SshExp()
// re:=SSHExplosion.SshConnect("127.0.0.1","song","sbcj1999")
}

0
src/tools/SSHExplosion/SSHConnect.go Executable file → Normal file
View File

0
z-container/Cache/Cache.go Executable file → Normal file
View File