Xepor (diucapkan /ˈzɛfə/ , zephyr) adalah kerangka perutean web untuk insinyur balik dan peneliti keamanan. Ini menyediakan API seperti Flask bagi peretas untuk mencegat dan memodifikasi permintaan HTTP dan/atau respons HTTP dalam gaya pengkodean yang ramah manusia.
Proyek ini dimaksudkan untuk digunakan dengan mitmproxy. Pengguna menulis skrip dengan xepor
, dan menjalankan skrip di dalam mitmproxy dengan mitmproxy -s your-script.py
.
Jika Anda ingin beralih dari PoC ke produksi, dari demo (misalnya http-reply-from-proxy.py, http-trailers.py, http-stream-modify.py) ke sesuatu yang dapat Anda lakukan dengan WiFi Pineapple Anda, maka Xepor cocok untukmu!
@api.route()
, sama seperti Flask! Tulis semuanya dalam satu skrip dan tidak ada if..else
lagi.InterceptedAPI
.mitmproxy
/ mitmweb
+ regular
/ transparent
/ socks5
/ reverse:SPEC
/ upstream:SPEC
) didukung sepenuhnya. Pengupasan SSL TIDAK disediakan oleh proyek ini.
pip install xepor
Ambil skrip dari contoh/httpbin sebagai contoh.
mitmweb -s example/httpbin/httpbin.py
Setel Proxy HTTP Browser Anda ke http://127.0.0.1:8080
, dan akses antarmuka web di http://127.0.0.1:8081/.
Kirim permintaan GET dari http://httpbin.org/#/HTTP_Methods/get_get , Kemudian Anda dapat melihat modifikasi yang dilakukan oleh Xepor di antarmuka mitmweb, alat pengembang browser, atau Wireshark.
httpbin.py
melakukan dua hal.
payload=evil_param
ke dalam permintaan HTTP.Authorization
dari permintaan HTTP dan cetak kata sandi ke penyerang.Apa yang selalu dilakukan mitmproxy, tetapi dengan kode yang ditulis dengan cara xepor .
# https://github.com/xepor/xepor-examples/tree/main/httpbin/httpbin.py
from mitmproxy . http import HTTPFlow
from xepor import InterceptedAPI , RouteType
HOST_HTTPBIN = "httpbin.org"
api = InterceptedAPI ( HOST_HTTPBIN )
@ api . route ( "/get" )
def change_your_request ( flow : HTTPFlow ):
"""
Modify URL query param.
Test at:
http://httpbin.org/#/HTTP_Methods/get_get
"""
flow . request . query [ "payload" ] = "evil_param"
@ api . route ( "/basic-auth/{usr}/{pwd}" , rtype = RouteType . RESPONSE )
def capture_auth ( flow : HTTPFlow , usr = None , pwd = None ):
"""
Sniffing password.
Test at:
http://httpbin.org/#/Auth/get_basic_auth__user___passwd_
"""
print (
f"auth @ { usr } + { pwd } :" ,
f"Captured { 'successful' if flow . response . status_code < 300 else 'unsuccessful' } login:" ,
flow . request . headers . get ( "Authorization" , "" ),
)
addons = [ api ]