mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2026-01-31 15:53:10 +08:00
Merge pull request #6735 from projectdiscovery/dwisiswant0/fix/js/mysql-panic-due-to-missing-executionId-in-ctx
fix(js): mysql panic due to missing `executionId` in ctx
This commit is contained in:
@@ -11,7 +11,7 @@ import (
|
||||
)
|
||||
|
||||
func memoizedconnect(executionId string, host string, port int, username string, password string, dbName string) (bool, error) {
|
||||
hash := "connect" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(username) + ":" + fmt.Sprint(password) + ":" + fmt.Sprint(dbName)
|
||||
hash := "connect" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(username) + ":" + fmt.Sprint(password) + ":" + fmt.Sprint(dbName)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return connect(executionId, host, port, username, password, dbName)
|
||||
@@ -27,7 +27,7 @@ func memoizedconnect(executionId string, host string, port int, username string,
|
||||
}
|
||||
|
||||
func memoizedisMssql(executionId string, host string, port int) (bool, error) {
|
||||
hash := "isMssql" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "isMssql" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return isMssql(executionId, host, port)
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
func memoizedisMySQL(executionId string, host string, port int) (bool, error) {
|
||||
hash := "isMySQL" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "isMySQL" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return isMySQL(executionId, host, port)
|
||||
@@ -25,7 +25,7 @@ func memoizedisMySQL(executionId string, host string, port int) (bool, error) {
|
||||
}
|
||||
|
||||
func memoizedfingerprintMySQL(executionId string, host string, port int) (MySQLInfo, error) {
|
||||
hash := "fingerprintMySQL" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "fingerprintMySQL" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return fingerprintMySQL(executionId, host, port)
|
||||
|
||||
@@ -8,11 +8,11 @@ import (
|
||||
"github.com/projectdiscovery/nuclei/v3/pkg/protocols/common/protocolstate"
|
||||
)
|
||||
|
||||
func memoizedconnectWithDSN(dsn string) (bool, error) {
|
||||
hash := "connectWithDSN" + ":" + fmt.Sprint(dsn)
|
||||
func memoizedconnectWithDSN(executionId string, dsn string) (bool, error) {
|
||||
hash := "connectWithDSN" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(dsn)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return connectWithDSN(dsn)
|
||||
return connectWithDSN(executionId, dsn)
|
||||
})
|
||||
if err != nil {
|
||||
return false, err
|
||||
|
||||
@@ -108,7 +108,7 @@ func (c *MySQLClient) Connect(ctx context.Context, host string, port int, userna
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return connectWithDSN(dsn)
|
||||
return connectWithDSN(executionId, dsn)
|
||||
}
|
||||
|
||||
type (
|
||||
@@ -190,8 +190,9 @@ func fingerprintMySQL(executionId string, host string, port int) (MySQLInfo, err
|
||||
// const client = new mysql.MySQLClient;
|
||||
// const connected = client.ConnectWithDSN('username:password@tcp(acme.com:3306)/');
|
||||
// ```
|
||||
func (c *MySQLClient) ConnectWithDSN(dsn string) (bool, error) {
|
||||
return memoizedconnectWithDSN(dsn)
|
||||
func (c *MySQLClient) ConnectWithDSN(ctx context.Context, dsn string) (bool, error) {
|
||||
executionId := ctx.Value("executionId").(string)
|
||||
return memoizedconnectWithDSN(executionId, dsn)
|
||||
}
|
||||
|
||||
// ExecuteQueryWithOpts connects to Mysql database using given credentials
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package mysql
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"net"
|
||||
@@ -72,7 +73,7 @@ func BuildDSN(opts MySQLOptions) (string, error) {
|
||||
}
|
||||
|
||||
// @memo
|
||||
func connectWithDSN(dsn string) (bool, error) {
|
||||
func connectWithDSN(executionId string, dsn string) (bool, error) {
|
||||
db, err := sql.Open("mysql", dsn)
|
||||
if err != nil {
|
||||
return false, err
|
||||
@@ -83,7 +84,8 @@ func connectWithDSN(dsn string) (bool, error) {
|
||||
db.SetMaxOpenConns(1)
|
||||
db.SetMaxIdleConns(0)
|
||||
|
||||
_, err = db.Exec("select 1")
|
||||
ctx := context.WithValue(context.Background(), "executionId", executionId) // nolint: staticcheck
|
||||
err = db.PingContext(ctx)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
func memoizedisOracle(executionId string, host string, port int) (IsOracleResponse, error) {
|
||||
hash := "isOracle" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "isOracle" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return isOracle(executionId, host, port)
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
func memoizedisPoP3(executionId string, host string, port int) (IsPOP3Response, error) {
|
||||
hash := "isPoP3" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "isPoP3" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return isPoP3(executionId, host, port)
|
||||
|
||||
@@ -5,15 +5,15 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
_ "github.com/projectdiscovery/nuclei/v3/pkg/js/utils/pgwrap"
|
||||
|
||||
utils "github.com/projectdiscovery/nuclei/v3/pkg/js/utils"
|
||||
|
||||
_ "github.com/projectdiscovery/nuclei/v3/pkg/js/utils/pgwrap"
|
||||
|
||||
"github.com/projectdiscovery/nuclei/v3/pkg/protocols/common/protocolstate"
|
||||
)
|
||||
|
||||
func memoizedisPostgres(executionId string, host string, port int) (bool, error) {
|
||||
hash := "isPostgres" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "isPostgres" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return isPostgres(executionId, host, port)
|
||||
@@ -29,7 +29,7 @@ func memoizedisPostgres(executionId string, host string, port int) (bool, error)
|
||||
}
|
||||
|
||||
func memoizedexecuteQuery(executionId string, host string, port int, username string, password string, dbName string, query string) (*utils.SQLResult, error) {
|
||||
hash := "executeQuery" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(username) + ":" + fmt.Sprint(password) + ":" + fmt.Sprint(dbName) + ":" + fmt.Sprint(query)
|
||||
hash := "executeQuery" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(username) + ":" + fmt.Sprint(password) + ":" + fmt.Sprint(dbName) + ":" + fmt.Sprint(query)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return executeQuery(executionId, host, port, username, password, dbName, query)
|
||||
@@ -45,7 +45,7 @@ func memoizedexecuteQuery(executionId string, host string, port int, username st
|
||||
}
|
||||
|
||||
func memoizedconnect(executionId string, host string, port int, username string, password string, dbName string) (bool, error) {
|
||||
hash := "connect" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(username) + ":" + fmt.Sprint(password) + ":" + fmt.Sprint(dbName)
|
||||
hash := "connect" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(username) + ":" + fmt.Sprint(password) + ":" + fmt.Sprint(dbName)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return connect(executionId, host, port, username, password, dbName)
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
func memoizedisRDP(executionId string, host string, port int) (IsRDPResponse, error) {
|
||||
hash := "isRDP" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "isRDP" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return isRDP(executionId, host, port)
|
||||
@@ -25,7 +25,7 @@ func memoizedisRDP(executionId string, host string, port int) (IsRDPResponse, er
|
||||
}
|
||||
|
||||
func memoizedcheckRDPAuth(executionId string, host string, port int) (CheckRDPAuthResponse, error) {
|
||||
hash := "checkRDPAuth" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "checkRDPAuth" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return checkRDPAuth(executionId, host, port)
|
||||
@@ -41,7 +41,7 @@ func memoizedcheckRDPAuth(executionId string, host string, port int) (CheckRDPAu
|
||||
}
|
||||
|
||||
func memoizedcheckRDPEncryption(executionId string, host string, port int) (RDPEncryptionResponse, error) {
|
||||
hash := "checkRDPEncryption" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "checkRDPEncryption" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return checkRDPEncryption(executionId, host, port)
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
func memoizedgetServerInfo(executionId string, host string, port int) (string, error) {
|
||||
hash := "getServerInfo" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "getServerInfo" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return getServerInfo(executionId, host, port)
|
||||
@@ -25,7 +25,7 @@ func memoizedgetServerInfo(executionId string, host string, port int) (string, e
|
||||
}
|
||||
|
||||
func memoizedconnect(executionId string, host string, port int, password string) (bool, error) {
|
||||
hash := "connect" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(password)
|
||||
hash := "connect" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(password)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return connect(executionId, host, port, password)
|
||||
@@ -41,7 +41,7 @@ func memoizedconnect(executionId string, host string, port int, password string)
|
||||
}
|
||||
|
||||
func memoizedgetServerInfoAuth(executionId string, host string, port int, password string) (string, error) {
|
||||
hash := "getServerInfoAuth" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(password)
|
||||
hash := "getServerInfoAuth" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(password)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return getServerInfoAuth(executionId, host, port, password)
|
||||
@@ -57,7 +57,7 @@ func memoizedgetServerInfoAuth(executionId string, host string, port int, passwo
|
||||
}
|
||||
|
||||
func memoizedisAuthenticated(executionId string, host string, port int) (bool, error) {
|
||||
hash := "isAuthenticated" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "isAuthenticated" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return isAuthenticated(executionId, host, port)
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
func memoizedisRsync(executionId string, host string, port int) (IsRsyncResponse, error) {
|
||||
hash := "isRsync" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "isRsync" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return isRsync(executionId, host, port)
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
)
|
||||
|
||||
func memoizedconnectSMBInfoMode(executionId string, host string, port int) (*smb.SMBLog, error) {
|
||||
hash := "connectSMBInfoMode" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "connectSMBInfoMode" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return connectSMBInfoMode(executionId, host, port)
|
||||
@@ -27,7 +27,7 @@ func memoizedconnectSMBInfoMode(executionId string, host string, port int) (*smb
|
||||
}
|
||||
|
||||
func memoizedlistShares(executionId string, host string, port int, user string, password string) ([]string, error) {
|
||||
hash := "listShares" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(user) + ":" + fmt.Sprint(password)
|
||||
hash := "listShares" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(user) + ":" + fmt.Sprint(password)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return listShares(executionId, host, port, user, password)
|
||||
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
)
|
||||
|
||||
func memoizedcollectSMBv2Metadata(executionId string, host string, port int, timeout time.Duration) (*plugins.ServiceSMB, error) {
|
||||
hash := "collectSMBv2Metadata" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(timeout)
|
||||
hash := "collectSMBv2Metadata" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port) + ":" + fmt.Sprint(timeout)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return collectSMBv2Metadata(executionId, host, port, timeout)
|
||||
|
||||
@@ -3,13 +3,14 @@ package smb
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"fmt"
|
||||
|
||||
"github.com/projectdiscovery/nuclei/v3/pkg/protocols/common/protocolstate"
|
||||
)
|
||||
|
||||
func memoizeddetectSMBGhost(executionId string, host string, port int) (bool, error) {
|
||||
hash := "detectSMBGhost" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "detectSMBGhost" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return detectSMBGhost(executionId, host, port)
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
func memoizedisTelnet(executionId string, host string, port int) (IsTelnetResponse, error) {
|
||||
hash := "isTelnet" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "isTelnet" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return isTelnet(executionId, host, port)
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
func memoizedisVNC(executionId string, host string, port int) (IsVNCResponse, error) {
|
||||
hash := "isVNC" + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
hash := "isVNC" + ":" + fmt.Sprint(executionId) + ":" + fmt.Sprint(host) + ":" + fmt.Sprint(port)
|
||||
|
||||
v, err, _ := protocolstate.Memoizer.Do(hash, func() (interface{}, error) {
|
||||
return isVNC(executionId, host, port)
|
||||
|
||||
@@ -200,8 +200,14 @@ func initDialers(options *types.Options) error {
|
||||
addr += ":3306"
|
||||
}
|
||||
|
||||
executionId := ctx.Value("executionId").(string)
|
||||
var executionId string
|
||||
if val := ctx.Value("executionId"); val != nil {
|
||||
executionId = val.(string)
|
||||
}
|
||||
dialer := GetDialersWithId(executionId)
|
||||
if dialer == nil {
|
||||
return nil, fmt.Errorf("dialers not initialized for %s", executionId)
|
||||
}
|
||||
return dialer.Fastdialer.Dial(ctx, "tcp", addr)
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user