2020-12-29 01:17:10 -08:00
|
|
|
|
package Plugins
|
|
|
|
|
|
2022-11-20 19:33:02 -08:00
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
"crypto/aes"
|
|
|
|
|
"crypto/cipher"
|
|
|
|
|
"encoding/base64"
|
|
|
|
|
"net"
|
|
|
|
|
)
|
2022-11-19 01:04:13 -08:00
|
|
|
|
|
2020-12-29 01:17:10 -08:00
|
|
|
|
var PluginList = map[string]interface{}{
|
2022-11-19 01:04:13 -08:00
|
|
|
|
"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
|
2020-12-29 01:17:10 -08:00
|
|
|
|
}
|
2022-11-20 18:38:40 -08:00
|
|
|
|
|
|
|
|
|
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)]
|
|
|
|
|
}
|