addslashes(), mysql_real_escape_string() 우회

2020. 5. 18. 22:12

addslashes() 함수 자체를 우회 못하지만, 멀티바이트를 사용하는 언어로 인코딩을 할 때 우회가 가능하다.


-멀티바이트(Multi Byte Character Set)

1. 아스키 문자 코드에다가 다른 문자(2byte)들을 포함한 문자 집합이다.

어떤 문자는 1byte이고, 어떤 문자는 2byte이다.

 

2. 특정 문자 집합마다의 코드 페이지가 존재한다.

예를 들어, 같은 코드 번호일지라도 한글 코드 페이지로 해석하면 한글이 나오지만,

일어 코드 페이지로 해석하면 일어가 나온다. <- 깨지는 문자를 목격할 수 있다.

 

현재 Windows 등의 운영체제에서 이 방법을 채택하고 있다. 한글 Windows도 아직까지는 MBCS를 채택한다. 한글을 표현하기 위해 대표적으로 MBCS에서 사용하는 인코딩 기법에는 EUC-KR, CP949가 있다.


멀티바이트를 사용하는 언어셋 환경에서는 백슬래시 앞에 %a1 ~ %fe의 값이 들어오면 | \ |에 해당하는 값 %5c가 합쳐져서 하나의 문자를 나타낸다. <- SQL Injection 방어를 위해 생성한 | \ |가 사라져 공격이 된다.

 

예를 들어, | ' |를 입력하면 | \' |로 바뀐다. 하지만 | %f1' |를 입력하면 | %f1\' |로 바뀌게 되고, 이는 | %f1%5c%27 |과 같으므로 %f1%5c를 하나의 문자로 보게 되어 이 둘을 하나로 묶고 %27만을 남겨둔다.

'[▒] 보안 > Security Issues' 카테고리의 다른 글

Apache Log4j 2 RCE vulnerability  (0) 2021.12.13

BELATED ARTICLES

more