Etiquetas

C (31) Cpp (28) Linux (14) asm (8) Telegram (5) bot (5) libreria (5) Algoritmo (3) Errores comunes (3) python (3) Opengl (2) kali (2) Android (1) Snippet (1) nano (1) recursividad (1)

lunes, 13 de noviembre de 2023

[C] Crackeador mysql

 /*
* Esto es un rapido crakeador de fuerza bruta para hashed MySQL
*Se puede romper una contraseña de 8 caracteres que contiene todos
*los caracteres ASCII en cuestión de horas en un PC normal.
*Este programa es de dominio público. Compartir y disfrutar.
*

* Ejemplo:
* $ gcc -O2 -fomit-frame-pointer mysqlfast.c -o mysqlfast
* $ mysqlfast 6294b50f67eda209
* Hash: 6294b50f67eda209
* Trying length 3
* Trying length 4
* Found pass: barf
*
* La contraseña de MySQL función hash se podría fortalecer considerablemente
*/
//Necesitas libssl y libpthread

#include <stdio.h>

typedef unsigned long u32;

/* Caracteres permitidos en la contraseña; 33-126 es imprimible ASCII */
#define MIN_CHAR 33
#define MAX_CHAR 126

/* La longitud máxima de la contraseña */
#define MAX_LEN 12
#define MASK 0x7fffffffL

int crack0(int stop, u32 targ1, u32 targ2, int *pass_ary){
int i, c;
u32 d, e, sum, step, diff, div, xor1, xor2, state1, state2;
u32 newstate1, newstate2, newstate3;
u32 state1_ary[MAX_LEN-2], state2_ary[MAX_LEN-2];
u32 xor_ary[MAX_LEN-3], step_ary[MAX_LEN-3];
i = -1;
sum = 7;
state1_ary[0] = 1345345333L;
state2_ary[0] = 0x12345671L;

while (1) {
while (i < stop) {
i++;
pass_ary = MIN_CHAR;
step_ary = (state1_ary & 0x3f) + sum;
xor_ary  = step_ary*MIN_CHAR + (state1_ary << 8);
sum += MIN_CHAR;
state1_ary[i+1] = state1_ary ^ xor_ary;
state2_ary[i+1] = state2_ary
+ ((state2_ary << 8) ^ state1_ary[i+1]);
}

state1 = state1_ary[i+1];
state2 = state2_ary[i+1];
step = (state1 & 0x3f) + sum;
xor1 = step*MIN_CHAR + (state1 << 8);
xor2 = (state2 << 8) ^ state1;

for (c = MIN_CHAR; c <= MAX_CHAR; c++, xor1 += step) {
newstate2 = state2 + (xor1 ^ xor2);
newstate1 = state1 ^ xor1;

newstate3 = (targ2 - newstate2) ^ (newstate2 << 8);
div  = (newstate1 & 0x3f) + sum + c;
diff = ((newstate3 ^ newstate1) - (newstate1 << 8)) & MASK;
if (diff % div != 0) continue;
d = diff / div;
if (d < MIN_CHAR || d > MAX_CHAR) continue;

div  = (newstate3 & 0x3f) + sum + c + d;
diff = ((targ1 ^ newstate3) - (newstate3 << 8)) & MASK;
if (diff % div != 0) continue;
e = diff / div;
if (e < MIN_CHAR || e > MAX_CHAR) continue;

pass_ary[i+1] = c;
pass_ary[i+2] = d;
pass_ary[i+3] = e;
return 1;
}

while (i >= 0 && pass_ary >= MAX_CHAR) {
sum -= MAX_CHAR;
i--;
}
if (i < 0) break;
pass_ary++;
xor_ary += step_ary;
sum++;
state1_ary[i+1] = state1_ary ^ xor_ary;
state2_ary[i+1] = state2_ary
+ ((state2_ary << 8) ^ state1_ary[i+1]);
}

return 0;
}

void crack(char *hash){
int i, len;
u32 targ1, targ2, targ3;
int pass[MAX_LEN];

if ( sscanf(hash, "%8lx%lx", &targ1, &targ2) != 2 ) {
printf("Invalid password hash: %s\n", hash);
return;
}
printf("Hash: %08lx%08lx\n", targ1, targ2);
targ3 = targ2 - targ1;
targ3 = targ2 - ((targ3 << 8) ^ targ1);
targ3 = targ2 - ((targ3 << 8) ^ targ1);
targ3 = targ2 - ((targ3 << 8) ^ targ1);

for (len = 3; len <= MAX_LEN; len++) {
printf("Trying length %d\n", len);
if ( crack0(len-4, targ1, targ3, pass) ) {
printf("Found pass: ");
for (i = 0; i < len; i++)
putchar(pass);
putchar('\n');
break;
}
}
if (len > MAX_LEN)
printf("Pass not found\n");
}

