본문 바로가기

Study records/Web hacking

[Beebox] 크로스 사이트 요청 변조(비밀번호 변경/비밀번호 힌트 변경/계좌 이체)

 

 

Change하기 전에 버프스위트 Intercept is on 후에 비밀번호를 변경한다.

 

Copy URL 후 Drop

passowrd = metamong 변경 완료.

 

URL 붙여넣기

 

Submit 후 비밀번호가 변경 되었는지 확인해본다.

 

 

기존 비밀번호를 입력했더니 로그인 실패

 

변경한 비밀번호로 로그인 성공

 

 

<a href="http://192.168.56.108/bWAPP/csrf_1.php?password_new=metamong& password_conf=metamong&action=change">download</a>

 

이렇게 링크를 클릭하면 비밀번호 변경 요청을 특정 서버로 보내는 역할을 한다.

 

 

 

 

Change전에 버프스위트 Intercept is on

 

 

 

 

 

security level : high에서는 현재 비밀번호가 없으면 비밀번호 변경이 되지 않도록 하고 있다.

 

 

csrf_3.php

이 코드는 보안 수준이 MEDIUM 또는 HIGH일 때 작동한다.

  1. !isset($_REQUEST["token"])
    • 요청에 token이 설정되어 있는지 확인한다. 만약 설정되어 있지 않다면 조건문은 참이 된다.
  2. !isset($_SESSION["token"])
    • 세션에 token이 설정되어 있는지 확인합니다. 만약 설정되어 있지 않다면 조건문은 참이 된다.
  3. $_REQUEST["token"] != $_SESSION["token"]
    • 요청에 포함된 token 값이 세션에 저장된 token 값과 일치하는지 확인한다. 일치하지 않으면 조건문은 참이 된다.

위 조건문이 참인 경우, 토큰이 유효하지 않거나 요청에 토큰이 포함되어 있지 않다는 것을 의미한다. 따라서 이 조건을 만족하는 경우, 해당 코드 블록 내에서 CSRF 방어가 수행된다.

 

 

csrf_3.php

이 코드는 보안 수준이 MEDIUM 또는 HIGH일 때 랜덤 토큰을 생성하여 세션에 저장한다.

  1. if($_COOKIE["security_level"] == "1" or $_COOKIE["security_level"] == "2")
    • 쿠키에 저장된 보안 수준이 "1" (MEDIUM) 또는 "2" (HIGH) 인지 확인한다.
  2. $token = sha1(uniqid(mt_rand(0, 100000)));
    • 랜덤한 값을 생성한다. mt_rand(0, 100000)는 0부터 100000 사이의 랜덤 정수를 생성한다.
    • uniqid() 함수는 고유한 ID를 생성한다.
    • sha1() 함수는 이러한 값을 해시하여 토큰을 생성한다.
  3. $_SESSION["token"] = $token;
    • 생성된 토큰을 세션에 저장한다.

CSRF 방어를 위해 고유한 토큰을 생성하고 이를 세션에 저장하는 역할을 한다. 이렇게 생성된 토큰은 요청 시 검증을 위해 사용된다.

 

 

 

 

1 EUR를 보냄으로써 999 EUR가 남았다.

 

 

Copy URL

 

총 3회 Submit

 

현재 잔액 998 EUR에서 1 EUR를 총 3회를 보냄으로써 995 EUR가 남았다.

 

 

반대로 '-'를 붙이면  돈이 늘어난다.

 

위에 코드처럼 CSRF 토큰을 사용하여 각 요청에 대해 고유하고 예측 불가능한 값을 포함하여 요청의 유효성을 검사하여 CSRF 공격에 대한 방어를 강화한다.