이번에는 이름부터 간단한 simple sql injection 문제이다. 바로 코드로 넘어가보자.
자세히 보아야 할 부분만 가져왔다. 로그인에 성공한 이후 userid가 admin이면 flag를 출력한다. admin이 아닌 계정으로 로그인하면 간단한 인사만을 alert한다.
다른 필터링이 없다.
바로 SQL Injection을 진행하면 될 것 같다.
필터링이 없는 victim에 SQL Injection 공격의 정답은 해가 무수히 많은 고차방정식과 같다.
sql문에서 where 뒷부분만을 'True'로 만들어주기만 하면 된다.
하지만 password 영역에 or 연산을 삽입(userid=admin, password=1" or "1"="1)시키는 것은, 왜인지는 모르겠지만, hello guest 라고 alert 되며 flag가 뜨지 않는다. 어쨋든 userid 단에 or 연산을 삽입시키면 된다.
또한 userid 단에
admin" --
같이 따옴표로 문자열을 탈출하고, '--'로 뒷문장인 password의 논리를 무력화시키는 방법도 있다.
(논리연산에서 and가 or 보다 연산 우선 순위에 있다)
It tastes like honey, flag.