Skip to content

Commit f6513f8

Browse files
committed
optimization 2023-11-27
1 parent 1878eca commit f6513f8

File tree

3 files changed

+38
-53
lines changed

3 files changed

+38
-53
lines changed

geCurIp_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ import (
99

1010
func TestGetIp(t *testing.T) {
1111
os.Setenv("CacheName", "TmpXx1")
12+
os.Setenv("HTTPS_PROXY", "socks5://127.0.0.1:7890")
1213
util.DoInit(nil)
1314
//t.Run("获取当前用户的ip", func(t *testing.T) {
1415
// if got := util.GetIp(); !reflect.DeepEqual(got, "") {
1516
// t.Errorf("GetIp() = %v, want %v", got, "")
1617
// }
1718
//})
1819

19-
Smuggling.DoCheckSmuggling("http://127.0.0.1/", "")
20+
Smuggling.DoCheckSmuggling("https://ttblaze.iifl.com:4021/", "")
2021
util.Wg.Wait()
2122
util.CloseAll()
2223
}

lib/Smuggling/CheckSmuggling.go

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -43,30 +43,30 @@ func checkSmuggling4Poc(ClTePayload *[]string, nTimes int, r1 *Smuggling, r *soc
4343
}
4444

4545
/*
46-
check HTTP Request Smuggling
47-
可以利用走私尝试访问,被常规手段屏蔽的路径,例如 weblogic 的页面
48-
https://portswigger.net/web-security/request-smuggling/finding
49-
https://hackerone.com/reports/1630668
50-
https://github.com/nodejs/llhttp/blob/master/src/llhttp/http.ts#L483
51-
1、每个目标的登陆页面只做一次检测,也就是发现你登陆页面的路径可以做一次检测
52-
2、每个目标相同上下文的页面只做一次检测,爬虫发现的不同上下文各做一次检测
53-
szBody 是为了 相同url 相同payload 的情况下,只发一次请求,进行多次判断而设计,Smuggling 的场景通常不存在
46+
check HTTP Request Smuggling
47+
可以利用走私尝试访问,被常规手段屏蔽的路径,例如 weblogic 的页面
48+
https://portswigger.net/web-security/request-smuggling/finding
49+
https://hackerone.com/reports/1630668
50+
https://github.com/nodejs/llhttp/blob/master/src/llhttp/http.ts#L483
51+
1、每个目标的登陆页面只做一次检测,也就是发现你登陆页面的路径可以做一次检测
52+
2、每个目标相同上下文的页面只做一次检测,爬虫发现的不同上下文各做一次检测
53+
szBody 是为了 相同url 相同payload 的情况下,只发一次请求,进行多次判断而设计,Smuggling 的场景通常不存在
5454
55-
做一次 http
56-
util.PocCheck_pipe <- &util.PocCheck{
57-
Wappalyzertechnologies: &[]string{"httpCheckSmuggling"},
58-
URL: finalURL,
59-
FinalURL: finalURL,
60-
Checklog4j: false,
61-
}
55+
做一次 http
56+
util.PocCheck_pipe <- &util.PocCheck{
57+
Wappalyzertechnologies: &[]string{"httpCheckSmuggling"},
58+
URL: finalURL,
59+
FinalURL: finalURL,
60+
Checklog4j: false,
61+
}
6262
*/
6363
func DoCheckSmuggling(szUrl string, szBody string) {
6464
for _, x := range payload {
6565
util.Wg.Add(1)
6666
go func(j Smuggling, szUrl string) {
6767
defer util.Wg.Done()
6868
if "" == szBody {
69-
x1 := socket.NewCheckTarget(szUrl, "tcp", 3)
69+
x1 := socket.NewCheckTarget(szUrl, "tcp", 30)
7070
defer x1.Close()
7171
checkSmuggling4Poc(j.GetPayloads(x1), j.GetTimes(), &j, x1)
7272
} else {
@@ -77,11 +77,12 @@ func DoCheckSmuggling(szUrl string, szBody string) {
7777
}
7878

7979
// 构造走私,用来访问被屏蔽的页面
80-
// 确认存在走私漏洞后,可以继续基于走私 走以便filefuzz
81-
// 1、首先 szUrl必须是可访问的 200,否则可能会导致误判
82-
// @szUrl 设施走私的目标
83-
// @smugglinUrlPath 希望走私能访问到到页面,例如 /console
84-
// @secHost 第二段头的host
80+
//
81+
// 确认存在走私漏洞后,可以继续基于走私 走以便filefuzz
82+
// 1、首先 szUrl必须是可访问的 200,否则可能会导致误判
83+
// @szUrl 设施走私的目标
84+
// @smugglinUrlPath 希望走私能访问到到页面,例如 /console
85+
// @secHost 第二段头的host
8586
func GenerateHttpSmugglingPay(szUrl, smugglinUrlPath, secHost string) string {
8687
a := []string{`POST %s HTTP/1.1
8788
Host: %s

lib/socket/ConnTarget.go

Lines changed: 14 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/hktalent/scan4all/lib/util"
99
"net"
1010
"net/url"
11+
"regexp"
1112
"strconv"
1213
"strings"
1314
"time"
@@ -49,15 +50,10 @@ func NewCheckTarget(szUrl, SzType string, readWriteTimeout int) *CheckTarget {
4950
r11.Port = 80
5051
// https://eli.thegreenplace.net/2021/go-socket-servers-with-tls/
5152
r11.IsTLS = strings.HasPrefix(strings.ToLower(u.Scheme), "https")
52-
if "" == u.Port() {
53-
if r11.IsTLS {
54-
r11.Port = 443
55-
}
56-
} else {
57-
n, err := strconv.Atoi(u.Port())
58-
if nil == err {
59-
r11.Port = n
60-
}
53+
if "" == u.Port() && r11.IsTLS {
54+
r11.Port = 443
55+
} else if n, err := strconv.Atoi(u.Port()); nil == err {
56+
r11.Port = n
6157
}
6258
if "" != u.Path {
6359
r11.UrlPath = u.Path
@@ -180,6 +176,8 @@ func (r *CheckTarget) Log(s string) {
180176
//log.Println(s)
181177
}
182178

179+
var ipReg = regexp.MustCompile(`^(\d{1,3}\.){3}\d{1,3}$`)
180+
183181
// 连接目标
184182
// sysctl -w net.ipv4.tcp_keepalive_time=300
185183
// sysctl -w net.ipv4.tcp_keepalive_intvl=30
@@ -191,38 +189,23 @@ func (r *CheckTarget) ConnTarget() (*CheckTarget, error) {
191189
conf := &tls.Config{
192190
InsecureSkipVerify: true,
193191
}
194-
r.Conn, err = tls.Dial(r.ConnType, fmt.Sprintf("%s:%d", r.Target, r.Port), conf)
195-
if err == nil {
196-
//r.Conn.SetKeepAlive(true)
197-
// 设置读取超时
198-
err = r.Conn.SetReadDeadline(time.Now().Add(time.Duration(r.ReadTimeout) * time.Second))
199-
if err != nil {
200-
defer r.Close()
201-
r.Log(szErr)
202-
return r, err
203-
}
204-
r.ConnState = true
192+
ServerName := strings.Split(r.Target, ":")[0]
193+
if !ipReg.Match([]byte(ServerName)) {
194+
conf.ServerName = ServerName
205195
}
196+
r.Conn, err = tls.Dial(r.ConnType, fmt.Sprintf("%s:%d", r.Target, r.Port), conf)
206197
} else {
207198
r.Conn, err = net.DialTimeout(r.ConnType, fmt.Sprintf("%s:%d", r.Target, r.Port), time.Duration(r.ReadTimeout)*time.Second)
208-
if err != nil {
209-
r.Log(szErr)
210-
return r, err
211-
}
199+
}
200+
if err == nil {
201+
//defer r.Close()
212202
//r.Conn.SetKeepAlive(true)
213203
// 设置读取超时
214204
err = r.Conn.SetReadDeadline(time.Now().Add(time.Duration(r.ReadTimeout) * time.Second))
215205
if err != nil {
216-
defer r.Close()
217206
r.Log(szErr)
218207
return r, err
219208
}
220-
// 设置写超时
221-
//conn1.SetWriteDeadline(time.Now().Add(time.Duration(r.ReadTimeout) * time.Second))
222-
//if err != nil {
223-
// return r, err
224-
//}
225-
//log.Printf("connect ok: %s", r.UrlRaw)
226209
r.ConnState = true
227210
}
228211
return r, nil

0 commit comments

Comments
 (0)