int main(int argc, char *argv[]){
int i;
if (argc <= 1) printf("usage: %s hash\n", argv[0]);
for (i = 1; i < argc; i++) crack(argv);
return 0;
}

[CPP]Saber si usas little o big endian

Este codigo no es mío. Procede del foro HackxCrack.net

#include <cstdlib>
#include <iostream>
using namespace std;

/*Saber si tu pila almacena en little endian o big endian.*/    
int main(int argc, char *argv[]){
int i = 1;
if((*(char*)&i) == 1){cout<<"Es LITTLE_ENDIAN\n";}
else{cout<<"Es BIG_ENDIAN\n";}
        
return 0;}

[C] Quitar espacios a cadena

 Este codigo no es de mi autoría. Lo encontré en HackxCrack.net.

#include <string.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

char *borrar_espacios(const char *s){
char *t = malloc(strlen(s) + 1); /*Puntero malloc*/
int i;
for (i = 0; *s != '\0' && *s != '\n'; s++)

/*Solo cuenta si la funcion isspace(); devuelve 0*/
if (!isspace(*s)) t[i++] = *s;
t[i++] = '\0';t = realloc(t, i);
return t;}

int main(){
char *cadena="Una cadena con varios espacios";
borrar_espacios(cadena);
printf("Cadena sin espacios: \n%s\n",cadena);
free(cadena);
return 0;}

[C] Conversion de 16 a 32 bits

 Este codigo no es de mi autoría. Procede del foro Hackxcrack.net

#include<stdio.h>
unsigned short CRC(unsigned char *s, int len, unsigned short crcval);
     
int main(){
unsigned char *test="\x01\x55\x00\x00";
printf("CRC: %u\n",CRC(test,4,0));
return 0;}
     
unsigned short CRC(unsigned char *s, int len, unsigned short crcval){
register unsigned c,q;
for (;len;len--){
c=*s++;q=(crcval^c)&017;

crcval=(crcval>>4)^(q*010201);
q=(crcval^(c>>4))&017;
crcval=(crcval>>4)^(q*010201);}
return (crcval);}

//010201 es octal
//017 tambien

[C] Obtener un hash md5

El código no es mi autoría, fue creado por Cervantes junto con @p0fk y publicado en HackxCrack. 7 - SEPT - 2011.

[quote]

#include <openssl/md5.h>
#include <stdio.h>
#include <string.h>
// code testing by p0fk!
 
int main(int argc, char *argv[])
{
    unsigned char buffer[1024];
    strcpy(buffer, "");
    unsigned char* hash;
    int i;
    printf("Frase : %s\n", argv[1]);
    hash = MD5(argv[1], strlen(argv[1]), NULL);

    for (i = 0;i < strlen(hash);i++)
    {
        sprintf((char*)&buffer[i*2],"%02x",hash[i]);
    }
    printf(buffer);
    printf("\n");
    return 0;
 }
 
 [/quote]

Búsqueda y Manejo de Archivos

algunas caracteristicas mas incluyen la agilizacion de tareas: ls a* busca todos los archivos que empiecen con a y * significa que incluira cualquier cosa que venga despues. alinux aconux axenax.ls no puede leer los archivos que empiecen con . a m3nos que se use la opcion -a. ls -la

total 43

drwx------. 2 root root 3452 Apr 10 02:50 .
drwx------. 6 root root 3452 Apr  6 04:54 ..
-rw-------. 1 root root    7 Apr 10 02:50 .acl
-rw-------. 1 root root    6 Apr 10 02:47 aconux
-rw-------. 1 root root    5 Apr 10 02:46 alinux
-rw-------. 1 root root    7 Apr 10 02:47 axenax

sin -a

ls -l

total 32
-rw-------. 1 root root    6 Apr 10 02:47 aconux
-rw-------. 1 root root    5 Apr 10 02:46 alinux
-rw-------. 1 root root    7 Apr 10 02:47 axenax

