[LOS] 3번 goblin 풀이

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