đ§ āĻĻāĻā§āώāϤāĻž āϝāĻžāĻāĻžāĻ āĻ āĻĒā§āϰāϤāĻŋāϰāĻā§āώāĻžāĻŽā§āϞāĻ takeaway
Skill checkpoint: Training database-āĻ SQLi root cause āĻļāύāĻžāĻā§āϤ āĻāϰ⧠fix-āĻāϰ āĻĒā§āϰāĻāĻžāĻŦ āĻŦā§āĻā§āĨ¤
Defense checkpoint: Prepared statement, least privilege āĻāĻŦāĻ regression retest āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§.
Lab scope: āĻļā§āϧ⧠āύāĻŋāĻā§āϰ lab, synthetic data āĻŦāĻž āϞāĻŋāĻāĻŋāϤ āĻ
āύā§āĻŽāϤāĻŋāĻĒā§āϰāĻžāĻĒā§āϤ target-āĻ āĻ
āύā§āĻļā§āϞāύ āĻāϰā§āĨ¤ Real credential, token āĻŦāĻž customer data āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻā§āϰ⧠āύāĻžāĨ¤
Portfolio proof: finding, impact, fix āĻ retest āύāĻŋā§ā§ ā§Ģ-āϞāĻžāĻāύā§āϰ redacted note āϰāĻžāĻā§āĨ¤
đ āĻāϞā§āĻĒ ā§§: āĻĄā§āĻāĻžāĻŦā§āϏā§āϰ āĻāĻžāύ āĻŽāϞ⧠āϏāϤā§āϝāĻŋ āĻāĻĨāĻž āĻŦā§āϰ āĻāϰāĻž!
āĻāĻžāĻŦā§ āϤā§āĻŽāĻŋ āĻāĻāĻāĻŋ āĻŦā§ āĻā§āĻŽā§āĻĒāĻžāύāĻŋāϰ āϰāĻŋāϏā§āĻĒāĻļāύ⧠āĻā§āϞ⧠āĻāĻŦāĻ āĻāϰā§āĻŽāĻāĻžāϰā§āĻā§ āĻŦāϞāϞā§: 'āĻāĻŽāĻžāϰ āύāĻžāĻŽ āϏā§āϰāĻ, āĻāĻŽāĻžāĻā§ āĻāĻŽāĻžāϰ āĻĢāĻžāĻāϞāĻāĻŋ āĻĻāĻŋāύ'āĨ¤ āĻāϰā§āĻŽāĻāĻžāϰ⧠āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāϰ⧠āϞāĻŋāĻāϞ: `SELECT * FROM users WHERE username = 'āϏā§āϰāĻ'`āĨ¤
āĻāĻŋāύā§āϤ⧠āϤā§āĻŽāĻŋ āϝāĻĻāĻŋ āĻāĻāĻā§ āϧā§āϰā§āϤ āĻšā§ā§ āϤā§āĻŽāĻžāϰ āύāĻžāĻŽ āĻŦāϞā§:
`admin' OR '1'='1`
āϤāĻāύ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāϰā§āϰ āĻā§ā§ā§āϰāĻŋ āĻĻāĻžāĻā§āĻžāĻŦā§:
`SELECT * FROM users WHERE username = 'admin' OR '1'='1'`
āϝā§āĻšā§āϤ⧠'ā§§ āϏāĻŽāĻžāύ ā§§' āĻāĻŋāϰāύā§āϤāύ āϏāϤā§āϝ, āϤāĻžāĻ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāϰ āĻĒāĻžāϏāĻā§āĻžāϰā§āĻĄ āĻā§āϰāĻŋāĻĢāĻžāĻ āĻāϰāĻž āĻā§āϞ⧠āĻāĻŋā§ā§ āϏāϰāĻžāϏāϰāĻŋ āĻ
ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻšāĻŋāϏā§āĻŦā§ āϞāĻāĻāύ āĻāϰāĻŋā§ā§ āĻĻā§āĻŦā§! āĻāĻā§āĻ āĻŦāϞ⧠āĻāĻŋāĻāĻŦāĻĻāύā§āϤāĻŋ SQL Injection (SQLi)!
đ āĻāϞā§āĻĒ ā§¨: UNION Injection āĻ āĻĄā§āĻāĻžāĻŦā§āϏ āĻĄāĻžāĻŽā§āĻĒāĻŋāĻ
SQL āĻāύāĻā§āĻāĻļāύā§āϰ āϏāĻŦāĻā§ā§ā§ āĻŦāĻŋāϧā§āĻŦāĻāϏ⧠āϰā§āĻĒ āĻšāϞ⧠UNION Based SQLiāĨ¤ āϤā§āĻŽāĻŋ āϤā§āĻŽāĻžāϰ āĻāύāĻĒā§āĻā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻāϏāϞ āĻā§ā§ā§āϰāĻŋāϰ āϏāĻžāĻĨā§ āύāĻŋāĻā§āϰ āĻŦāĻžāύāĻžāύ⧠āĻāϰā§āĻāĻāĻž āĻā§ā§ā§āϰāĻŋ āĻāĻ āĻž āĻĻāĻŋā§ā§ āĻā§ā§ā§ āĻĻāĻžāĻ!
āϝā§āĻŽāύ:
`' UNION SELECT 1, table_name, column_name FROM information_schema.columns--`
āϏāĻžāϰā§āĻāĻžāϰ āĻā§āύ⧠āĻĒā§āϰāĻĄāĻžāĻā§āĻ āĻĻā§āĻāĻžāύā§āϰ āĻŦāĻĻāϞ⧠āϏā§āĻā§āϰāĻŋāύ⧠āĻāĻ āĻĒāϞāĻā§ āĻĄā§āĻāĻžāĻŦā§āϏā§āϰ āϏāĻŽāϏā§āϤ āĻā§āĻŦāĻŋāϞ, āĻāϞāĻžāĻŽ, āĻā§āϰā§āĻĄāĻŋāĻ āĻāĻžāϰā§āĻĄ āύāĻŽā§āĻŦāϰ āĻāϰ āĻšā§āϝāĻžāĻļ āĻāϰāĻž āĻĒāĻžāϏāĻā§āĻžāϰā§āĻĄ āĻĒā§āϰāĻŋāύā§āĻ āĻāϰ⧠āĻĻā§āĻŦā§!
đĄī¸ āĻāϞā§āĻĒ ā§Š: āĻ
āύā§āϧā§āϰ āĻŽāϤ⧠āĻ
āύā§āϧāĻāĻžāϰ⧠āĻĸāĻŋāϞ āĻŽāĻžāϰāĻž â Blind SQLi āĻ āĻĒā§āϰāϤāĻŋāϰā§āϧ
āĻ
āύā§āĻ āϏāĻŽā§ āϏāĻžāϰā§āĻāĻžāϰ āϏā§āĻā§āϰāĻŋāύ⧠āĻā§āύ⧠āĻāϰāϰ āĻŦāĻž āĻĄā§āĻāĻž āĻĻā§āĻāĻžā§ āύāĻž (Generic 200 OK)āĨ¤ āϤāĻāύ āĻšā§āϝāĻžāĻāĻžāϰāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠Time-Based Blind SQLi! āĻšā§āϝāĻžāĻāĻžāϰ āĻŦāϞā§: 'āϝāĻĻāĻŋ āĻĒāĻžāϏāĻā§āĻžāϰā§āĻĄā§āϰ āĻĒā§āϰāĻĨāĻŽ āĻ
āĻā§āώāϰ 'A' āĻšā§, āϤāĻŦā§ ā§Ģ āϏā§āĻā§āύā§āĻĄ āĻā§āĻŽāĻžāĻ (SLEEP(5))!' āϏāĻžāϰā§āĻāĻžāϰ āϝāĻĻāĻŋ ā§Ģ āϏā§āĻā§āύā§āĻĄ āĻĻā§āϰāĻŋāϤ⧠āĻāϤā§āϤāϰ āĻĻā§ā§, āϤāĻŦā§ āĻšā§āϝāĻžāĻāĻžāϰ āĻŦā§āĻā§ āϝāĻžā§ āĻĒā§āϰāĻĨāĻŽ āĻ
āĻā§āώāϰ āύāĻŋāĻļā§āĻāĻŋāϤāĻāĻžāĻŦā§āĻ 'A' āĻāĻŋāϞ!
āĻĒā§āϰāϤāĻŋāϰā§āϧā§āϰ āĻāĻāĻŽāĻžāϤā§āϰ āĻāĻĒāĻžā§: āĻāĻāύā§āĻ āĻā§ā§ā§āϰāĻŋāϤ⧠āϏāϰāĻžāϏāϰāĻŋ āĻāĻāĻāĻžāϰā§āϰ āĻāύāĻĒā§āĻ āĻā§ā§āĻž āϞāĻžāĻāĻžāĻŦā§ āύāĻž (`Concatenation`)āĨ¤ āϏāĻŦāϏāĻŽā§ Prepared Statements / Parameterized Queries (`?` āĻŦāĻž `$1`) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§!
đĄ SQLi āϏā§āύāĻžāϰ āύāĻŋā§āĻŽ
āĻāύāĻĒā§āĻā§ āĻāĻāĻāĻž āϏāĻŋāĻā§āĻā§āϞ āĻā§āĻ (`'`) āĻŦāĻž āϏā§āϞā§āϝāĻžāĻļ (`\`) āĻĻāĻŋā§ā§ āĻĻā§āĻā§ āϏāĻžāϰā§āĻāĻžāϰ āĻā§āύ⧠āĻĄā§āĻāĻžāĻŦā§āϏ āĻāϰāϰ (āϝā§āĻŽāύ: syntax error in SQL statement) āĻā§āĻā§ā§ āĻĻā§ā§ āĻāĻŋāύāĻž!