GNOME NetworkManager本地任意文件访问漏洞(2)

def __init__(self):
    self.bus = dbus.SystemBus()
    self.proxy = None
    self.manager = None
    self.running = False
    self.devices = {}
    self.devices_by_name = {}
    self.aps = {}
    self.ap_by_addr = {}
    self.ap_by_ssid = {}

self.check_status()

self.bus.add_signal_receiver(
        lambda name, old, new: self.nameowner_changed_handler(name, old, new),
        bus_name='org.freedesktop.DBus',
        dbus_interface='org.freedesktop.DBus',
        signal_name='NameOwnerChanged')

self.bus.add_signal_receiver(
        lambda device, **kwargs: self.device_add_rm(device, True, **kwargs),
        bus_name='org.freedesktop.NetworkManager',
        dbus_interface = 'org.freedesktop.NetworkManager',
        signal_name = 'DeviceAdded',
        sender_keyword = 'sender')

self.bus.add_signal_receiver(
        lambda device, **kwargs: self.device_add_rm(device, False, **kwargs),
        bus_name='org.freedesktop.NetworkManager',
        dbus_interface = 'org.freedesktop.NetworkManager',
        signal_name = 'DeviceRemoved',
        sender_keyword = 'sender')

def cleanup(self):
    self.switcher = None

def devstate2name(self, state):
    if state in self.NM_STATE:
        return self.NM_STATE[state]
    return "UNKNOWN:%s"%state

def devtype2name(self, type):
    if type in self.NM_DEVICE_TYPE:
        return self.NM_DEVICE_TYPE[type]
    return "UNKNOWN:%s"%type

def secflags2str(self, flags):
    a = []
    for key in self.NM_802_11_AP_SEC.keys():
        if self.NM_802_11_AP_SEC[key] and flags&self.NM_802_11_AP_SEC[key]:
        a.append(key[len('NM_802_11_AP_SEC_'):])
    return ' '.join(a)

def nameowner_changed_handler(self, name, old, new):
    if name != 'org.freedesktop.NetworkManager':
        return
   
    off = old and not new
    self.check_status(off)

def device_add_rm(self, device, added, sender=None, **kwargs):
    if (added):
        dev = self.bus.get_object("org.freedesktop.NetworkManager", device)
        props = dbus.Interface(dev, "org.freedesktop.DBus.Properties")
        name = props.Get("org.freedesktop.NetworkManager.Device", "Interface")
        devtype = props.Get("org.freedesktop.NetworkManager.Device", "DeviceType")
        debug(0,"device %s, %s added"%(name, self.devtype2name(devtype)))

self.devices[device] = name
        self.devices_by_name[name] = device

if devtype == 2:
        wifi = dbus.Interface(dev, "org.freedesktop.NetworkManager.Device.Wireless")
        aps = wifi.GetAccessPoints()
        for path in aps:
            ap = self.bus.get_object("org.freedesktop.NetworkManager", path)
            props = dbus.Interface(ap, "org.freedesktop.DBus.Properties")
            ssid_raw = props.Get("org.freedesktop.NetworkManager.AccessPoint", "Ssid")
            addr = props.Get("org.freedesktop.NetworkManager.AccessPoint", "HwAddress")
            wpaflags = props.Get("org.freedesktop.NetworkManager.AccessPoint", "WpaFlags")
            rsnflags = props.Get("org.freedesktop.NetworkManager.AccessPoint", "RsnFlags")
            ssid = ''
            for b in ssid_raw:
            if b > 20 and b < 126:
                ssid += str(b)
            else:
                ssid += '0x%02x'%b

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwdydf.html