🔑 세션 하이재킹 (Session Hijacking)

A1-2

  • 정답:
    1. 임의의 아이디와 비밀번호로 로그인 요청을 보낸다.
    2. Burp Suite를 통해 로그인 요청에 대한 HTTP request와 response를 intercept하여 hijack_cookie라는 session 값을 확인한다.
    3. 로그인 요청을 몇 번 더 보내 session 값의 규칙을 확인한다.
    4. 확인 결과 아래와 같은 규칙이 확인됐다:
      • 85806689698982266 05-171464176 9447
      • 85806689698982266 27-171464206 1468
      • 85806689698982266 29-171464206 3425
      • 매 로그인 시도 마다 앞의 값이 1씩 증가하고 뒤의 값 일부가 바뀐다.
    5. 2번째와 3번째 session 값 사이에 28로 끝나는 session 값이 없는 것으로 보아 다른 사용자에게 할당된 session값으로 추측된다.
    6. Burp Suite를 통해 앞자리 85806689698982266 28, 뒷자리 171464206 1468 ~ 171464206 3425 사이의 hijack_cookie 값을 넣어 로그인 요청을 시도한다.

💉 SQL 인젝션 (SQL Injection)

SQL Injection (intro)-9

  • 정답: ' or '1' = '1 혹은 Smith' or '1' = '1
  • 풀이: '1' = '1' 은 true이고 or 로 where절에 묶여 있으므로 where 절은 항상 true가 된다.

SQL Injection (intro)-10

  • 정답: Login_Count = [임의의 숫자], User_id = [임의의 숫자] or 1=1
  • 풀이: where 절을 true로 만들기 위해 or 1=1 사용.

SQL Injection (intro)-11

  • 정답: Employee Name: [아무 문자], Authentication TAN: [아무문자]' or '1'='1
  • 풀이: auth_tan 바로 뒤의 '에 맞게 '를 짝지어 빈 문자열과 auth_tan을 비교하는 구문을 만들고, 맨 마지막에 '를 처리하기 위해 or '1'='1 를 사용하여 where 절이 항상 true가 되게 만듦.

SQL Injection (intro)-12

  • 정답: Employee Name: [아무 문자], Authentication TAN: '; update employees set salary = 99999 where last_name = 'Smith';--
  • 풀이: 맨 앞의 '에 맞게 '; 를 붙여 기존 쿼리문을 완성시키고, 그 뒤에 salary를 update하는 쿼리문을 추가한 뒤 마지막 '--로 주석 처리한다.

SQL Injection (intro)-13

  • 정답: ';drop table access_log; --
  • 풀이: 입력한 문자열을 비교하는 쿼리문이 사용됐을 것으로 생각하여 '; 로 기존 쿼리문을 완성시키고, 그 뒤에 table을 지우는 쿼리문을 추가한 뒤 나머지 기존 쿼리문을 --로 주석 처리한다.

SQL Injection (advanced)-3

  • 정답: '; select * from user_system_data;--
  • 풀이: 입력한 문자열을 비교하는 쿼리문이 사용됐을 것으로 생각하여 '; 로 기존 쿼리문을 완성시키고, 그 뒤에 user_system_data table의 모든 데이터를 가져오는 쿼리문을 추가한 뒤 나머지 기존 쿼리문을 --로 주석 처리한다.

SQL Injection (advanced)-5

(내용 없음)


✒️ 크로스 사이트 스크립팅 (Cross-Site Scripting - XSS)

Cross Site Scripting-7

  • 정답:
</p><script>alert('test')</script><p>