SQL Injection ( 인증 우회 ) 식별/인증 분리방식
이전 글( 식별/인증 동시 방식 )과 다르게 유저가 입력한 아이디에 대한 패스워드를 가져와
코드 안에서 if 문으로 비교하였다.
동시 방식에서 사용했던 ' or '1 , ' or '1 우회방법을 대입해보니 실패
두 번째 참으로 만들고 뒤를 주석 처리해 버리는 ' or 1=1#
그러나 아무 아이디만 넣었을 때와 다르다는 건 아이디에 대해서는 우회가 되는 것 같다.
따라서 추측해보면, 코드 아래에서 if 조건을 우회하려면 단순히 참, 거짓이 아니라 내가 아이디에 임의로 패스워드에 입력할 값을 주입시켜야 할 것 같았다.
지금까지 지식에선 SQL문에 내가 원하는 값을 주입하는 것은 이전 강의에서 들었던 union이 전부였고, 그래서 union을 사용해서 우회해 보았다.
처음에 컬럼의 개수를 파악해 보려고 admin' order by 1# 를 사용해봤는데, 아무 아이디를 넣었던 것처럼 아이디 조차 우회가 되지 않아, union 값을 늘려가면 직접 입력해봤다.
결국 어떻게 어떻게 억지로 인증 우회에 성공했지만, 처음에 order by로 컬럼 갯수를 알아보려는게 막혀 많이 막막 했었다. 결국 union 컬럼 개수를 모른 상태에서 에러가 안 날 때까지 입력해보기로 했는데 1에서 성공.
직접 공부 목적으로 개발한 웹사이트 조차 우회하는데 오랜 시간을 보내다 보니, SQL문과 더 많이 친해져야 할 것 같다는 생각이 들었다.