사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi
PDF 다운로드

PDF 다운로드

기본적인 HTML과 자바스크립트를 배우고 나면, 웹사이트에서 비밀 번호로 보호된 내용에 접근할 수 있는 경우가 있다. 이 글에서는 간단하고 보안이 약한 웹사이트를 HTML 코드로 해킹하는 법을 알아 볼 것이다. 이 방법을 좋은 방향으로 사용하길 바란다.

일러두기: 이 글에서 다루는 방법은 보안이 엄청나게 약한 웹사이트들에서나 쓸 수 있는 방법이다. 보안에 신경을 많이 쓴 웹사이트들에는 통하지 않는다. 서버 보안에 조금이라도 신경을 썼다면, 이 방법은 절대로 통하지 않으며, 현대 웹사이트들에서는 거의 통하지 않는 방법이다.

단계

  1. 사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

    1

    해킹하고 싶은 웹사이트를 연다. 로그인 양식에 ID: me, 비밀번호: ' or 1=1 -- 라고 잘못된 ID와 비밀번호를 입력한다. 그러면 잘못된 ID와 비밀번호라고 뜰 것이다. 이제 실험은 여기에서부터 시작된다.

  2. 사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

    2

    오류 페이지에서 마우스 오른쪽 클릭을 통해 메뉴를 연 후, "소스 보기"를 클릭한다.

  3. 사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

    3

    코드를 읽어 본다. 자바스크립트와 HTML을 볼 수 있을 것이다.

    • <form action="...login-link...">같은 부분을 찾아 보자.
    • action 부분에 웹사이트 주소가 포함되어 있지 안다면 포함시켜준다. (예: <form..........action=http://www.targetwebsite.com/login.......>)

  4. 사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

    4

    사용자 정보의 유효성을 확인하는 자바스크립트 코드를 제거한다. 이 부분은 조심스럽게 진행해야 한다. 계정 정보를 확인하는 자바스크립트 코드를 얼마나 효율적으로 제거하느냐에 따라 해킹의 성공 여부가 결정된다.

  5. 사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

    5

    <input name="password" type="password">을 찾아 본 뒤 type="password"를 type="text"로 바꾼다. 비밀번호의 최대값이 11글자보다 작다면 11글자로 늘려 주자.

  6. 사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

    6

    파일 > 다른 이름으로 저장으로 들어가 해킹한 HTML 파일을 원하는 이름으로 저장한다.

  7. 사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

    7

    방금 전에 저장한 파일을 더블 클릭해서 연다.

    • 원래 파일과 조금 다른 점이 보일 것이다. 신경 쓰지 말자.

  8. 사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

    8

    hacker, "' or 1=1" 같은 ID와 비밀 번호를 입력한다. 그러면 웹사이트에 로그인이 가능한 경우가 있을 것이다.

  • 이 작업을 할 때 여러분의 컴퓨터 IP를 사용하지 말자. VPN이나 프록시를 쓰자. 해킹이 발각되어 체포될 수 있다.

경고

  • 코드를 변경하는 것은 신중해야 한다. 이 해킹 과정은 사용자 정보의 유효성을 검사하는 코드를 얼마나 효율적으로 지워 내는가에 달려 있다.

이 위키하우에 대하여

이 문서는 103,434 번 조회 되었습니다.

공지 목록

공지글

글 제목작성일

(97)

공지 파이썬 알고리즘 코딩 테스트 책 집필했어요!

2020. 8. 2.

Webhacking.kr(웹 해킹 연습 사이트) - 2번 문제

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi
안경잡이개발자2017. 7. 2. 2:12

※ 이 카테고리에서 다루는 내용을 불법적인 목적으로 활용하시면 안 됩니다.

 이번 시간에는 2번 문제를 풀어보도록 하겠습니다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 2번 문제는 들어가자마자 특이하게 아예 '완성된' 형태의 한 웹 사이트가 눈에 보이네요. 페이지의 개수도 많은 만큼 분석해야 할 내용도 많은 것 같습니다. 1번 문제에서도 처음에 HTML 소스 코드를 분석하는 걸로 시작했습니다. 이번에도 소스 코드부터 확인해보도록 하겠습니다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 위와 같이 소스 코드에는 두 가지 이상한 점이 있었습니다. 하나는 '관리자 페이지'가 노출되어 있다는 점이고 다른 하나는 주석 부분으로 날짜 정보가 출력되어 있다는 점입니다. 날짜 정보는 심지어 현재 시간과 맞지도 않습니다. 이 두 부분이 힌트인 것 같습니다. 일단 admin 페이지로 가봅시다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 바로 위와 같이 비밀번호를 입력하라고 나오네요. 다시 index.php로 돌아갑시다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 지난 시간의 풀이와 비슷하게 쿠키를 확인해보니 time이라는 이름으로 '1498916469'라는 값이 저장되어 있습니다. 위에 있는 날짜 정보 주석 부분과 연관성이 있는 것 같습니다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 100이라고 한 번 넣어보고 새로고침 해보겠습니다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 주석의 날짜 부분이 변경되었네요. 감이 왔습니다. (1번 문제랑 너무 비슷한데... 뭐지...?) 대충 원리를 생각해보면 웹 서버는 time이라는 속성의 쿠키 값을 이용해서 정해진 SQL 문장을 사용해 데이터베이스에서 시간 정보를 가져오는 것 같네요. 문제 해결이 쉬울 것 같습니다. 그렇다면 구체적으로 SQL 문장이 무엇일 지 예측을 해보는 것도 좋겠지요? 여러 개의 값을 대입해 본 결과 항상 년도는 2070년이었으며 값이 커지면 시각이 커지고 값이 작아지면 시각이 작아졌습니다. 여기서 다음을 유추할 수 있겠네요.

 SELECT 2070년 1월 1일부터 시간 차이 FROM 시간테이블 WHERE 변수 = '쿠키값';

 위와 같은 SQL 문을 서버가 실행한다고 가정할 수 있습니다. ㅋㅋㅋ 사실 정확한 SQL 문장은 알 필요도 없어요. 대충 쿠키 값 변경해보고 2070년 1월 1일부터 시간 차이를 주석으로 출력한다는 사실을 파악하면 됐습니다. 웹 서버에서 SQL 인젝션 검증을 하지 않으면 SQL 인젝션을 수행할 수 있겠네요. 아마 2번 문제니까 SQL 인젝션이 되도록 만들어 놨을 것 같네요...ㅋㅋㅋ (출제자의 고의적 취약점 노출...)

 이제 여기에서 웹 서버 개발을 해보신 분은 알겠지만 가장 대표적인 테이블 유형이 있습니다.

 ※ 테이블 이름: USER
  - ID
  - PASSWORD
  - NAME

 이런식으로 만드는 것이 일반적이죠. 테이블 이름은 USER, BOARD, ADMIN 등 일반적으로 사용되는 유형이 정해져 있습니다. 웹 서버 개발자가 시큐어 코딩에 특화된 사람이 아니고 대충 지었다면 저런 것 중 하나겠죠? 이제 닥치는 대로 때려 박습니다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 이런식으로요. 데이터베이스의 기본만 알아도 됩니다. SELECT COUNT(id) FROM user는 user라는 테이블에서 가져온 데이터 중에서 id 속성의 개수를 출력하는 코드죠.  한 번 이렇게 하고 새로고침 합시다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 주석 부분이 사라졌습니다. 내부 SQL 오류가 발생해서 출력이 안 되나 봅니다. 이 경우는 데이터베이스 내에 존재하지 않는 테이블에 접근하는 경우 등에서 발생하겠지요. 즉 제가 입력한 user 테이블이 정답이 아닌가 봅니다. 이제 여기서부터는 추리 싸움입니다. 테이블 이름을 찾습니다. 웹 사이트 이름, URL, 많이 사용되는 테이블 이름 리스트 등을 근거로 넣는 겁니다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 1이 나온 걸 보니까 1개의 비밀번호 데이터가 저장되어 있다는 사실을 파악할 수 있습니다. 생각보다 문제가 굉장히 쉽네요. 'admin' 페이지이니까 'admin'이란 테이블 이름으로 비밀번호 속성이 존재하는 겁니다. 그다지 꼬아서 문제를 낸 게 아니라서 난이도가 적절한 것 같습니다. 그럼 이제 구체적으로 비밀번호가 뭔 지 찾아야겠죠?

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 일단 혹시나 하는 마음으로 admin 테이블의 패스워드를 1로 바꾸는 SQL 문장을 때려 박읍시다.

 해보니까 안 되네요. 이 방법은 포기합니다.

이것저것 해보는데 하나도 안 되네요. 제 생각엔 password를 직접 찾는 방법이 더 효율적일 것 같습니다. 무차별 대입 공격(Brute Force Attack)으로 찾아 봅시다. 이를 위해서는 패스워드의 길이를 찾아내야겠죠?

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 10이 나온 걸 보니까 비밀번호 길이가 10이네요. SQL Injection이 통하기 때문에 한 글자씩 알아내면 됩니다. ㅋㅋㅋㅋㅋ 무진장 쉽네요. 지금 가능한 것이 무엇이냐면 서버에 SQL Injection을 수행해서 그 결과를 '숫자' 형태로 반환할 수 있다는 거에요. 즉, 10자든 100자든 앞에서부터 한 글자씩 가져와서 그것을 아스키 코드 형태(숫자 형태)로 출력하도록 만들면 된다는 거죠.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 위와 같이 비밀번호의 첫 번째 글자를 아스키 코드로 출력하도록 합니다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 48이 나왔네요. 즉 다시 변환하면 '0'이라는 문자라는 걸 알 수 있습니다. 

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 이제 이런식으로 1, 2, 3, 4, 5, 6, 7, 8, 9, 10을 SUBSTRING() 함수의 두 번째 파라미터로 넣어주면 됩니다. 총 10번 쿠키 값을 바꾸어주면서 답을 찾아내면 됩니다. 정말 쉽죠? 이게 귀찮으면 자바에서 URL 커넥션 라이브러리를 쓰면 자동화할 수 있습니다. 다만 파싱의 과정도 거쳐야 하기 때문에 그냥 10번 이렇게 쿠키 값 바꾸는 게 훨씬 빠를 것 같습니다. 따로 프로그래밍 같은 걸 할 필요도 없어서 비전공자도 쉽게 할 수 있는 난이도가 굉장히 낮은 문제입니다. 아직 문제 2번이라서 그런 것 같습니다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 위 과정에서 찾은 10개를 그대로 입력하면 관리자 페이지에서 로그인이 가능합니다. 암호 문제 푸는 것 같은 기분이라서 재미있네요. ㅋㅋㅋ 일단 메뉴얼 패스워드를 얻었습니다. 이제 게시판으로 가봅시다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 비밀글이라네요. 이것도 SQL 인젝션으로 찾아봅시다. 여기에서도 위에서 한 것과 비슷하게 테이블의 이름을 유추해야 합니다. 저는 board, bbs 등 다양한 이름을 넣어보았는데 안 됐습니다. 그러던 중에 보니까 게시판 제목이 FreeB0aRd라고 쓰여 있는 것을 뒤늦게 확인했습니다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 이렇게 넣어보니 9라는 값이 반환되었네요. 마찬가지로 아스키코드로 변환해서 한 글자씩 비밀번호를 따내면 됩니다. 중노동의 과정이 다시 시작되었습니다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 이렇게 하니까 아스키 코드 55가 나왔습니다. 즉 첫 번째 문자는 7이네요. 반복합시다. 반복하면 결국 9자리 비밀번호를 약 2분 정도면 찾을 수 있습니다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 이제 이렇게 비밀번호를 따고 들어가면 게시판의 게시글이 보입니다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

다운로드를 받으면 비밀번호가 걸려있습니다. 비밀번호는 아까 admin 테이블을 뚫었을 때 얻었습니다. 이제 압축을 풀고 안에 들어있는 문서를 열면 최종 암호 키를 획득할 수 있습니다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 여기 Auth 페이지로 가서 입력하면 끝입니다.

사이트 비밀번호 뚫기 - saiteu bimilbeonho ttulhgi

 2번까지 클리어! 재미있네요...ㅋㅋㅋ 저도 교육용 모의 해킹 웹 사이트나 만들어 볼까요...? 2번 문제는 전반적으로 난이도는 낮지만 시간이 오래 걸리는 문제였던 것 같습니다. 저처럼 1개씩 쿠키 값을 직접 변조해도 되고, 자바(Java)나 C# 같은 언어로 HTML Request를 보내고 값을 파싱하는 방법으로 풀어도 될 것 같습니다. 다만 현재 상태에서는 소켓 프로그래밍이나 웹 파싱 프로그래밍을 하지 않아도 10번만 쿠키 값을 바꾸면 금방 답을 찾기 때문에 비밀번호의 길이를 100자 이상으로 늘려서 난이도를 조금 높였으면 좋을 문제라고 생각합니다.