Challenge 59 시작!
JOIN 과 LOGIN 입력 값이 있는 것을 보니 회원가입하여 로그인을 성공해야 하는 문제인 듯 하다. test/1234 로 회원가입을 하고 로그인 해보자.
로그인 한 결과, lv 이 guest 로 되어 있는 것을 확인할 수 있다. 소스코드를 보자.
JOIN 의 id 와 phone 값은 addslashes() 를 이용하여 필터링 하고 있고, 추가로 특정 문자들을 필터링 하고 있다. 회원가입을 하게 되면 자동으로 lv 은 guest 로 설정된다. 이 lv 값이 admin 일 때 문제가 해결된다.
필터링 때문에 admin 을 직접 입력하는 것은 불가능하다. 방법을 찾아 보다 SQL 의 reverse() 라는 함수를 알게 되었다. 이 함수를 이용하면 문자열을 뒤집어서 입력하거나 출력할 수 있다. 이를 이용하면 문제를 해결할 수 있다.
위와 같이 id 를 admin 의 역순인 nimda 로 입력하고 phone 에 1,reverse(id)),(1,1 을 입력하는데, 이는 insert 문에 여러 값을 입력할 수 있는 취약점을 이용한 것이다. phone 값은 글자 수 제한이 있어 기타 값들은 모두 1 로 입력하는 것이 편하다. 이렇게 입력했을 때 실행되는 insert 문은 다음과 같다.
insert into chall59 values('nimda',1,reverse(id)),(1,1,'guest')
회원가입 후, nimda/1 로 로그인하면 문제가 해결된다.
성공!
'WarGame > webhacking.kr' 카테고리의 다른 글
Challenge 60 (0) | 2020.05.04 |
---|---|
Challenge 58 (0) | 2020.05.04 |
Challenge 57 (0) | 2020.05.04 |
Challenge 55 (0) | 2020.04.29 |
Challenge 54 (0) | 2020.04.29 |