ls /etc/*conf ver los archivos que terminan con conf
/etc/GeoIP.conf            /etc/nftables.conf
/etc/adduser.conf          /etc/nikto.conf
/etc/ca-certificates.conf  /etc/nsswitch.conf
/etc/debconf.conf          /etc/ntp.conf
/etc/deluser.conf          /etc/pam.conf
/etc/dns2tcpd.conf         /etc/proxychains4.conf
/etc/dnsmasq.conf          /etc/redsocks.conf
/etc/e2scrub.conf          /etc/request-key.conf
/etc/fuse.conf             /etc/resolv.conf
/etc/gai.conf              /etc/rsyslog.conf
/etc/host.conf             /etc/sensors3.conf
/etc/idmapd.conf           /etc/sestatus.conf
/etc/inxi.conf             /etc/smi.conf
/etc/ipsec.conf            /etc/strongswan.conf
/etc/ld.so.conf            /etc/sudo.conf
/etc/libao.conf            /etc/sudo_logsrvd.conf
/etc/libaudit.conf         /etc/sysctl.conf
/etc/logrotate.conf        /etc/ucf.conf
/etc/miredo.conf           /etc/updatedb.conf
/etc/mke2fs.conf           /etc/usb_modeswitch.conf
/etc/nfs.conf              /etc/xattr.conf
/etc/dconf:db           /etc/resolvconf:update.d

ademas de * puede ser usado ? pero este ultimo funciona solo con un caracter. son llamados comodines

ls l[abdcio]st.sh busca un archivo que empiece con l,seguido de a,b,d,c,i,o y luego st.
ls [clst]* busca los archivos que empiecen con c,l,s,t y luego cualquier caracter.
ls [clst][io]?t* busca primero c,l,s,t y luego i,o
rm *tar* $ ls elimina cualquier atchivo tar y tambien los tar.bz2,tar.gz,etc.

ls users-[0-9][a-zA-Z0-9][0-9]* busca primero users-,luego numero del 0 al 9,luego minusculas y mayusculas y luego 0-9 de nuevo 2 veces,luego cualquier caracter

ls users-[0-9][!0-9][a-zA-Z]* el ! niega ese set de caracteres.
[aeiouAEIOU] buscar vocales
[A-Z] todas las mayusculas
[0-9] en base 10
[^A-Z] excluye las letras mayusculas. es lo mismo que [!A-Z].

USO DE TR

cat wonderfulfile
This is a very wonderful file

cat wonderfulfile | tr 'a-z' 'A-Z'
THIS IS A VERY WONDERFUL FILE

cat wonderfulfile | tr aeiouAEIOU '*'
Th*s *s * v*ry w*nd*rf*l f*l*.

cat wonderfulfile | tr -d aeiouAEIOU
Ths s  vry wndrfl fl

tr a-z A-Z < employee.txt

cambia minusculas a mayusculas

USO DE GREP

grep pancake randomlines
busca pancake en el archivo randomlines

buscar lineas terminadas en !
grep '\!$' randomlines

grep -ri panda /root
busca panda en el directorio y en los subdirectorios de root.

grep "^Nov 10" messages.1
busca cualquier linea que empiece con Nov 10 con ^

grep "terminating.$" messages
busca cualquier linea que termine en terminating con $

USO DE TEE

copia la entrada como cat y devuelve la salida,pero simultaneamente copia la entrada a uno o mas archivos generalmente, esta entremedio de 2 comandos haciendo un archivo que sera pasado por una tuberia

who | tee original_who | sort

USO DE AWK

imprimir la 2da y 4ta palabra de cada linea con awk
awk '{print $2, $4}' myfile

imprimir las lineas menores a 60 caracteres
awk 'length < 60 {print}' myfile

imprimir un archivo reemplazando me con YOU con sed
sed 's/me/YOU/g' myfile

imprime el archivo sin las primeras 10 lineas
sed '1,10d' myfile

SUBSTITUYENDO TEXTO CON m4

cat substitutions
My name is NAME and I am AGE years old
ifelse(QUOTE,yes,Learn Linux today!)
m4 -DNAME=Sandy -DAGE=25 -DQUOTE=yes substitutions

sustituyendo texto con sed
sed 's/Linux/Linux-Unix/' thegeekstuff.txt

cambia Linux por Linux-Unix en thegeekstuff.txt
sed 's/Linux/Linux-Unix/2' thegeekstuff.txt

cambia linux por linux-unix 2 veces
sed 's/Linux/Linux-Unix/g' thegeekstuff.txt

cambia linux por linux-unix en todo el archivo
sed -e 's/#.*//;/^$/d'  thegeekstuff.txt

eliminar comentarios y lineas en blanco usando ;
comando join:mezcla los numeros de lineas de dos archivos

comando xargs:redirige la salida de un comando como argumento para otro
cat url-list.txt | xargs wget –c

la salida de cat es usada por wget
find ~ -name ‘*.log’ -print0 | xargs -0 rm -f

los archivos .log que va encontrando los va pasando
a rm -f

