2019. 7. 29. 17:44ㆍ문제풀이/los.rubiya.kr
이번 문제에서는 id가 아닌 no를 입력받는다.
입력 방지 문자열은
prob _ . () ' " ` 가 있고, solve 조건은 result['id'] == 'admin'이다
이 문제를 풀 때 중요하게 알아야할 것은 바로 and와 or의 우선순위!
and가 우선순위가 더 높다.
즉,
0 and 0 or 1의 값은 1이라는것!
그래서 우리는 저 쿼리문을 0 and 0 or 1의 꼴로 나타낼 것이며, 쿼리문으로 표현하면 다음과 같다.
select id from goblin where id='guest' and no=0 or id='admin'
여기서 no=0을 한 이유는, no=0만 넣었을 때 아무런 메시지가 출력되지 않았기 때문이다.
no=1을 넣었을 경우 아래와 같은 메시지가 출력된다
즉 id='guest'일 때 no = 1이 참값이라는 의미이다.
우리는 or의 앞 부분을 거짓으로 만들어줄것이므로 no=0을 입력한다.
또한 문제에서 쿼터(',")가 필터링 되어 있으므로 id='admin' 대신 다른 표현법을 사용한다.
지금 생각나는건 2가지 방법인데, 첫번째는 0x61646D696E 라고 표현하는거고 두번째는 char(97,100,109,105,110) !
여기서 0x는 뒤에 오는 문자들이 헥사값임을 나타내고, 61646D696E는 admin에 해당하는 아스키코드의 헥사값임을 아래 그림처럼 확인할 수 있다.
마찬가지로 char은 안에 있는 인수들을 10진수로 받아서 문자로 변환해주는 함수이다.
종합하여, select id from prob_goblin where id='guest' and no = 0 or id=0x61646D696E 또는
select id from prob_goblin where id='guest' and no =0 or id=char(97,100,109,105,110)와 같은 쿼리를 전송한다.
밑줄친 부분이 GET방식으로 넘겨줄 파라미터!
그렇게 하면 문제가 풀린다.
그리고 또...
no=2가 admin의 no 값인것도 알아냄 ㅎㅎ
'문제풀이 > los.rubiya.kr' 카테고리의 다른 글
[LOS] 6번 darkelf 풀이 (0) | 2019.07.29 |
---|---|
[LOS] 5번 wolfman 풀이 (0) | 2019.07.29 |
[LOS] 4번 orc 풀이 (0) | 2019.07.29 |
[LOS] 2번 cobolt 풀이 (0) | 2019.07.29 |
[LOS] 회원가입 + 1번 Goblin 풀이 (0) | 2019.07.29 |