Xepor (อ่านว่า /ˈzɛfə/ , zephyr) เป็นเฟรมเวิร์กการกำหนดเส้นทางเว็บสำหรับวิศวกรย้อนกลับและนักวิจัยด้านความปลอดภัย โดยมี API ที่คล้าย Flask สำหรับแฮกเกอร์เพื่อสกัดกั้นและแก้ไขคำขอ HTTP และ/หรือการตอบสนอง HTTP ในรูปแบบการเขียนโค้ดที่เป็นมิตรต่อมนุษย์
โปรเจ็กต์นี้มีไว้เพื่อใช้กับ mitmproxy ผู้ใช้เขียนสคริปต์ด้วย xepor
และรันสคริปต์ ภายใน mitmproxy ด้วย mitmproxy -s your-script.py
หากคุณต้องการก้าวจาก PoC ไปสู่การใช้งานจริง จากการสาธิต (เช่น http-reply-from-proxy.py, http-trailers.py, http-stream-modify.py) ไปจนถึงสิ่งที่คุณสามารถนำออกไปได้ด้วย WiFi Pineapple ของคุณ Xepor เหมาะสำหรับคุณ!
@api.route()
เช่นเดียวกับ Flask! เขียนทุกอย่างในสคริปต์ เดียว และไม่ต้อง if..else
อีกต่อไปInterceptedAPI
เดียวmitmproxy
/ mitmweb
+ regular
/ transparent
/ socks5
/ reverse:SPEC
/ upstream:SPEC
) โปรเจ็กต์นี้ไม่ได้จัดเตรียมการปอก SSL
pip install xepor
นำสคริปต์จาก example/httpbin เป็นตัวอย่าง
mitmweb -s example/httpbin/httpbin.py
ตั้งค่า Browser HTTP Proxy ของคุณเป็น http://127.0.0.1:8080
และเข้าถึงเว็บอินเตอร์เฟสที่ http://127.0.0.1:8081/
ส่งคำขอ GET จาก http://httpbin.org/#/HTTP_Methods/get_get จากนั้นคุณจะเห็นการแก้ไขที่ทำโดย Xepor ในอินเทอร์เฟซ mitmweb เครื่องมือ dev ของเบราว์เซอร์ หรือ Wireshark
httpbin.py
ทำสองสิ่ง
payload=evil_param
ภายในคำขอ HTTPAuthorization
จากคำขอ HTTP และพิมพ์รหัสผ่านไปยังผู้โจมตีสิ่งที่ mitmproxy ทำอยู่เสมอ แต่มีโค้ดที่เขียนด้วยวิธี 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 ]