mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-28 17:45:25 +00:00
* Adding support for code templates * adding support for python, powershell and echo (test) * removing debug code * introducing command + trivial trust store mechanism * updating tests * adding basic tests * removing deprecated oracle * mod tidy * adding signature proto with debug prints * removing debug code * fixing test * fixing param order * improving test conditional build * disable file+offlinehttp+code with cloud * adding env vars * removing debug code * reorganizing test folders * adding code template test prototype with dummy priv/pub keys * bump go to 1.20 * fixing go version * fixing lint errors * adding fatal on pub-key test failure * switching to ecdsa asn1 * removing unused signature * fixing signature * adding more tests * extending core with engine args + powershell win test * adding unsigned code test * skip template signing in particular test case * improving test coverage * refactoring key names + adding already signed algo * removing debug code * fixing syntax * fixing lint issues * removing test template * fixing dns tests path * output fmt * adding interact * fixing lint issues * adding -sign cli helper * fixing nil pointer + parse inline keys * making rsa default * adding code prot. ref * moving file to correct loc * moving test * Issue 3339 headless fuzz (#3790) * Basic headless fuzzing * Remove debug statements * Add integration tests * Update template * Fix recognize payload value in matcher * Update tempalte * use req.SetURL() --------- Co-authored-by: Tarun Koyalwar <tarun@projectdiscovery.io> * Auto Generate Syntax Docs + JSONSchema [Fri Jun 9 00:23:32 UTC 2023] 🤖 * Add headless header and status matchers (#3794) * add headless header and status matchers * rename headers as header * add integration test for header+status * fix typo * add retry to py-interactsh integration test --------- Co-authored-by: Sandeep Singh <sandeep@projectdiscovery.io> Co-authored-by: Shubham Rasal <shubham@projectdiscovery.io> Co-authored-by: Tarun Koyalwar <tarun@projectdiscovery.io> Co-authored-by: GitHub Action <action@github.com> Co-authored-by: Dogan Can Bakir <65292895+dogancanbakir@users.noreply.github.com> Co-authored-by: Tarun Koyalwar <45962551+tarunKoyalwar@users.noreply.github.com>
71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package utils
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/projectdiscovery/nuclei/v2/pkg/templates/extensions"
|
|
"github.com/projectdiscovery/nuclei/v2/pkg/templates/signer"
|
|
stringsutil "github.com/projectdiscovery/utils/strings"
|
|
)
|
|
|
|
func SignTemplate(sign *signer.Signer, templatePath string) error {
|
|
templateData, err := os.ReadFile(templatePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
signatureData, err := signer.Sign(sign, templateData)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
dataWithoutSignature := signer.RemoveSignatureFromData(templateData)
|
|
return AppendToFile(templatePath, dataWithoutSignature, signatureData)
|
|
}
|
|
|
|
func ProcessFile(sign *signer.Signer, filePath string) error {
|
|
ext := filepath.Ext(filePath)
|
|
if !stringsutil.EqualFoldAny(ext, extensions.YAML) {
|
|
return nil
|
|
}
|
|
err := SignTemplate(sign, filePath)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "could not sign template: %s", filePath)
|
|
}
|
|
|
|
ok, err := VerifyTemplateSignature(sign, filePath)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "could not verify template: %s", filePath)
|
|
}
|
|
if !ok {
|
|
return errors.Wrapf(err, "template signature doesn't match: %s", filePath)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func AppendToFile(path string, data []byte, digest string) error {
|
|
file, err := os.Create(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
|
|
if _, err := file.Write(data); err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err := file.WriteString("\n" + digest); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func VerifyTemplateSignature(sign *signer.Signer, templatePath string) (bool, error) {
|
|
templateData, err := os.ReadFile(templatePath)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return signer.Verify(sign, templateData)
|
|
}
|