fscan icon indicating copy to clipboard operation
fscan copied to clipboard

PortFinger.go的trimBanner函数对SMB的banner处理可能越界

Open astropivot opened this issue 7 months ago • 1 comments

fscan/Core/PortFinger.go的trimBanner函数中可能越界

func trimBanner(buf []byte) string {
	Common.LogDebug("开始处理横幅数据")
	bufStr := string(buf)

	// 特殊处理SMB协议
	if strings.Contains(bufStr, "SMB") {
		banner := hex.EncodeToString(buf)
		if len(banner) > 0xa+6 && banner[0xa:0xa+6] == "534d42" { // "SMB" in hex  //<<===len(banner)>0不保证len(banner)大于0xa2
			Common.LogDebug("检测到SMB协议数据")
			plain := banner[0xa2:] //<<===这里可能越界
			data, err := hex.DecodeString(plain)
			if err != nil {
				Common.LogDebug("SMB数据解码失败: " + err.Error())
				return bufStr
			}
       //...

例如处理下面这个包就会越界,不过前提是修改对probes的处理,正确发送"Probe TCP SMBProgNeg"才能测出来 Image

[]byte{0x0, 0x0, 0x0, 0x25, 0xff, 0x53, 0x4d, 0x42, 0x72, 0x0, 0x0, 0x0, 0x0, 0x88, 0x3, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x6, 0x0, 0x0, 0x1, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0}

对应的match是

match netbios-ssn m|^\0\0\0.\xffSMBr\0\0\0\0\x88..\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\x06\0\0\x01\0\x01\xff\xff\0\0$|s p/Samba smbd/ v/4/ cpe:/a:samba:samba:4/

===================================================================== 怎么代码里面的正则匹配都是先把response转字符串再用match匹配啊,response是二进制,又不是都能转化成字符串

例如

//PortFinger.go
// MatchPattern 使用正则表达式匹配响应内容
func (m *Match) MatchPattern(response []byte) bool {
	// 将响应转换为字符串并进行匹配
	responseStr := string([]rune(string(response)))  //<<===应该删掉
	foundItems := m.PatternCompiled.FindStringSubmatch(responseStr) 
//应该删掉FindStringSubmatch应该换成FindSubmatch或其他正则库中类似的函数,foundItems可以转化成string,但匹配的时候不能把response转成string

	if len(foundItems) > 0 {
		m.FoundItems = foundItems
		Common.LogDebug(fmt.Sprintf("匹配成功,找到 %d 个匹配项", len(foundItems)))
		return true
	}
	
	return false
}

基本都是issues#478的问题

astropivot avatar May 06 '25 07:05 astropivot

收到,将马上修复

ZacharyZcR avatar May 08 '25 03:05 ZacharyZcR

这部分应该修复掉了,我后面做了几次破坏性的重写,但是也不能排除问题依然存在,🤔,#478的问题修复掉了,等发布后如果还有问题可以我们再讨论下

ZacharyZcR avatar Oct 02 '25 09:10 ZacharyZcR