find /etc -name "*.conf" | xargs ls –l
va viendo los permisos de los archivos .conf con ls -l que va encontrando con find

USO DE SORT

sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/host
ordena /etc/host por ip

 

Comandos(Programas) en linux

 nl - ver archivos con numero de lineas
cat - ver archivos enteros
less - ver archivo por pagina
head - las primeras lineas de un archivo
tail - las ultimas lineas de un archivo
od - ver archivo en octal(u otros)
strings - busca texto en ejecutables,si se.combina con greps puede dar mejores resultados strings -n 10 /usr/bin/who | grep '@' strings /usr/bin/who
file - reporta el tipo de archivo
du - disc usage

touch - puede cambiar el estampado de tiempo del archivo: touch -d "November 18 1975" myfilemc - midnight commander,un administrador de archivos de linea de comandos.
nautilus y/o dolphin - administradores de archivos graficos.

ALIAS

programa que puede acortar instrucciones
alias ll='ls -lG'...pueden ser agregadas en el archivo bash_aliases. con alias puedes verlos todos.

 who - muestra info detallada sobre las conexiones al
sistema. puede usarse who -q para simplificar

who | wc -l la barra vertical se llama tuberia y conecta el programa who con wc. pueden usarse multiples. el funcionamiento es mandar la salida a otro programa.
whoami - muestra lo mismo que who,pero solo la info sobre el usuario actual.
finger - muestra info sobre los usuarios del sistema
logout y exit- cerrar la sesion y cerrar terminal respectivamente
info - a diferencia de man,presenta info de forma jerarquica
man  paginas de manual sobre un programa,generalmente se.instalan junto con el programa
mount - mount -t typedevice dir
las unidades /dev/cdrom/ y /dev/sdb1 estan asociadas a los CDROM y USB respectivamente
mount /dev/cdrom /mnt - ej de montaje

cd usado sin argumentos te lleva a tu carpeta personal
ls /bin muestra /usr/bin
ls $HOME cuenta los elementos de HOME
df -h / muestra el espacio de tu disco duro
top -d1 muestra los procesos
last -1 $USER muestra tu nfo de logeo
whois hace whois a una pagina
wget descarga algo sin usar el navegador
wget -c http://URL reinicia una descarga incompleta
wget -b http://URL descarga en bg y puede consultarse usando tail -f wget-log

wget --user-agent="Mozilla/5.0 (X11; U; Linux i686; enUS;rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3" URL .Algunos sitios no dejan descargar sin navegador,para prevenir esto se usa --user-agent

wget --limit-rate=200k limita el uso de bandaancha
wget --spider DOWNLOAD-URL comprueba la URL
wget -i download-file-list.txt descarga multiples URL
wget -o download.log DOWNLOAD-URL escribe la output(stderr) a download.log
ftp usuario@servidorftp conectarse mediante ftp
ip addre sho eth0 wlan0..muestra info de un dispositivo de red

(files | directory) significa eleccion,tal cual
man -k database busca manpages con la keyword database
man -k database | less no vuelca todos los resultados
wc -lw myfile es lo mismo que -l -w
ls . otracarpeta - lista el directorio actual+otracarpeta

mkdir $HOME/notas crea una carpeta notas.Vease que solo lo hara si $HOME existe $HOME es igual a ~, si pones cd ~fred te mueve a la carpeta personal fred siempre que el usuario fred exista.

$HOME/notas es igual a ~/notas

lpr /etc/hosts/ imprime el archivo hostS
ls -lG /proc/version/ muestra info del archivo.Los archivos de la carpeta /proc/ tienen propiedades especiales,pesan 0 y son solo de lectura.
cat /proc/version muestra magicamente info del kernel
/proc/ioports hardware de entrada/salida de tu pc
/proc/cpuinfo/ info de los procesadores de tu pc
/proc/uptime/ puede usarse uptime tambien
/proc/nnn/ info acerca del proceso nnn,donde nnn va un numero positivo

el cmd type permite saber si un comando es propio de la shell o no.
type who :origen desde /usr/bin
type cd  :cd is a shell builtin..propio de la shell

SCREEN
el programa screen se usa para abrir multiples (multiplexar) procesos que abren el terminal. solo se puede tener 1 tarea en primer plano,para poner mas hay que usar el comando screen,que da 10 ventanas para ejecutar fg del 0 al 9.

para ponerle un nombre a una sesion se usa screen -S nombresesion ,para terminar una shell usamos ctrl+a o escribir exit,tambien interrumpe los trabajos.

para ver las shell se usa screen -r
para cambiar a otra shell se usa screen -r numeroshell para matar un proceso hay que llevarlo a fg y usar ctrl+c