simple_sqil 문제풀이
Sql Injection을 사용해 admin 계정으로 로그인하는 문제이다.
userid 와 userpassword를 확인해 로그인하는 코드이다.
res = query_db... 코드가 사용자의 입력을 받는 부분이기에 이 부분에 Sql Injection을 가하면 된다.
유저의 아이디와 비밀번호를 구성하는 코드이다.
guest의 아이디와 비밀번호는 guest, admin의 비밀번호는 알수 없도록 설정되어 있다.
사이트의 로그인 화면이다. 로그인할 계정의 아이디를 알고 있으니 userid 부분에 명령어를 입력하면 된다.
로그인 방법은 총 2가지가 있는데 첫번째는 limit을 사용하는 방법이고 두번째는 그냥 주석만 활용하는 방법이다.
limit를 사용하는 경우에는 admin" 뒤에 or 1=1 limit x,y를 집어넣으면 된다.
or 1=1을 사용할 경우 userid의 값이 입력한 "admin"이거나 or 1=1인 모든 값을 반환하게 된다.
이때 or 1=1은 참이므로 admin의 값만 반환되는것이 아닌 모든 행이 반환되기에 데이터베이스의 가장 첫번째 행인 guest 계정으로 로그인이 되게 된다.
따라서 뒤에 자신이 로그인하고자 하는 계정의 정보가 저장된 행을 직접 limit로 지정해주어야 한다.
위 경우는 admin 계정이 1,1에 지정되있기 때문에 limit 1,1을 사용하였다.
주석만을 사용하는 경우는 단순히 admin" -- - 만을 입력하면 된다. password 부분이 주석으로 처리되기에 userid만으로 계정에 로그인 할수 있게 된다.