@@ -16,8 +16,9 @@ import (
1616*** 识别fastjson(主要通过报错回显的方式)
1717**/
1818
19+
1920func DetectFastjson (url string ) (bool ,string ){
20- fmt .Println ("[+] 正在进行报错识别" )
21+ fmt .Println ("[" + url + "] :" + "[ +] 正在进行报错识别" )
2122 jsonType , _ := ErrDetectVersion (url )
2223 if jsonType == "jackson" {
2324 return false ,Utils .NOT_FS
@@ -34,57 +35,64 @@ func DetectFastjson(url string) (bool,string){
3435
3536func DetectVersion (url string ) Utils.Result {
3637 var result Utils.Result
38+ Utils .InitResult (result )
3739 fmt .Println ("开始检测 " + url )
3840 result .Url = url
39- //是否出网
4041 var payloads Utils.DNSPayloads
4142 isFastjson ,jsonType := DetectFastjson (url )
4243 if jsonType == "jackson" {
4344 result .Type = jsonType
4445 return result
4546 }
4647 //出网探测
47- fmt .Println ("[+] 正在进行出网探测" )
48+ fmt .Println ("[" + result . Url + "] :" + "[ +] 正在进行出网探测" )
4849 payload , session := Utils .NET_DETECT_FACTORY ()
49- if DnslogDetect (url , payload , session ) != "[]" {
50- //出网
51- fmt .Println ("[*] 目标可出网" )
52- result .Netout = true
53- result .Type = "Fastjson"
54- fmt .Println ("[+] 正在进行 AutoType状态 探测" )
55- result .AutoType = DetectAutoType (url )
56- result .Dependency = DetectDependency (url )
57- if isFastjson && jsonType != Utils .NOT_FS && jsonType != "" {
58- fmt .Println ("[+] Fastjson版本为 " + jsonType )
59- result .Version = jsonType
60- return result
61- }
62- fmt .Println ("[+] 正在进行版本探测" )
63- payloads , session = Utils .DNS_DETECT_FACTORY ()
64- if DnslogDetect (url , payloads .Dns_48 , session ) == "48" {
65- result .Version = Utils .FJ_UNDER_48
66- return result
67- }
68- if DnslogDetect (url , payloads .Dns_68 , session ) == "68" {
69- if result .AutoType {
70- result .Version = Utils .FJ_BEYOND_48
50+ record := DnslogDetect (url , payload , session )
51+ if record != "[]" {
52+ if record != Utils .NETWORK_NOT_ACCESS {
53+ //出网
54+ fmt .Println ("[" + result .Url + "] :" + "[*] 目标可出网" )
55+ result .Netout = true
56+ result .Type = "Fastjson"
57+ fmt .Println ("[" + result .Url + "] :" + "[+] 正在进行 AutoType状态 探测" )
58+ result .AutoType = DetectAutoType (url )
59+ result .Dependency = DetectDependency (url )
60+ if isFastjson && jsonType != Utils .NOT_FS && jsonType != "" {
61+ fmt .Println ("[" + result .Url + "] :" + "[+] Fastjson版本为 " + jsonType )
62+ result .Version = jsonType
7163 return result
7264 }
73- result .Version = Utils .FJ_BETWEEN_48_68
74- return result
75- }
76- if DnslogDetect (url , payloads .Dns_80 , session ) == "80" {
77- result .Version = Utils .FJ_BETWEEN_69_80
78- return result
79- }
80- if DnslogDetect (url , payloads .Dns_80 , session ) == "83" {
81- result .Version = Utils .FS_BEYOND_80
82- return result
65+ fmt .Println ("[" + result .Url + "] :" + "[+] 正在进行版本探测" )
66+ payloads , session = Utils .DNS_DETECT_FACTORY ()
67+ if DnslogDetect (url , payloads .Dns_48 , session ) == "48" {
68+ result .Version = Utils .FJ_UNDER_48
69+ return result
70+ }
71+ if DnslogDetect (url , payloads .Dns_68 , session ) == "68" {
72+ if result .AutoType {
73+ result .Version = Utils .FJ_BEYOND_48
74+ return result
75+ }
76+ result .Version = Utils .FJ_BETWEEN_48_68
77+ return result
78+ }
79+ if DnslogDetect (url , payloads .Dns_80 , session ) == "80" {
80+ result .Version = Utils .FJ_BETWEEN_69_80
81+ return result
82+ }
83+ if DnslogDetect (url , payloads .Dns_80 , session ) == "83" {
84+ result .Version = Utils .FS_BEYOND_80
85+ return result
86+ }
87+ }else {
88+ fmt .Println ("客户端与dnslog平台网络不可达" )
89+ //内网测试场景 施工中
8390 }
91+
8492 } else {
8593 //不出网
86- fmt .Println ("[-] 目标不出网" )
87- fmt .Println ("[+] 正在进行延迟探测" )
94+ fmt .Println ("[" + result . Url + "] :" + "[ -] 目标不出网" )
95+ fmt .Println ("[" + result . Url + "] :" + "[ +] 正在进行延迟探测" )
8896 if TimeDelayCheck (url ) {
8997 result .Netout = false
9098 result .Type = "Fastjson"
@@ -95,7 +103,7 @@ func DetectVersion(url string ) Utils.Result {
95103 }
96104 }
97105
98- result .Type = ""
106+ result .Type = jsonType
99107 return result
100108}
101109
@@ -105,25 +113,25 @@ func DetectVersion(url string ) Utils.Result {
105113**/
106114
107115func DetectDependency (target string )[]string {
108- fmt .Println ("[+] 正在进行依赖库探测" )
109- fmt .Println ("[+] 正在进行报错探测" )
110- var result []string
116+ fmt .Println ("[" + target + "] :" + "[ +] 正在进行依赖库探测" )
117+ fmt .Println ("[" + target + "] :" + "[ +] 正在进行报错探测" )
118+ var results []string
111119 findDependency := ErrDetectDependency (target ,Utils .DEPENDENCY_ERR_DETECT_FACTORY ())
112120 //fmt.Println(findDependency)
113121 if findDependency [0 ] == "" {
114- fmt .Println ("[-] 报错探测未发现任何依赖库" )
115- result [0 ] = ""
122+ fmt .Println ("[" + target + "] :" + "[ -] 报错探测未发现任何依赖库" )
123+ results [0 ] = ""
116124 }else {
117- fmt .Println ("[*] 发现依赖库如下" )
125+ fmt .Println ("[" + target + "] :" + "[ *] 发现依赖库如下" )
118126 for dependency := range findDependency {
119127 if findDependency [dependency ] != "" {
120128 fmt .Println (findDependency [dependency ])
121- result = append (result ,findDependency [dependency ])
129+ results = append (results ,findDependency [dependency ])
122130 }
123131
124132 }
125133 }
126- return result
134+ return results
127135}
128136
129137
@@ -134,16 +142,17 @@ func DetectDependency(target string)[]string{
134142
135143func DetectAutoType (url string ) bool {
136144 dnsurl ,session := Utils .GetDnslogUrl ()
137- var result bool
145+ var autoTypeStatus bool
138146 payload := Utils .AUTOTYPE_DETECT_FACTORY (dnsurl )
139- if DnslogDetect (url ,payload ,session ) == "[]" {
140- fmt .Println ("[-] 目标没有开启 AutoType" )
141- result = false
147+ record := DnslogDetect (url ,payload ,session )
148+ if record == "[]" || record == Utils .NETWORK_NOT_ACCESS {
149+ fmt .Println ("[" + url + "] :" + "[-] 目标没有开启 AutoType" )
150+ autoTypeStatus = false
142151 }else {
143- fmt .Println ("[*] 目标开启了 AutoType " )
144- result = true
152+ fmt .Println ("[" + url + "] :" + "[ *] 目标开启了 AutoType " )
153+ autoTypeStatus = true
145154 }
146- return result
155+ return autoTypeStatus
147156}
148157
149158func DnslogDetect (target string ,payload string ,session string ) string {
@@ -178,7 +187,11 @@ func ErrDetectVersion(target string) (string,bool){
178187 httpReq .Header .Add ("Content-Type" , "application/json" )
179188 httpRsp , err := http .DefaultClient .Do (httpReq )
180189 if err != nil {
181- err .Error ()
190+ httpRsp = Utils .NetWorkErrHandle (http .DefaultClient ,httpReq ,err )
191+ if httpRsp == nil {
192+ fmt .Println ("与" + target + "网络不可达,请检查网络" )
193+ return Utils .NETWORK_NOT_ACCESS ,false
194+ }
182195 }
183196 defer httpRsp .Body .Close ()
184197 body , err := ioutil .ReadAll (httpRsp .Body )
@@ -236,15 +249,15 @@ func TimeDelayCheck(url string) bool{
236249 var count int
237250 var start int64
238251 var pos int64 = 0
239- for i := 0 ; i < 5 ; i ++ {
252+ for i := 0 ; i < 6 ; i ++ {
240253 start = pos
241- payloads := Utils .TIME_DETECT_FACTORY (5 )
254+ payloads := Utils .TIME_DETECT_FACTORY (6 )
242255 pos = TimeGet (url ,payloads [i ])
243256 if pos - start > 0 {
244257 count ++
245258 }
246259 }
247- if count > 3 {
260+ if count > 4 {
248261 return true
249262 }
250263 return false
0 commit comments