inflearn logo
강의

Course

Instructor

SQL Injection Attack Techniques and Secure Coding Explained by a Simulated Hacking Practitioner: PART 1

대응방안 코드에 대해서 질문이 있습니다.

322

Jeong Seob Lee

8 asked

1

안녕하세요.

강의  "대응 방안" 파트의 "상세 대응 방안(2)" 강의를 보던 중 궁금한점이 생겨서 질문드립니다.

1) 첫째로, 문자 입력에 대한 대응 방안으로 강의에서 예시로 제시했던 코드가 아래와 같습니다.

---------------------------------------------------------------------------

JAVA

String keyword = request.getParameter("keyword");

// MSSQL, ORACLE 대응 방안 예시

keyword = keyword.replace("'", "''");     <<<<<<<<< (1)

keyword = keyword.replace("\"", "\"\"");

query = "select * from board where keyword like '%" + keyword + "%'";

-------------------------------------------------------------------------------

이 부분에서   <<<<<<<< (1) 표시된 부분의 내용이 잘 이해가 되지 않아서요.

강의 하시면서 공격자가 '(작음따옴표) 하나를 입력하면 두개로 변하여 '(작은따옴표)가 검색이 된다고 말씀하셨는데요 

만약 공격자가 '(작은따옴표) 하나를 입력한 경우라면 이 하나의 '(작은따옴표)가 연속된 두개의 ''(작은 따옴표)로 변하여

query 는 다음과 같이 생성될 것입니다.

select * from board where keyword like '%''%'

이런식으로 되면 % 양쪽으로 그냥 '(작은따옴표)로 깜싸는 정도로 바뀔거라고 짐작하고 있는데요.

어떻게 '(작은따옴표)도 검색이 가능하게 되는지 이해가 되지 않습니다. 그리고 이 경우 mysql 경우 처럼 \' 패턴을 이용하면

우회가 가능한지도 궁금합니다.  

그리고....

2) 두번째로,  컬럼/테이블 입력에 대한 대응 방안으로 제시한 예제 코드의 일부는 다음과 같습니다.

boolean flag = Pattern.matches("^[0-9a-zA-Z-]*$", tb_name);

강의에서 설명해주셨던 것 처럼 이 코드 내용은 숫자, 알파벳 대소문자 그리고 -(대시 또는 하이픈)문자를 필터링하는 것인데요.

제 생각에는 -(대시) 문자 이외의  _(언더바) 문자가 추가되어야 하지 않을까 해서요? 

강의에서 사용하였던 "TB_BOARD" 처럼 _(언더바) 문자가 포함된 테이블이나 컬럼이 존재하는거로 봐서는요,

아니면 제시된 코드의 오타인걸로도 생각이 들고요. 

감사합니다~

모의해킹 인젝션

Answer 2

1

Jeong Seob Lee

답변 감사합니다~ ㅎㅎ

이해가 팍팍 되네요~ 감사합니다~

0

crehacktive

안녕하세요. 

질문에 대한 답변 드리겠습니다.

1) 싱글쿼터는 SQL 문법에 있어서 메타 문자 기능을 합니다.

즉, 특정 기능을 수행하는 문자라는 거죠. 그 기능은 문장의 시작과 끝을 알리는 문자입니다.

그런데, 이러한 싱글쿼터도 단순 문자로 사용하는 경우가 당연히 있겠죠?

예를 들어, i'm a boy 이런 문장이 있다면 싱글쿼터를 어떻게해서 단순 문자로 인식을 시킬까요?

메타 문자를 단순 문자의 기능으로 변환하는 것을 일반적으로 이스케이프 처리 한다라고 표현을 합니다.

DBMS별 이스케이프 처리 방식을 살펴보면

MSSQL, ORACLE은 '를 '' 싱글쿼터 두개로 처리하면 됩니다.

select 'i''m a boy';  => i'm a boy(출력)

위와 같은 문장이 한 예시입니다. 

아래의 SQL 문장은 질문하신 부분입니다.

select * from board where keyword like '%''%'

그렇다면 위의 SQL 문장은 어떻게 해석이 될까요?ㅎ

이건 공부거리로 남겨드리겠습니다.

MYSQL은 \' , '' 두가지 방식 전부 사용 가능합니다.

그러나 MSSQL, Oracle은 \' 방식은 사용되지 않습니다.

한번 직접 실습을 해보시는게 좋아요! 궁금한점은 바로 실습 고고~

2) 이건 예시일 뿐입니다 ^^;;;ㅋㅋㅋ

네이밍 특성을 고려하여 어플리케이션 환경별로 

특수문자를 추가해주시면 됩니다!

보통 -(대시), _(언더바)를 많이들 사용하십니다!

그냥 예를 든다고 - 문자 하나만 추가한거구요ㅎㅎ 

컬럼명 기반으로 테이블 개수를 출력

2

499

1

외부 자료 학습중 질문사항-메타데이터 추출 불가한 상황

1

477

1

텍스트 인코딩 한국어

1

610

1

강의랑 관련없는 내용이지만

1

526

2

왜 취약점이 존재한다고 판단할 수 있는지 궁금합니다.

2

553

1

스프링을 배우는 게 나중에 웹 취약점 진단에 도움이 될까요?

2

618

1

Fatal error

1

697

1

코드에 있는 이상한 노란박스

1

1795

1

Parse error 마지막 부분 에러

1

450

1

microsoft machine leraning server 구성 요소 오프라인 설치

1

697

1

실무에서의 버프스위트 사용이 궁금합니다!

1

370

1

sql injection이 왜 위협적인 공격인지 궁금합니다.

2

458

1

union 공격 시 최적화 방법 (게시글 상세보기)

2

258

1

질문이 있습니다

1

201

1

한글은 비트추론할때 어떻게 해야하나요?

1

231

1

[SQL 인젝션에 대한 이해] - "검색 기능에 대한 올바른 취약점 점검 방법" 강의 내용에 대해서 질문입니다.

1

738

2

로그인 버튼

1

284

1

php+mssql 연동

1

447

1

취약점 실습 에러가 안나요

1

237

1

php 기반 로그인 기능 제작 관련해서 질문드립니다.

1

366

3

[실습 7-4, 7-5, 7-6] MySQL, MSSQL, Oracle union based 공격 실습 강의 이후 상세보기에서 순차적 데이터 호출 실습 질문

1

313

1

[실습2-1] 취약점 분석 실습 도중에 질문있습니다 !!

2

222

1

[실습6-1]MSSQL ERROR-BASED 공격 실습 관련 질문 내용

2

372

1

ORA-12541

1

895

7