1. SQL Injection with WebGoat (100 pts)
- Run WebGoat developer version.
A) Solve the problem ([Injection Flaws] - [LAB: SQL Injection] - [Stage 1: String SQL Injection]). (20 pts)
Stage 1. μ string SQL injection λ¬Έμ μ΄λ€. μ λ ₯ν μ μλ 곡κ°μ 보면 Password λμ user μ input μ΄ λ€μ΄κ° μ μλκ±Έ μ μ μλ€.
λ¬Έμ μ λͺ μ μ¬νμ SQL injection μ μ΄μ©ν΄ κΆνμ bypass νμ¬, Neville μ κ³μ μ μ¬λ°λ₯Έ password μμ΄ λ‘κ·ΈμΈ νλ κ²μ΄λ€. λν κ΄λ¦¬μλ‘μμ κΈ°λ₯μ νμΈνλ κ²μ΄λ€.
μΌλ° μ¬μ©μμμ μλ¬΄λ° password λ₯Ό μ λ ₯νμ¬ login λ²νΌμ λλ₯΄λ©΄ Login Error κ° λ°μνλ€. λΉμ°νλ€ password λ₯Ό λͺ¨λ₯΄κ³ , μ무거λ μ λ ₯νμΌλκΉ.
κ·Έλ λ€λ©΄ μ΄ password λμ ‘==’’or’ λ₯Ό μ§μ΄λ£κ³ Login μ νλ€.
κ·Έλ λ€λ©΄ λ‘κ·ΈμΈμ μ±κ³΅ν κ²μ λ³Ό μ μλ€.
--λ¬Έμ λ₯Ό μ΄λ―Έ νΌ λ€μ¬μ μ΄ μ΄λ―Έμ§λ κ°μ μμμ μΊ‘μ³ νμ΅λλ€.---
μ΄ μ²λΌ κ΄λ¦¬μ κ³μ μ μ κ·Ό νμ¬ κ΄λ¦¬μμ κΈ°λ₯λ€μ λͺ¨λ μ¬μ©ν μ μλ κ²μΌλ‘ 보μ¬μ§λ€.
λ¬Έμ νΈλλ° μ±κ³΅νλ€. κ·Έλ λ€λ©΄ μ΄λ¬ν string injection μ΄ μ΄λ»κ² ν΅νκ² λ 건μ§. μ΄λ€ λΆλΆμ΄ μ·¨μ½νλ κ±΄μ§ μμ보μ.
μ°μ ‘=’’or’ μ΄ λ¬΄μμΌκΉ ?
WebGoat μ js νμΌμ νμΈν΄λ³Ό νμκ° μλ€. Java source μ Login.jsp μ μμ€λ₯Ό νμΈν΄λ³΄λ©΄ login μ ν λ sql query λ₯Ό λ§λλ λ¬Έμ₯μ΄ μλ€.
λ€μκ³Ό κ°μ λ¬Έμ₯μ΄λ€. Userid λ μ€ν¬λ‘€μ ν΅ν΄ μ ν΄μ§κ³ password λ μ¬μ©μκ° μ λ ₯νλ password κ° κ·Έλλ‘ λ€μ΄κ°κ² λλ€. λ°λΌμ μ°λ¦¬κ° μ λ ₯ν ‘=’’or’ λ λ€μμ SQL ꡬ문 μ²λΌ NULL or NULL=NULL μ΄ λλ€. λ°λΌμ νμ TRUE κ°μ κ°μ§κ² λλ κ²μ΄λ€.
SQL QUERY
μμ query λ₯Ό μ§κ³ λμ΄κ°λ€. Sql λ¬Έμ₯μλ DDL(Data Definition Language), DML(Data Manipulation Language), DCL(Data Control Language) κ° μλ€. κ·Έ μ€μμ js μμ ν¬ν¨ λμ΄ user μκ² μ§μ μ μΌλ‘ μ¬μ©λλ λ¬Έμ₯μ λλΆλΆ DML μ΄λ€. DML μ λ°μ΄ν°μ μ½μ , μμ , μμ μ κΈ°λ₯λ€μ λ΄λΉνλ€.
μμ sql query λ SELECT * FROM employee where userid = ‘’ and password ‘’ μ΄λ€.
Select λ λ°μ΄ν°λ₯Ό λ°μ΄ν°λ² μ΄μ€λ‘λΆν° κ°μ Έμμ μ¬μ©μμκ² λ³΄μ¬μ£Όλ μν μ νλ€.
‘ * ’ λ λͺ¨λ μμ±μ λ°μ΄ν°λ₯Ό κ°μ Έμ¨λ€λ κ²μ μλ―Ένκ³ From μ λ°μ΄ν°λ₯Ό κ°μ Έμ¬ μ€ν€λ§λ₯Ό μ§μ νλ€.
Where μ μμ±μ νΉμ κ°μ κ°μ Έμ μ¬μ©μμκ² λ³΄μ¬μ€ μ§ κ²°μ νλλ°,λ°μ΄ν°λ² μ΄μ€μ μ‘΄μ¬νλ id μ password κ° κ·Έ λνμ μΈ μ μ΄λ€.
μ΄μ κ°μ ννλ‘ sql query μ μμ±μ΄ λλλ° -‘’or’’=’’ – κΈ°μ‘΄μ sql λ¬Έμ₯μ μλ μμ λ°μ΄νμ ν¨κ» μμ±μ΄ λμ΄ Null or Null=Null μ΄ λλ κ²μ΄λ€. Null μ false μΈλ° , null=null μ νμ True κ° λλ€. λ°λΌμ ‘’or’’=’’ λ νμ μ°Έμ΄ λλ λ¬Έμ₯μΈ κ²μ΄λ€. λ°λΌμ password μ true κ° μ λ¬ λλ©΄μ admin κ³μ μ access ν μ μμλ κ²μ΄λ€.
μμμ λ³Έ κ² μ²λΌ μ¬μ©μκ° μ λ ₯νλ string μ΄ κ·Έλλ‘ sql query μ λ€μ΄κ°κ² λλ€λ©΄ password μ true κ°μ μ λ¬ν μ μκ² λλ€. κ·Έλ λ€λ©΄ μΈμ¦μ΄ λ«λ¦¬κ² λλ μ·¨μ½μ μ λ°μμν€λ κ²μ΄λ€.
κ·Έλ λ€λ©΄ user input μ κ·Έλλ‘ μ λ¬νμ§ μλλ€λ©΄ μ·¨μ½μ μ΄ λ°μνμ§ μλ κ²μ΄ μλκ° ? λ§λ€. λ¨μν true κ°μ μ λ¬νλ κ·Έκ²μ λ§μ μ μλ λ°©λ²μ΄ λ€μ λ¬Έμ μμ λ±μ₯νλ€.
B) Solve the problem ([Injection Flaws] - [LAB: SQL Injection] - [Stage 2: Parameterized Query #1]). (20 p
λ¬Έμ μ λͺ μ μ¬νμ block sql injection using parameterized query, verify that the attack is no longer effective
μμ λ§ν κ²μ²λΌ stage 2 μ λ¬Έμ λ stage 1 μ string injection μ λ§λ κ² μ΄λ€. λν μ·¨μ½μ μ΄ μ€μ λ‘ λ³΄μμ΄ λμλμ§ λν νμΈνλ€.
μ£Όλͺ©ν΄μΌν μ μ using parameterized query맀κ°λ³μλ‘ λ 쿼리λ₯Ό μ΄μ©νμ¬ injection μ λ§μΌλΌλ κ² μ΄λ€. μκ°ν΄λ³΄λ©΄ μμμ νμΈν sql λ¬Έμ₯μ κ²½μ° user μ input μ κ·Έλλ‘ μ¬μ©νλ€. κ·Έλ λ€λ©΄ 맀κ°λ³μλ‘ λ query κ° μμ νλ€λ λ§μ΄ λκ² λ€.
μ΄ μ·¨μ½μ μ query λ₯Ό μ²λ¦¬νλ java νμΌμ μ‘΄μ¬νλ€. Login κ³Ό κ΄λ ¨ λ login .jsp νμΌμ μ°Ύλλ€.
Login java νμΌμ login method κ° λ³΄μΈλ€. λ€μ΄κ°λ³΄λ©΄ μ°λ¦¬κ° λ‘κ·ΈμΈ μ λ ₯ μμ μ¬μ© ν query λ¬Έμ΄ λ³΄μΈλ€.
μμ λ§ν κ² μ²λΌ μ΄ query λ¬Έμ₯μμλ μ¬μ©μμ μ λ ₯ ( string) μ κ·Έλλ‘ μ§μ΄ λ£λλ€. κ·Έλ κΈ° λλ¬Έμ μ λΆλΆμ 맀κ°λ³μ ν νμ¬ κ°μ μ λ¬νλ λ°©λ²μΌλ‘ μ κ·Ό ν΄μΌ ν κ² μ΄λ€.
μμμ λΆμν΄ λ³Έ query λ₯Ό μ‘°κΈ λ³κ²½νλ€. Where μ μ userid μ password λ μΈμλ₯Ό κ·Έλλ‘ μ λ¬νλ λ°©μ μ΄μλλ°, ?, ? λ‘ λ³κ²½μ νλ€. μ΄λ κ°μ²΄μ ν¨μλ₯Ό μ΄μ©νμ¬ κ·Έμκ² μΈμλ₯Ό μ λ¬νλ €λ λ°©μμ΄λ€.
κ·Έλ κ² νκΈ° μν΄μ κΈ°μ‘΄μ statement κ°μ²΄λ₯Ό PreparedStatement κ°μ²΄λ‘ λ³κ²½ν΄μ€λ€.
κ·Έ νμ μΈμλ₯Ό μ λ¬ν΄μ£Όλ ν¨μλ₯Ό μ¬μ©νλ€. 1,2 λ ‘ ? ’ λ‘ μ§μ ν 맀κ°λ³μμ μμΉλ₯Ό μΈλ±μ€λ‘ νν ν κ² μ΄λ€.
ExecuteQuery λ¬Έμ μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€μμ ν΅μ μ νλ€.
λ°λ μλ° μμ€λ₯Ό λ³Ό μ μλ€. μ μ₯μ ν νμ λ€μ μ€νν΄λ³΄λλ‘ νλ€.
‘or’’=’ λ₯Ό μ λ ₯νλλ λ‘κ·ΈμΈ μ€ν¨κ° λλ κ²μ μ μ μλ€.
μ‘°κΈ μ κΉμ§λ string μ μ΄μ©ν injection μ΄ μ±κ³΅νμ§λ§ μ§κΈμ login failed κ° λ°μ ν κ²μ λ³Ό μ μλ€. Stage2 λν μ±κ³΅νλ€.
Statement and Prepared Statement
κ·Έλ λ€λ©΄ Statement μ Prepared Statement λ 무μμΌκΉ? νλ² μμ보λλ‘ νλ€.
λ¨Όμ Statementλ₯Ό μ νμκ° μλ€.
κ·Έ ννλ λ€μκ³Ό κ°λ€.
String name= “ νκΈΈλ”;
String memo =“ test memo, hong’s notepad”;
String priority = “1”;
String sql = String.format(“insert into tblMemo values(memoSeq.nextval,’%s’,’%s’,default,%s)”, name, memo, priority);
보μ΄λ κ²κ³Ό κ°μ΄ μΌμ λ³μλ€μ κ·Έλλ‘ sql query μ μ½μ νμ¬ query λ¬Έμ λ§λλ κ²μ λ³Ό μ μλ€. Injection μ μ·¨μ½ν μ μλ νΉμλ¬Έμμ λν μ΄λ ν μ μ μμ΄ string μ κ·Έλλ‘ λκΈ΄λ€. Stage1,2 μμ λ³Ό μ μμλ ‘’or’’=’’ μ κ°μ κ³΅κ²©μ΄ λ¨Ήνλ€ μ μλ λ¬Έμ₯μ΄λ€.
κ·Έλ λ€λ©΄ preared Statement λ μ΄λ¨κΉ ? μμμ λ³Έ κ²μ²λΌ 맀κ°λ³μλ₯Ό μ¬μ©νλ€.
보μ΄λκ²κ³Ό κ°μ΄ pstat κ°μ²΄λ₯Ό μ΄μ©νμ¬ sql λ¬Έμ₯μ μΈλ±μ€μ λ°λΌ μ±μ°κ³ μλ€.
java.sql.PreparedStatement λ java.sql.Statementμ λμΌν κΈ°λ₯μ μ 곡νλ€. μ°¨μ΄μ μ΄ μλ€λ©΄PreparedStratementλ SQL 쿼리μ νμ 미리 μμ±ν΄ λκ³ κ°μ λμ€μ μ§μ νλ€λ κ²μ΄λ€.
μΆμ² : https://sas-study.tistory.com/160
C) Solve the problem ([Injection Flaws] - [LAB: SQL Injection] - [Stage 3: Numeric SQL Injection]). (20 pts)
λ¬Έμ C μ κ²½μ°λ larry λ‘ λ‘κ·ΈμΈνμ¬ sql injection μ μ΄μ©ν΄ Neville μ νλ‘νμ 보λ κ²μ΄λ€. λ¬Έμ κ° μκ²Όλ€. κ°μμμ λ³Έ λλ‘λΌλ©΄ Larry Stooge μ password λ ‘Larry ‘κ° λ§μν λ° λ‘κ·ΈμΈμ΄ μ λλ€. μλ‘μ΄ λ°©λ²μΌλ‘ injection ν΄μΌ ν κ² κ°λ€.
μ£Όμμ μ΄μ©νλ λ°©λ²μΌλ‘ λμ ν΄λ³΄λλ‘ νλ€.
Query μ password κ° λ€μ΄κ° μλ¦¬μ ‘’or1=1 – μ΄ λ€μ΄κ°λλ‘ νκ² λ€. Sql λ¬Έλ²μμλ ‘- -‘ λ μ΄νκ° μ£Όμμ²λ¦¬ λλ€.
μ€ν¨νλ€. μλ μ΄μ κ° μμ κ²μ΄λ€. μλ° νμΌμμ λ‘κ·ΈμΈ query λ μμμ λ³Έ κ² μ²λ¬ select * from employee where userid ? and password ? ; κ° λ§μν λκΉ. μ΄ν΄λ¦½μ€μμ system μΆλ ₯μΌλ‘ μλ²μ μ λ¬ λ queryλ₯Ό νμΈν΄λ³΄μ.
- κ° νκ°λ°μ λ€μ΄κ°μ§ μμλ€. μ무λλ κΈμμ μ νμ΄ μλ κ² κ°λ€. κΈμμ μ νμ μμ 보λλ‘ νκ² λ€
μμμ΄ λ§μλ€. Maxlegth κ° 8λ‘ λμ΄ μμκ³ , λ΄κ° μ λ ₯ν ‘’or1=1—λ 9 κΈμμλ€. μμΌλ‘λ injection μ΄ μμ νμΌλ©΄ μ’κ² λ€. Maxlength λ₯Ό μμ λλ‘ νκ² λ€.
μ΄λ° λ Έλ ₯μλ λ‘κ·ΈμΈμ΄ λμ§ μμμ΅λλ€. μ€λ₯ ꡬ문μ java.sql.SQLException μΌλ‘ sql ꡬ문μ λ¬Έμ κ° μλ€λ κ²μ΄ μμ΅λλ€. Sql ꡬ문μ λ°κΎΈκ³ , μ€μ μ λ°κΏλ ν΄κ²°μ΄ λμ§ μμ λ€λ₯Έ νμΌμ μλ login ν¨μλ₯Ό κ·Έλλ‘ λ³΅μ¬ λΆμ¬ λ£κΈ° νμ¬ λ‘κ·ΈμΈ λ¬Έμ λ₯Ό ν΄κ²° νμ΅λλ€.
Larry μ νλ‘νλ‘ λ‘κ·ΈμΈμ΄ λ κ²μ νμΈ ν μ μλ€.
μ΄μ burpsuite λ₯Ό μΌμ ViewProfile μμ²μ λ³΄λΌ λ μ‘°μμ ν΄λ³΄λλ‘ νκ² λ€.
POST method λ‘ ViewProfile μ μμ²ν κ²μ λ³Ό μ μλλ°. μ΄λ employee_id κ° 101 μ΄κ³ , μ΄λ larry μ employee_id μ΄λ€.
Java νμΌμ νμΈν΄λ³΄λ©΄ 101 μ΄ μ²«λ²μ§Έ employee_id value μμ μ μ μλ€. Select query μ κ²½μ° κ°μ₯ μμμ λνλλ κ²λ§ λ°μ λκΈ° λλ¬Έμ, μ΄μ²λΌ λ§μ§λ§ λΆλΆμ΄ νμν μν©μμλ Order by ꡬ문μ μ΄μ©νμ¬ μμμΌλ‘ λ€μ§μ΄μ£Όμ΄μΌ νλ€.
employee_id μ ν΄λΉνλ body κ°μ 101 or 1=1 order by employee_id desc λ‘ λ°κΏμ£Όκ³ μμ²μ μ μ‘νλ€.
보μ΄λ κ² μ²λΌ Larry μ μμ΄λλ‘ λ‘κ·ΈμΈ ν μνμ§λ§, ViewProfileμμ Neville μ νλ‘νμ 보λ κ²μ²λΌ μ±κ³΅ν λͺ¨μ΅μ λ³Ό μ μλ€.
μ±κ³΅ν κ²μ λ³Ό μ μλ€.
Order by ? desc ?
SQL μ Order by μ μ SELECT λ¬ΈμΌλ‘ κ²μ λ λ°μ΄ν°λ₯Ό μ€λ¦μ°¨μ (ASC) λ λ΄λ¦Όμ°¨μ (DESC) λ‘ μ λ ¬ μν¬ λ μ¬μ© νλ€. Default κ°μ ASC λ‘μ¨ μλ΅ κ°λ₯νλ©° Order by μ μ μ ν λ 컬λΌμ΄ μ¬λ¬ κ°μΌ κ²½μ° μμ μ μ λ 컬λΌμ κΈ°μ€μΌλ‘ λ¨Όμ μ λ ¬νλ€.
D) Solve the problem ([Injection Flaws] - [LAB: SQL Injection] - [Stage 4: Parameterized Query #2]). (20 pts)
Stage 4 λ stage 3 μ λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄ μμ€μ½λλ₯Ό μμ νλ λ¬Έμ μ΄λ€.
μ°λ¦¬λ eclipse λ₯Ό ν΅ν΄μ μμ€μ½λλ₯Ό νμΈνκ³ μμ ν μ μλ€. ViewProfile μμ μ μ νκ² injection μ λ§μ보λλ‘ νλ€. Eclipse λ‘ ViewProfie μμ submit μ κ΄ν μ 보λ₯Ό μ°Ύλλ€.
Submit μ λλ₯΄λ©΄ SQLinjection.LISTSTAFF_ACTION μ΄ μ€ν λλ€.
κ·Έ μμ²μ μ²λ¦¬νλ java νμΌμ΄ λ€μκ³Ό κ°μ ViewProfile νμΌ μ΄λ€.
μ΄ νμΌ μμ μ·¨μ½ν ν¨μλ Stage2 μ κ°μ Statement κ°μ²΄λ₯Ό μ¬μ©νselect sql ꡬ문μ΄λ€. Stage2μ λ§μ°¬κ°μ§λ‘ PreparedStatement κ°μ²΄λ₯Ό μ¬μ©νλ 맀κ°λ³μλ₯Ό μ΄μ©ν ꡬ문μΌλ‘ λ°κΎΈμ΄μ€λ€.
μ·¨μ½ν query λ₯Ό PreparedStatement λ₯Ό μ¬μ©νμ¬ λ³΄μ ν λͺ¨μ΅μ΄λ€. μ μ₯νμ¬ μλ²μ λ³κ²½ λ μ½λλ₯Ό μ μ©μν¨ νμ λ€μ stage 3 μμ νλ κ² μ²λΌ burp suiteμμ salary μ κ°μ μ‘°μν΄ Neville μ μ 보λ₯Ό μ‘°ννλλ‘ ν΄λ³Έλ€.
μλ¬κ° λ°μνλ©° μ±κ³΅ν κ²μ μ μ μλ€. κ°μμμ νλ κ² μ²λΌ An error has occurred λ₯Ό Don’t try SQL injectionμΌλ‘ λ°κΏ μλ μλ€.
BurpSuite μλ μν λ
μ΄λ² μ±ν°λ₯Ό μ§ννλ©΄μ μ΄μ μμ΄ μλλ κ²½μ°κ° λ무λλ λ§μλ€. νμΈ ν΄λ³Έ κ²°κ³Ό firefox κ° νλ½ μμ΄ μ λ°μ΄νΈ λμ΄μ λ‘컬νΈμ€νΈλ‘ νλ‘μ μλ²λ₯Ό μ§μ νμ§ λͺ»νλ κ² μ΄μλ€. Firefox λ₯Ό μμ νκ³ , μ¬ μ€μΉ νμ΅μ μμ μλ μ λ°μ΄νΈ κΈ°λ₯μ ν΄μ νλ€.
μμμ ν λͺ¨λ μ€μ΅λ€μ΄ Statement κ°μ²΄λ₯Ό μ΄μ©νμ¬ λ°μν μ·¨μ½μ λλ¬Έμ΄μλ€. PreparedStatement λ₯Ό μ¬μ©ν νμκ° μλ€. μ€μ μλΉμ€μμλ PreparedStatement λ₯Ό μ¬μ©νλμ§ κ·Έλ μ§ μμΌλ©΄ λ μμ ν κ°μ²΄λ₯Ό μ¬μ©νλμ§ μμ보λλ‘ ν΄μΌκ² λ€.
E) Solve the problem ([Injection Flaws] - [Database Backdoors]). (20 pts) - Solve step1 & step2 problem.
E λ² λ¬Έμ μ κ²½μ° Database μ Backdoorλ₯Ό μ€μΉνλ κ²μΌλ‘ 보μΈλ€. Sql λ¬Έλ²μμ TRIGGER λΌλ λ¬Έλ²μ΄ μλλ° νΉμ ν μ΄λΈμ INSERT,DELETE,UPDATE κ°μ DMLλ¬Έμ΄ μν λμμ λ λ°μ΄ν°λ² μ΄μ€μμ μλμΌλ‘ μλνλλ‘ μμ±λ νλ‘κ·Έλ¨ ( μ½λ ) μ΄λ€. μ¬μ©μμ νΈμΆμ΄ μλλΌ λ°μ΄ν°λ² μ΄μ€μμ μλμΌλ‘ νΈμΆνλ κ²μ΄λ€.
UserId μ larry μ userid μΈ 101 μ μ§μ΄ λ£μλλ larry μ κ΄ν μ λ³΄κ° λμλ€.
κ·Έλ¦¬κ³ UserID μ μλ select κ΅¬λ¬Έμ΄ μ€ν λλ€λ κ²μ 보μ¬μ£Όλ κ² κ°λ€.
λ°λ‘ 101; μ΄νμ query κ° μλνλ κ²μ λ³Ό μ μλ€. Update λ¬Έμ₯μ ν΅ν΄μ larry μ μ 보λ₯Ό μ‘°μνλ€.
Stage1 μ clear νλ€. λ°λ‘ λ€μ Stage2 λ‘ λμ΄μ€λ©΄μ Stage2 μ κ΄ν μ€λͺ μ΄ λμ¨λ€. String SQL Injection μ μ΄μ©ν΄ λ°±λμ΄λ₯Ό μ€μΉνλ κ²μ΄λ€. CREAT νΈλ¦¬κ±°λ “CREAT TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=’john@hackme.com’ where userid = NEW.userid”
μ΄λ€. μ§κ³ λμ΄κ° νμκ° μλ€
CREAT TRIGGER
μμ λ§ν κ² μ²λΌ νΈλ¦¬κ±°λ₯Ό μμ±νλ©΄ μ§μ λ SQL λ¬Έμ΄ μ€ν λ λ λ€λ₯Έ SQL λ¬Έμ μλμΌλ‘ μνν μ μλ€. νΈλ¦¬κ±°λ₯Ό μμ±νλ νμμ λ€μκ³Ό κ°λ€.
κ·Έλ λ€λ©΄ μ°λ¦¬κ° WebGoat μμ μμ±ν SQL λ¬Έμ νμΈν΄λ³΄μ
1) CREAT
μμ±νλ λͺ λ Ήμ΄μ΄λ€. κ²½μ°μ λ°λΌ Table μ μμ±ν μλ μμ§λ§ μ΄κ²½μ°λ TRIGGER λ₯Ό CREAT νλ κ²½μ°μ΄λ€.
2) TRIGGER –
CREAT μ ν΄λΉνλ μΈμλ‘ TRIGGER λ₯Ό μμ±νκ² λ€λ λͺ λ Ήμ΄μ΄λ€. λ°λ‘ λ€μμ€λ string μ trigger μ μ΄λ¦μ μλ―Ένλ€.
3) BEFORE
νΈλ¦¬κ±°μ 쑰건 μμκ³Ό μ€ν μμμ΄ μ€ν λλ μμ μ μ§μ νλ©° BEFORE,AFTER,DEFERRED κ° μλ€.
4) INSERT
쑰건 μμκ³Ό λ§μ°¬κ°μ§λ‘ INSERT λ λ μλνλ€λ μλ―Έμ΄λ€. μΈμλ‘λ INSERT ,UPDATE, DELETE κ° μλ€.
5) ON –table—
INSERT λ°λ‘ λ€μ λμ¨ μ μλ‘ μ΄λ€ ν μ΄λΈμ ν΄λΉ κ΅¬λ¬Έμ΄ μλνλμ§ μ§μ νλ μμΉμ΄λ€.
6) FOR EACH ROW
κ° νμ ν΄λΉ TRIGGER λ₯Ό μ μ©νλ€λ μλ―Έμ΄λ€.
7) BEGIN
μ€μ μλν μ½λκ° μ΄ λ€μ λνλλ€.
8) UPDATE employee SET email=’john@hackme.com’ where userid = NEW.userid”
TRIGGER μμ μ€μ μλ ν μ½λλ€μ΄λ€.
μ΄μ μ€μ λ‘ User ID μ μ λ ₯μ ν΄λ³΄λλ‘ νμ.
101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid λ₯Ό μ λ ₯ ν΄μ£Όμλ€.
λ§μ§λ§ μ€μ΅κΉμ§ μ±κ³΅ν λͺ¨μ΅μ λ³Ό μ μλ€.
μλ£ μΆμ²
λμ λΈλ‘κ·Έ
https://limkydev.tistory.com/154