WEB ATTACK 학과 : 사이버경찰 담당 교수 : 안미정 교수님 팀장 : 김현경 팀원 : 양현진, 정윤필, 추혜숙 발표일 : 2013.12.19(목)
INDEX XSS ATTACK SQL INJECTION LOG ANALYSIS SECURITY
01 XSS ATTACK
XSS 란? Cross Site Scripting의 약자 XSS취약점은 사용자가 입력한 값을 웹 서버에서 검증하지 않아 생기는 취약점이다. OWASP(국제 웹 보안 표준기구) Top3 에 위치할 정도로 매우 치명적인 공격이다.
1. XSS 공격의 특징 - 웹 사이트에서 스크립트 사용이 가능 해야 한다. - 클라이언트만을 공격한다. - 웜바이러스 배포 - 악성코드 다운로드 및 실행 - 세션 재사용 공격(쿠키 탈취) - 페이지 변조 등
악성스크립트를 업로드하고, 사용자는 해당 게시물을 클릭했을 때 악성 스크립트가 실행 되는 형태이다. XSS ATTACK 원리 공격자가 웹 서버에 게시물을 통해 악성스크립트를 업로드하고, 사용자는 해당 게시물을 클릭했을 때 악성 스크립트가 실행 되는 형태이다. 1. 악성 스크립트가 담긴 게시물 등록 2. 게시물 열람 3. 악성 스크립트 다운 4. 쿠키값을 공격자의 서버로 전송
XSS 공격 시연 실 습 환 경 OS – Windows 7 Web Server – IIS 7.5 DB – MySQL 5.6 File – ASP Tool – Cooxie Toolbar
XSS 공격 시연
XSS 공격 시연 파일 업로드
XSS 공격 시연 게시물 클릭 시 화면에 아무것도 없음
http://IP주소/board/pds/cookie.txt 쿠키값 알아냄 XSS 공격 시연 http://IP주소/board/pds/cookie.txt 쿠키값 알아냄
XSS 공격 시연 로그인 없이 관리자 권한으로 게시판 보기 가능
02 SQL INJECTION
SQL Injection 이란? SQL Injection 공격 대상 웹 어플리케이션 자체의 버그를 이용하는 웹 해킹 방법 DB로 전달되는 쿼리를 추가하거나 변경하여 발생 사용자 입력에 대한 검증을 하지 않아 발생 웹 어플리케이션이 DB로 사용자 입력을 보낼 때 URL이나 폼 필드 또는 동적으로 생성되는 일부 SQL질의에 SQL명령어를 실행할 수 있을 때
SQL Injection 공격 원리 악의적 Query문 Query문 실행 Internet 공격 성공 내용 전송 Hacker Server
SQL Injection 공격 시연 실 습 환 경 OS – Windows 7 Web Server – IIS 7.5 CONTENTS SQL Injection 공격 시연 실 습 환 경 OS – Windows 7 Web Server – IIS 7.5 DB – MSSQL 2008 File – ASP
로그인 인증 우회 SQL Injection 공격 가능 체크 PW = ‘test’or’1’=1
로그인 인증 우회 Query문을 이용하여 ID획득 PW = ‘test’or’1’=‘1
SELECT * FROM member WHERE bId=‘catch’ and bPass=‘test’or’1’=‘1’; CONTENTS SELECT * FROM member WHERE bId=‘catch’ and bPass=‘test’or’1’=‘1’; 거짓 거짓 참 거짓 and연산과 or연산을 이용 and연산 -> 둘 다 참이면 참 or연산 -> 하나라도 참이면 참 참
로그인 인증 우회 알아낸 ID로 로그인(주석 사용) ID = admin’--
주석문(--)을 이용하여 아이디만 맞으면 Login가능 로그인 인증 우회 SELECT * FROM member WHERE bId=‘admin’-- and bPass=‘’; 거짓 SELECT * FROM member WHERE bId=‘admin’; 주석문(--)을 이용하여 아이디만 맞으면 Login가능
SQL Injection 공격 시연2 – 시스템 명령어 xp_cmdshell을 이용한 공격 1) xp_cmdshell 이란? - MS-SQL DB에 있는 master DB의 확장 프로시저 - 시스템 명령어를 실행할 수 있다. 2) 프로시저란? - 특정 작업을 수행하기 위한 프로그램의 일부
SELECT * FROM member; exec master..xp_cmdshell’ping 127.0.0.1’ 시스템 명령어 두 가지 이상의 쿼리문 실행하여 1) 세미콜론(;) 표시를 이용하여 연결하여 사용가능 SELECT * FROM member; exec master..xp_cmdshell’ping 127.0.0.1’
exec master..xp_cmdshell ’md c:\board\bbb’ 시스템 명령어 시스템에 폴더 생성하기 방법1. MSSQL Server에서 직접 입력 exec master..xp_cmdshell ’md c:\board\bbb’
가정) ID = ‘admin’으로 게시판 로그인할 때 툴 사용 시스템 명령어 시스템에 폴더 생성하기 방법2. 프록시 툴(Odysseus)을 사용 가정) ID = ‘admin’으로 게시판 로그인할 때 툴 사용
시스템 명령어 시스템에 폴더 생성하기 - URL 인코딩 수정
SQL Injection 공격 시연3 – 테이블 정보 열람하기 테이블 정보 보기 SQL Injection 공격 시연3 – 테이블 정보 열람하기 집계함수 1) 집계 란? - 이미 계산된 것들을 모아서 계산하는 것 2) 집계 함수 란? - 이미 계산된 결과를 어떤 기준으로 그룹화 하는 함수들 [avg(), sum(), count() 등…] 3) 집계 키 란? - 그룹화 하는 기준 (ex>GROUP BY 절의 칼럼이나 연산식)
테이블 정보 보기 테이블 명 획득 Test%’ having 1=1-- bbs.idx
테이블 정보 보기 필드 명 획득 Test%’ group by idx-- bbs.tId
필드 명 획득 Test%’ group by idx…tDate-- 테이블 정보 보기 필드 명 획득 Test%’ group by idx…tDate-- idx,tId,tName,tMail,tTitle,tContent, tfilename,tfilepath,tRead,tDate
테이블 정보 보기 테이블 명 획득 ‘having 1=1-- member.idx
테이블 정보 보기 필드 명 획득 ‘ group by idx-- member.bId
Test%‘ union select sum(bDate) 테이블 정보 보기 UNION과 sum()함수를 이용하여 필드 타입 알아내기 - sum()함수에는 숫자형만 사용할 수 있다.. Test%‘ union select sum(bDate) from member datetime
계정 획득하기 Test%‘ union select idx,bId,bPass,bName,bContent, 테이블 정보 보기 계정 획득하기 Test%‘ union select idx,bId,bPass,bName,bContent, bAddr1,bAddr2,bPhone,bMail,bDate
Union을 할 때는 필드 타입이 일치해야 한다. - varchar형의 bMail과 int형의 tRead를 union하려고 테이블 정보 보기 Union을 할 때는 필드 타입이 일치해야 한다. - varchar형의 bMail과 int형의 tRead를 union하려고 시도 하여 오류 발생 => tMail 필드대신 아무 숫자 입력 게시판 사용자 ID, PW 확인
SQL Injection 공격 시연4 – 테이블 내용 조작하기 테이블 정보 보기 SQL Injection 공격 시연4 – 테이블 내용 조작하기 계정 추가 하기 Test%’;insert into member(bId,bPass,bNamd,bPost,bPhone) values(‘test’,’attack’,’해커’,’a1’,’a2’);--
테이블 정보 보기 계정이 추가 확인
테이블 정보 보기 게시글 삭제 ‘or 1=1; delete from bbs where idx=3;-
03 LOG ANALYSIS
Logparser Tool을 이용하여 로그 분석 XSS 공격 로그 Logparser Tool을 이용하여 로그 분석
XSS 로그기록이 불확실 DB Table 내용 확인
CONTENTS 시간 정보를 이용한 로그 분석 범인은 정윤필
SQL Injection 공격 로그 SQL Injection HTTP 응답코드 => 500 범인은 추혜숙
04 SECURITY
ASP – 변수 = server.htmlencode(변수) 변수 = replace(변수, "<", "<") Security Code Server.htmlencode() -> HTML 태그를 소스 형태로 보여준다. HTML 지원 안 함(HTML 태그를 무력화 시킴) ASP – 변수 = server.htmlencode(변수) 변수 = replace(변수, "<", "<") 변수 = replace(변수, ">", ">") PHP - htmlentites() JSP - 변수 = 변수.replaceAll("<","<"); 변수 = 변수.replaceAll(">",">");
replace(“변수”,”변경대상문자”,“변경 후 값”) Security Code HTML을 화이트 리스트 방식 허용 ASP - 변수 = replace(변수,"<p>","<p>") - 변수 = replace(변수,"<P>","<P>") - 변수 = replace(변수,"<br>","<br>") - 변수 = replace(변수,"<BR>","<BR>") replace(“변수”,”변경대상문자”,“변경 후 값”)
str_replace(“변경대상문자”,”변경 후 값”,“변수”) Security Code HTML을 화이트 리스트 방식 허용 PHP - $변수 = str_replace("<p>","<p>",$변수); - $변수 = str_replace("<P>","<P>",$변수); - $변수 = str_replace("<br>","<br>",$변수); - $변수 = str_replace("<BR>","<BR>",$변수); str_replace(“변경대상문자”,”변경 후 값”,“변수”)
replaceAll(“찾는 문자”,”교체할 문자”) Security Code HTML을 화이트 리스트 방식 허용 JSP - 변수 = 변수.replaceAll("<p>","<p>"); - 변수 = 변수.replaceAll("<P>","<P>"); - 변수 = 변수.replaceAll("<br>","<br>"); - 변수 = 변수.replaceAll("<BR>","<BR>"); replaceAll(“찾는 문자”,”교체할 문자”)
SQL Injection 공격 대응 방법1 사용자의 입력 폼과URL 입력 값을 검증하여 특수 문자가 포함되어 Security Code SQL Injection 공격 대응 방법1 사용자의 입력 폼과URL 입력 값을 검증하여 특수 문자가 포함되어 있는지 여부를 확인하여 필터링한다. replace(문자열, 찾을 문자열, 바꿀문자열)
SQL Injection 공격 대응 방법2 로그인 하는 입력 폼의 길이를 제한한다. Security Code SQL Injection 공격 대응 방법2 로그인 하는 입력 폼의 길이를 제한한다. <input … maxlength=“숫자” />
Security Code 웹 취약점 분석 (Acunetix 툴 사용)
Web Page analysis Acunetix 툴 설치 및 사용 방법 http://www.acunetix.com/vulnerability-scanner/download/
Web Page analysis
Web Page analysis 보안 코드 작성 전
Web Page analysis 보안 코드 작성 후
Q&A
THANK YOU