đĄī¸
WAF Bypass â Cloudflare āĻ TLS Fingerprint
Bot detection āĻāĻĄāĻŧāĻŋāϝāĻŧā§ human-āĻāϰ āĻŽāϤ⧠request āĻĒāĻžāĻ āĻžāĻ
đ§ āĻĻāĻā§āώāϤāĻž āϝāĻžāĻāĻžāĻ āĻ āĻĒā§āϰāϤāĻŋāϰāĻā§āώāĻžāĻŽā§āϞāĻ takeaway
Skill checkpoint: WAF-āĻāϰ āĻāĻĻā§āĻĻā§āĻļā§āϝ āĻāĻŦāĻ TLS/client fingerprint-āĻāϰ āϏā§āĻŽāĻž āĻŦā§āϝāĻžāĻā§āϝāĻž āĻāϰā§āĨ¤
Defense checkpoint: Detection rule, rate limit āĻ false-positive review-āĻ āĻŽāύā§āϝā§āĻ āĻĻāĻžāĻ.
Lab scope: āĻļā§āϧ⧠āύāĻŋāĻā§āϰ lab, synthetic data āĻŦāĻž āϞāĻŋāĻāĻŋāϤ āĻ
āύā§āĻŽāϤāĻŋāĻĒā§āϰāĻžāĻĒā§āϤ target-āĻ āĻ
āύā§āĻļā§āϞāύ āĻāϰā§āĨ¤ Real credential, token āĻŦāĻž customer data āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻā§āϰ⧠āύāĻžāĨ¤
Portfolio proof: finding, impact, fix āĻ retest āύāĻŋā§ā§ ā§Ģ-āϞāĻžāĻāύā§āϰ redacted note āϰāĻžāĻā§āĨ¤
đ° āϰāĻžāĻāĻŽāĻšāϞā§āϰ āĻāĻžāϰā§āĻĄ â WAF āĻā§?
WAF = Web Application FirewallāĨ¤ Cloudflare-āĻāϰ WAF āĻšāϞ⧠āϰāĻžāĻāĻŽāĻšāϞā§āϰ security guardāĨ¤
āϤā§āĻŽāĻŋ āϏāĻžāϧāĻžāϰāĻŖ Python requests āĻĒāĻžāĻ āĻžāϞ⧠â guard āĻŦāϞ⧠āĻĻā§āϝāĻŧ "āϤā§āĻŽāĻŋ robot! āĻā§āϤāϰ⧠āϝāĻžāĻŦā§ āύāĻž!"
āĻāĻŋāύā§āϤ⧠Chrome browser āĻĨā§āĻā§ same request āĻĒāĻžāĻ āĻžāϞ⧠â "Welcome! āĻĸā§āĻā§ āϝāĻžāĻāĨ¤"
āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻā§āĻĨāĻžāϝāĻŧ? TLS Fingerprint!
đŖ JA3 Fingerprint â āĻā§āϤā§āϰ āĻāĻžāĻĒā§āϰ āĻŽāϤā§
TLS handshake-āĻ āĻĒā§āϰāϤāĻŋāĻāĻž software āύāĻŋāĻā§āϰ āĻĒāϰāĻŋāĻāϝāĻŧ āĻĻā§āϝāĻŧ â āĻāĻāĻžāĻ JA3 fingerprint:
JA3 = MD5(TLS_version + Cipher_suites + Extensions + Groups + Formats)
Python requests: JA3 = 3b5074b1b5d032e5620f69f9159bdbfe â BLOCKED!
Chrome 120: JA3 = aa56c057ad164ec4fdcb7a5a283be9fc â
OK
Firefox 121: JA3 = b32309a26951912be7dba376398abc3b â
OK
Safari 17: JA3 = 773906b0efdefa24a7f2b8eb6985bf37āĻ â
OK
Cloudflare-āĻāϰ database-āĻ āϞāĻā§āώ āϞāĻā§āώ JA3 āĻāĻā§āĨ¤ Python-āĻāϰ JA3 = "BOT" āĻāĻŋāĻšā§āύāĻŋāϤ!
â āĻļā§āϧ⧠User-Agent āĻŦāĻĻāϞāĻžāϞ⧠āĻšāϝāĻŧ āύāĻž āĻā§āύ?
āĻ
āύā§āĻā§ āĻāĻžāĻŦā§ User-Agent āĻŦāĻĻāϞāĻžāϞā§āĻ Cloudflare bypass āĻšāĻŦā§āĨ¤
āĻā§āϞ!
āĻāϧā§āύāĻŋāĻ WAF āĻ
āύā§āĻ āĻāĻŋāĻā§ āĻāĻāϏāĻžāĻĨā§ check āĻāϰā§:
Check list:
â
TLS JA3 fingerprint (āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ!)
â
HTTP/2 SETTINGS frame values
â
HTTP/2 WINDOW_UPDATE size
â
Header order āĻ case (Chrome āϏāĻŦāϏāĻŽāϝāĻŧ lowercase)
â
Mouse movement patterns (behavior analysis)
â
JavaScript challenge results
â
IP reputation score
User-Agent = "Chrome" āĻāĻŋāύā§āϤ⧠JA3 = Python â āϏāĻžāĻĨā§ āϏāĻžāĻĨā§ āϧāϰāĻž!
đ curl_cffi â āϏāĻŽāĻžāϧāĻžāύ!
curl_cffi = libcurl-āĻāϰ Python bindingāĨ¤ Real browser-āĻāϰ exact TLS stack use āĻāϰā§:
# Install:
pip install curl-cffi
# Use:
from curl_cffi import requests
# Chrome 120-āĻāϰ āĻŽāϤ⧠āĻĻā§āĻāĻžāĻ â JA3 exact match!
r = requests.get(
"https://training.example.test/api/products",
impersonate="chrome120"
)
print(r.status_code) # 200 â
Cloudflare bypass!
# Available browsers:
# chrome99, chrome110, chrome120
# firefox102, firefox133
# safari15_3, safari17_0
# edge99, edge101
đ HTTP/2 Fingerprint
JA3-āĻāϰ āĻŦāĻžāĻāϰ⧠HTTP/2 traffic-āĻ fingerprint āĻāϰāĻž āϝāĻžāϝāĻŧ:
HTTP/2 Fingerprint (JA3-āϰ āĻŽāϤ⧠āĻāĻŋāύā§āϤ⧠HTTP/2-āĻ):
Chrome-āϰ SETTINGS frame:
HEADER_TABLE_SIZE: 65536
ENABLE_PUSH: 0
INITIAL_WINDOW_SIZE: 6291456
MAX_HEADER_LIST_SIZE: 262144
Python http2-āϰ SETTINGS:
HEADER_TABLE_SIZE: 4096
INITIAL_WINDOW_SIZE: 65535
â Completely different! Cloudflare āĻāĻāĻžāĻ āĻĻā§āĻā§āĨ¤
curl_cffi āĻāĻāĻžāĻ Chrome-āĻāϰ āĻŽāϤ⧠āĻāϰ⧠â āĻĒā§āϰā§āĻĒā§āϰāĻŋ browser-āĻāϰ āĻŽāϤā§!
đĄ Chapter 6-āĻāϰ āĻŽā§āϞ āĻļāĻŋāĻā§āώāĻž
đ° WAF = Web Application Firewall â bot detect āĻāϰ⧠block āĻāϰā§
đŖ JA3 = TLS handshake-āĻāϰ MD5 fingerprint â āĻĒā§āϰāϤāĻŋāĻāĻž software-āĻāϰ unique
â Python requests JA3 = blocked â āĻļā§āϧ⧠User-Agent āĻŦāĻĻāϞāĻžāϞ⧠āĻšāĻŦā§ āύāĻž
đ curl_cffi + impersonate="chrome120" = Cloudflare bypass
đ HTTP/2 fingerprint-āĻ āĻāϞāĻžāĻĻāĻž â curl_cffi āĻāĻāĻžāĻ handle āĻāϰā§
đąī¸ Advanced WAF (PerimeterX) mouse movement āĻ behavior āĻĻā§āĻā§
đ¯ Chapter 6 â āĻā§āĻāĻ (ā§§ā§ĻāĻāĻž āĻĒā§āϰāĻļā§āύ)
āĻĒā§āϰāϤāĻŋāĻāĻž āĻāϤā§āϤāϰ⧠click āĻāϰ⧠â āϏāĻŦā§āĻ/āϞāĻžāϞ + āĻŦā§āϝāĻžāĻā§āϝāĻž!
â āĻĒā§āϰāĻļā§āύ 1: JA3 fingerprint āĻā§?
đĄ JA3 = TLS Client Hello packet-āĻāϰ cipher suites, extensions, groups āĻĨā§āĻā§ MD5 hashāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž software-āĻāϰ uniqueāĨ¤
â āĻĒā§āϰāĻļā§āύ 2: Cloudflare āĻā§āύ āĻļā§āϧ⧠User-Agent āĻŦāĻĻāϞāĻžāϞ⧠bypass āĻšāϝāĻŧ āύāĻž?
đĄ āĻāϧā§āύāĻŋāĻ WAF: TLS JA3, HTTP/2 SETTINGS, header order, mouse behavior āϏāĻŦ analyze āĻāϰā§āĨ¤ User-Agent āĻāĻāĻāĻž āĻŽāĻžāϤā§āϰ signalāĨ¤
â āĻĒā§āϰāĻļā§āύ 3: curl_cffi library āĻā§ āϏā§āĻŦāĻŋāϧāĻž āĻĻā§āϝāĻŧ?
đĄ curl_cffi Chrome/Safari-āĻāϰ exact JA3 + HTTP/2 fingerprint match āĻāϰ⧠â Cloudflare Python script detect āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āύāĻžāĨ¤
â āĻĒā§āϰāĻļā§āύ 4: impersonate='chrome120' āĻā§āĻĨāĻžāϝāĻŧ āĻĻāĻŋāĻŦā§?
đĄ curl_cffi-āϰ requests.get() āĻŦāĻž Session-āĻ impersonate='chrome120' āĻĻāĻŋāϞ⧠āϏā§āĻ browser-āĻāϰ exact fingerprint match āĻšāϝāĻŧāĨ¤
â āĻĒā§āϰāĻļā§āύ 5: Python requests library-āϰ JA3 āĻā§āĻŽāύ?
đĄ Python requests-āĻāϰ TLS fingerprint = '3b5074b...' â WAF databases-āĻ known bot signatureāĨ¤ āϏāĻžāĻĨā§ āϏāĻžāĻĨā§ blockāĨ¤
â āĻĒā§āϰāĻļā§āύ 6: HTTP/2 fingerprint āĻā§āĻāĻžāĻŦā§ āϤā§āϰāĻŋ āĻšāϝāĻŧ?
đĄ HTTP/2-āϤ⧠SETTINGS frame-āĻāϰ values (HEADER_TABLE_SIZE, WINDOW_SIZE), HEADERS order â āĻĒā§āϰāϤāĻŋāĻāĻž browser āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§ configure āĻāϰā§āĨ¤
â āĻĒā§āϰāĻļā§āύ 7: TLS Fingerprint āĻāĻāύ create āĻšāϝāĻŧ?
đĄ TLS handshake-āĻāϰ āĻĒā§āϰāĻĨāĻŽ step = Client HelloāĨ¤ āĻāϤ⧠cipher suites, TLS version, extensions â āĻāĻāĻžāĻ JA3-āĻāϰ sourceāĨ¤
â āĻĒā§āϰāĻļā§āύ 8: WAF = Web Application Firewall āĻā§ āĻāϰā§?
đĄ WAF = Layer 7 (application layer) firewallāĨ¤ SQL injection, XSS, bot traffic, DDoS â detect āĻ block āĻāϰā§āĨ¤
â āĻĒā§āϰāĻļā§āύ 9: curl_cffi-āϤ⧠āĻā§āύ browsers impersonate āĻāϰāĻž āϝāĻžāϝāĻŧ?
đĄ curl_cffi-āϤ⧠chrome99/110/120, firefox102/133, safari15_3/17_0, edge99/101 â āϏāĻŦ major browser impersonate āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤
â āĻĒā§āϰāĻļā§āύ 10: Advanced bot detection (PerimeterX) āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§?
đĄ PerimeterX, DataDome behavioral analysis āĻāϰ⧠â mouse trajectory, scroll pattern, keystroke dynamics, canvas fingerprintāĨ¤