Nmap/UPnP
From charlesreid1
UPnP Discovery With Nmap
Nmap can be used to enumerate hosts via specific broadcast protocols. For example, for UPnP:
nmap -Pn -n --script=broadcast
Nmap can detect Dropbox in use:
| broadcast-dropbox-listener: | displayname ip port version host_int namespaces |_37449174 192.168.0.2 17500 1.8 37449174 78226771, 78226771
Taking a deeper dive into UPnP: some devices on a network run UPnP, like TVs, receivers, routers, Chromecast, Roku. A tool called Miranda (circa 2008) enumerates UPnP devices and allows changes if the device unchanges.
Miranda should be provided on Kali. Execute a search for UPnP devices using the msearch command:
upnp> msearch Entering discovery mode for 'upnp:rootdevice', Ctl+C to stop... **************************************************************** SSDP reply message from 192.168.1.23:8060 XML file is located at http://192.168.1.23:8060/ Device is running Roku UPnP/1.0 MiniUPnPd/1.4 **************************************************************** **************************************************************** SSDP reply message from 192.168.1.224:52236 XML file is located at http://192.168.1.224:52236/rcr/RemoteControlReceiver.xml Device is running Linux/9.0 UPnP/1.0 PROTOTYPE/1.0 **************************************************************** **************************************************************** SSDP reply message from 192.168.1.214:52235 XML file is located at http://192.168.1.214:52235/dmr/SamsungMRDesc.xml Device is running Linux/9.0 UPnP/1.0 PROTOTYPE/1.0 ****************************************************************
One Roku, one receiver, one TV. Receivers and TVs should use same commands. Now list out all the hosts dicovered:
upnp> host list [0] 192.168.1.213:8060 [1] 192.168.1.219:8060 [2] 192.168.1.215:8060 [3] 192.168.1.224:52236 [4] 192.168.1.214:52235 [5] 192.168.1.241:8888 [6] 192.168.1.16:2869
Use the host get command to read the entire tree of UPnP commands. This needs to be successful if you are to be able to send commands to the device:
upnp> host get 5 Requesting device and service info for 192.168.1.241:8888 (this could take a few seconds)... Host data enumeration complete!
Now review some information about the device using the host summary command:
upnp> host summary 5 Host: 192.168.1.241:8888 XML File: http://192.168.1.241:8888/upnp_descriptor_0 MediaRenderer manufacturerURL: http://www.onkyo.com modelName: TX-NR509 modelNumber: TX-NR509 presentationURL: http://192.168.1.241/ friendlyName: TX-NR509 fullName: urn:schemas-upnp-org:device:MediaRenderer:1 modelDescription: AV Receiver UDN: uuid:aeb01704-c117-04b9-db1e-0409c1b9c871 modelURL: http://www.onkyo.com manufacturer: ONKYO
host info command gives you some further data:
upnp> host info 5 xmlFile : http://192.168.1.241:8888/upnp_descriptor_0 name : 192.168.1.241:8888 proto : http:// serverType : MediabolicMWEB/1.8.225 upnpServer : Linux/2.6.33-rc4 UPnP/1.0 MediabolicUPnP/1.8.225 dataComplete : True deviceList : {}
Save data to a file via:
upnp> save data yoyo Host data saved to 'struct_yoyo.mir' upnp> save info 5 onkyo Host info for '192.168.1.241:8888' saved to 'info_yoyo.mir'
Inside the file info_yoyo is all the commands for reference:
Device information: Device Name: MediaRenderer Service Name: AVTransport controlURL: /upnp_control_2 eventSubURL: /upnp_event_2 serviceId: urn:upnp-org:serviceId:AVTransport SCPDURL: /scpd/AVTransport_1 fullName: urn:schemas-upnp-org:service:AVTransport:1 ServiceActions: SetNextAVTransportURI InstanceID A_ARG_TYPE_InstanceID: dataType: ui4 sendEvents: N/A allowedValueList: [] direction: in
Now run some commands:
upnp> host send 5 MediaRenderer RenderingControl GetMute Required argument: Argument Name: InstanceID Data Type: ui4 Allowed Values: [] Set InstanceID value to: 0 Required argument: Argument Name: Channel Data Type: string Allowed Values: ['Master', 'LF', 'RF'] Set Channel value to: Master CurrentMute : 0
The TV or receiver is not muted. Now change the value:
upnp> host send 5 MediaRenderer RenderingControl SetMute Required argument: Argument Name: InstanceID Data Type: ui4 Allowed Values: [] Set InstanceID value to: 0 Required argument: Argument Name: DesiredMute Data Type: boolean Allowed Values: [] Set DesiredMute value to: 1 Required argument: Argument Name: Channel Data Type: string Allowed Values: ['Master', 'LF', 'RF'] Set Channel value to: Master
This mutes the TV.
Source code may need to be modified. When commands were being sent to the device, it was not building the POST request correctly, and ignoring one of the directories. Change the following lines:
if self.ENUM_HOSTS[index]['proto'] in service['SCPDURL']: -xmlFile = service['SCPDURL'] +xmlFile = 'dmr/' + service['SCPDURL'] else: -xmlFile += service['SCPDURL'] +xmlFile += 'dmr/' + service['SCPDURL']
UPnP Inspector
This tool does not come with Backtrack 5, however use the following two commands to install it:
$ apt-get install python-setuptools $ easy_install UPnP-Inspector
Once installed it gives you a GUI to discover, browse, and send commands to devices. The neat part about this program is that you can browse files over UPnP if its configured to do so.