webhacking.kr문제에서 자주 등장하는 addslashes함수 ㅎ
addslashes() : 데이터베이스 쿼리에서 필드값으로 저장하기 전에 사용되는 함수이다.
만일 문자열에 작은따옴표('), 큰따옴표("), 백슬래시(\), NULL 문자(%00)가 포함되어 있다면, 이 문자들 앞에 백슬래시(\)를 붙여 특수 문자가 순수한 하나의 문자로 인식되도록 해준다.
만약 데이터베이스에 저장하기 전에 addslahses함수를 사용하지 않는다면, 데이터베이스의 필드값에 저장되는 문자열 가운데 특수 문자가 포함될 경우 그 문자가 하나의 일반적인 문자가 아닌 특수 문자로 인식되어 오류를 일으키거나 잘못된 결과를 초래할 수 있다.
예를 들어, I'm studying English를 쿼리로 전송하게 되면 I'm의 작은 따옴표(')때문에 오류가 발생하게 된다.
따라서 addslashes함수를 이용해 I\'m studying English로 바꿔줘야한다.
magic_quotes_gpc : php.ini 파일에 작성되어 있는 설정값으로 디폴트 값은 on이며, 자동적으로 모든 GET, POST, COOKIE 데이터에 addslashes()처리를 한다.
이 설정을 통해 SQL Injection에서 사용자의 데이터 입력값에 쿼리를 조작하기 위한 ' 등이 있을 경우. 이를 \ 처리해주므로 공격을 방지할 수 있다.
+ addslashes() 우회
멀티바이트를 사용하는 언어셋(ex. utf-8) 환경에서는 백슬래시(\) 앞에 %a1 ~ %fe의 값이 들어오면 해당 값과 \에 해당하는 %5c가 합쳐져서 하나의 문자를 나타내게 된다.
참고
>> https://rootable.tistory.com/entry/addslashes-mysqlrealescapestring-%EC%9A%B0%ED%9A%8C
'기초 다지기' 카테고리의 다른 글
netcat 명령어 사용하기 (0) | 2021.07.28 |
---|---|
.htaccess 파일이란 ? (0) | 2020.03.11 |
해시함수 (0) | 2020.02.02 |
2진수, 8진수, 16진수 (0) | 2020.02.02 |
URL encoding을 해야하는 이유 (0) | 2020.01.26 |