代码之家  ›  专栏  ›  技术社区  ›  rockstar1820

基本授权凭据不会显示在Scapy中?

  •  1
  • rockstar1820  · 技术社区  · 6 年前

    注意:scapy层“http”安装有 pip install scapy-http

    我有以下代码,用于打印HTTP请求层中授权值的值:

    import sys
    from scapy.all import *
    from scapy.layers import http
    interface = 'wlan0'
    def packet(p):
        tcp = p.getlayer('TCP')
        if tcp:
            req = p.getlayer('HTTP Request')
            if req:
                auth = req.Authorization
                if auth:
                    print(auth)
    try:
        sniff(iface=interface,store=0,filter="tcp and port 80",prn=packet)
    except KeyboardInterrupt:
        sys.exit(1)
    

    这应该打印中显示的凭据 this wire shark screenshot ,但它只打印 b'Basic YWRtaW46RjByZXZlciQ=' 。这有什么原因吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Pierre    6 年前

    这个 Authorization 在您的情况下,标题值正好是 b'Basic YWRtaW46RjByZXZlciQ=' 。这意味着已使用基本身份验证方案,值为 <username>:<password> ,base64编码( admin F0rever$ 在您的情况下)。

    您可以:

    [...]
                auth = req.Authorization
                if auth and auth.startswith(b'Basic '):
                    uname, passw = base64_bytes(auth.split(None, 1)[1]).split(b':', 1)
                    print("Username: %r, password: %r" % (uname.decode(), passw.decode()))