preg_match('/prob|_|\.|\(\)/i'
를 통하여 'prob', '_', '()', '.' 를 필터링하고 있다.
또한 아래에서는 싱글쿼터(')를 필터링하고 있다.
id 와 pw 의 입력값이 모두 싱글쿼터로 갇혀있기 때문에 어떻게든 탈출시켜야 한다.
이전에는 싱글쿼터를 한 번 더 사용함으로써 기존의 싱글쿼터를 탈출했다.
하지만 지금은 싱글쿼터가 필터링 되어있기 때문에 다른 방법을 찾아야 한다.
우선 더블쿼터를 이용해보려고 했다. 하지만 쿼리문 자체에서 싱글쿼터로 입력값을 감싸기 때문에 소용이 없다.
그 다음으로는 주석을 이용하려고 했다.
하지만 어떻게든 문자열을 탈출하여 'or TRUE' 라는 쿼리문을 만들어야 한다.
문자열 탈출이 답이다.
mySQL 에는 '\' 를 이용함으로써 특수문자를 제어문자가 아닌 일반적인 문자열로 인식하게끔 할 수 있다.
만약 '%'라는 문자를 wild card 가 아닌 일반적인 문자열로 사용하고 싶다면,
'\%' 와 같이 '\'를 사용함으로써 이어지는 특수문자를 일반적인 문자열로 만들 수 있다.
이를 이용하여 문자열을 탈출하고 참값을 가지는 쿼리문을 보내면 된다.
select id from prob_succubus where id='\' and pw=' or 1#'
백슬래시 뒤에 있는 싱글쿼터는 일반적인 문자열로 인식되어 빨간 글씨는 id의 입력값이 되는 것이고,
pw 의 입력값을 감싸는 첫번째 싱글쿼터가 id 의 입력값을 감싸는 마지막 싱글쿼터로 사용된다.
또한 참값을 가지는 쿼리문 'or 1' 뒤에 주석처리(#)를 함으로써 마지막에 남아있는 pw 입력값의 마지막 싱글쿼터를 무력화할 수 있다.
주석처리는 %23(#)으로 전달해야 작동한다.
결국 'or 1' 이 모든 것을 지배하게 된다.
'Web Hacking > LOS' 카테고리의 다른 글
Lord of SQL Injection - nightmare (0) | 2021.08.22 |
---|---|
Lord of SQL Injection - zombie_assassin (2) | 2021.08.21 |
Lord of SQL Injection - assassin (0) | 2021.08.18 |
Lord of SQL Injection - giant (1) | 2021.08.16 |
Lord of SQL Injection - bugbear (0) | 2021.08.16 |