mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-05-08 03:36:28 +00:00
100 lines
2.4 KiB
Go
100 lines
2.4 KiB
Go
package Plugins
|
||
|
||
import "net"
|
||
|
||
var PluginList = map[string]interface{}{
|
||
"21": FtpScan,
|
||
"22": SshScan,
|
||
"135": Findnet,
|
||
"139": NetBIOS,
|
||
"445": SmbScan,
|
||
"1433": MssqlScan,
|
||
"1521": OracleScan,
|
||
"3306": MysqlScan,
|
||
"3389": RdpScan,
|
||
"5432": PostgresScan,
|
||
"6379": RedisScan,
|
||
"9000": FcgiScan,
|
||
"11211": MemcachedScan,
|
||
"27017": MongodbScan,
|
||
"1000001": MS17010,
|
||
"1000002": SmbGhost,
|
||
"1000003": WebTitle,
|
||
"1000004": SmbScan2,
|
||
"1000005": WmiExec,
|
||
}
|
||
|
||
func ReadBytes(conn net.Conn) (result []byte, err error) {
|
||
size := 4096
|
||
buf := make([]byte, size)
|
||
for {
|
||
count, err := conn.Read(buf)
|
||
if err != nil {
|
||
break
|
||
}
|
||
result = append(result, buf[0:count]...)
|
||
if count < size {
|
||
break
|
||
}
|
||
}
|
||
if len(result) > 0 {
|
||
err = nil
|
||
}
|
||
return result, err
|
||
}
|
||
|
||
var key = "0123456789abcdef"
|
||
|
||
func AesEncrypt(orig string, key string) string {
|
||
// 转成字节数组
|
||
origData := []byte(orig)
|
||
k := []byte(key)
|
||
// 分组秘钥
|
||
// NewCipher该函数限制了输入k的长度必须为16, 24或者32
|
||
block, _ := aes.NewCipher(k)
|
||
// 获取秘钥块的长度
|
||
blockSize := block.BlockSize()
|
||
// 补全码
|
||
origData = PKCS7Padding(origData, blockSize)
|
||
// 加密模式
|
||
blockMode := cipher.NewCBCEncrypter(block, k[:blockSize])
|
||
// 创建数组
|
||
cryted := make([]byte, len(origData))
|
||
// 加密
|
||
blockMode.CryptBlocks(cryted, origData)
|
||
return base64.StdEncoding.EncodeToString(cryted)
|
||
}
|
||
func AesDecrypt(cryted string, key string) string {
|
||
// 转成字节数组
|
||
crytedByte, _ := base64.StdEncoding.DecodeString(cryted)
|
||
k := []byte(key)
|
||
// 分组秘钥
|
||
block, _ := aes.NewCipher(k)
|
||
// 获取秘钥块的长度
|
||
blockSize := block.BlockSize()
|
||
// 加密模式
|
||
blockMode := cipher.NewCBCDecrypter(block, k[:blockSize])
|
||
// 创建数组
|
||
orig := make([]byte, len(crytedByte))
|
||
// 解密
|
||
blockMode.CryptBlocks(orig, crytedByte)
|
||
// 去补全码
|
||
orig = PKCS7UnPadding(orig)
|
||
return string(orig)
|
||
}
|
||
|
||
// 补码
|
||
// AES加密数据块分组长度必须为128bit(byte[16]),密钥长度可以是128bit(byte[16])、192bit(byte[24])、256bit(byte[32])中的任意一个。
|
||
func PKCS7Padding(ciphertext []byte, blocksize int) []byte {
|
||
padding := blocksize - len(ciphertext)%blocksize
|
||
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
|
||
return append(ciphertext, padtext...)
|
||
}
|
||
|
||
// 去码
|
||
func PKCS7UnPadding(origData []byte) []byte {
|
||
length := len(origData)
|
||
unpadding := int(origData[length-1])
|
||
return origData[:(length - unpadding)]
|
||
}
|