JS リバース --- Cookie アンチクローラークラッキング技術の実践的な事例分析 (ローカル zf ウェブサイト)


序文

Cookie アンチクローラーとは、リクエスト ヘッダーの Cookie 値を検証することによって、通常のユーザーとクローラー プログラムを区別するサーバー側の方法を指します。この方法は、Web アプリケーションで広く使用されています。
今回は主に Cookie 値が暗号化された Web サイトの状況を分析します
Cookie とセッションへの応答方法を学びます
ホームページに基づいて返される Cookie 値を学習する


声明
この記事のすべてのコンテンツは学習とコミュニケーションのみを目的としており、他の目的には使用されません。完全なコードは提供されていません。パケット キャプチャ コンテンツ、機密性の高い URL 、データ インターフェイスなどが処理されています。商業的および違法な目的での感度解除は固く禁じられています。そうでない場合、作成者はそこから生じるいかなる結果にも関与しません。
本記事の無断転載、改変して再配布することを禁止します、本記事で解説した技術の無断使用により生じた事故について、作者は一切の責任を負いません。権利侵害がある場合は、直ちに作者に連絡して削除し、関連する法律や規制を意識的に遵守してください。


1. Cookie アンチクローラー

1.1 機能のヒント

Cookie 暗号化には一般に 1 つの特徴があります。データを取得するにはサーバーへの複数のリクエストが必要です。
2 つの形式/状況

  • 1. 相手のサーバーに直接アクセスすると、サーバーは応答ヘッダーを通じて cookie 値を返します (通常、ヘッダーには set-cookie と呼ばれるキーワードがあります)。
  • 2. 相手のサーバーに初めてリクエストするとき、相手はいくつかの JS ファイルを返し、ブラウザの JS アルゴリズムを通じて Cookie 値を取得し、JS によって生成された Cookie 値を保持して 2 回目の Web サイトをリクエストします。リクエスト。相手は通常のデータを表示する(この方法は比較的多い)

2.2 Cookieの暗号化原理

ここに画像の説明を挿入します

2. 実践的な分析

  • 逆ターゲット:某zfサイト
  • 逆パラメータ: X-Csrf-Token パラメータ/Cookie 値
  • 逆インターフェース: pubList(cookie)/published?via=pc(X-Csrf-Token)

Web サイトを分析する
インターフェイス: pubList
分析して、ペイロード部分が暗号化されていないことと、リクエスト ヘッダー部分の Cookie 値を確認します。 / X-Csrf-Token が含まれる可能性があります: パラメータ部分には、
テスト用のデモを作成しました。
Cookie 値の szxx_session 値と X - リクエスト ヘッダー内の Csrf - トークンの値によってリクエストが成功するかどうかが決まります
X-Csrf-Token: 値の位置はヘッダー ドキュメント リクエストの応答内にあります
したがって、必要なのは、これら 2 つのパラメータを解析することです

X-Csrf-Token 値は更新後に変更されていないため、値を直接コピーし、その値の出所を検索します。
値が HTML 内にあることを確認してください a>
したがって、値を取得したい場合は、そのインターフェイスをリクエストし、正規表現で検索して値を取得します。

ここに画像の説明を挿入します
Cookie の値を分析してアプリケーションの内部を確認すると、バックエンドから 2 つの Cookie の値が返されていることを確認できます (上記の特徴的なケース 1)。
ここに画像の説明を挿入します
次に、set_cookie 値があるかどうかを確認し、それが必要なものであるかどうかを判断し、実際に必要な Web サイトの場所であることを確認します。 次に、非常に簡単で、 2 つの部分 以上

コードは以下のように表示されます

import requests
import re

headers = {
    
    
    "Accept": "application/json, text/plain, */*",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
    "Cache-Control": "no-cache",
    "Connection": "keep-alive",
    "Content-Type": "application/x-www-form-urlencoded",
    "Origin": "http://www.zjmazhang.gov.cn",
    "Pragma": "no-cache",
    "Referer": "http://www.zjmazhang.gov.cn/",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
    "X-CSRF-TOKEN": "LeeXVPsnXRIFt1SKxeuKyfptfSvcRaw1aCkfO5D1"
}

def get_index():
    headers = {
    
    
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
        "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
        "Cache-Control": "no-cache",
        "Connection": "keep-alive",
        "Pragma": "no-cache",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"
    }
    url = "http://www.zjmazhang.gov.cn/hdjlpt/published?via=pc"
    response = requests.get(url, headers=headers)
    # print(response.cookies)
    XSRF_TOKEN = response.cookies.get('XSRF-TOKEN')
    szxx_session = response.cookies.get('szxx_session')
    X_Csrf_Token = re.findall("var _CSRF = '(.*?)';", response.text, re.S)    # 使用re.S参数以后,正则表达式会将这个字符串作为一个整体,在整体中进行匹配。(允许进行换行匹配)
    print(X_Csrf_Token)
    return XSRF_TOKEN, szxx_session, X_Csrf_Token[0] if X_Csrf_Token else ''

def get_data():
    XSRF_TOKEN, szxx_session, X_Csrf_Token = get_index()
    headers['X-CSRF-TOKEN'] = X_Csrf_Token
    url = 'http://www.zjmazhang.gov.cn/hdjlpt/letter/pubList'
    cookies = {
    
    
        "XSRF-TOKEN": XSRF_TOKEN,
        "szxx_session": szxx_session
    }

    print(headers)
    data = {
    
    
        "offset": "0",
        "limit": "20",
        "site_id": "759010",
        "time_from": "1665676800",
        "time_to": "1697212799"
    }
    response = requests.post(url, headers=headers, cookies=cookies, data=data, verify=False)

    print(response.text)
    print(response)

if __name__ == '__main__':
    get_data()

結果は次のとおりです
ここに画像の説明を挿入します

最後に書きます:
私の文章レベルには限界があります。説明が適切でない場合や間違っている場合は、コメント欄にアドバイスをいただければ対応いたします。コードと説明のコミュニケーションが必要な場合は、WeChat 18847868809 に私を追加してください。

おすすめ

転載: blog.csdn.net/m0_52336378/article/details/133816337
おすすめ