Change하기 전에 버프스위트 Intercept is on 후에 비밀번호를 변경한다.
passowrd = metamong 변경 완료.
Submit 후 비밀번호가 변경 되었는지 확인해본다.
이렇게 링크를 클릭하면 비밀번호 변경 요청을 특정 서버로 보내는 역할을 한다.
Change전에 버프스위트 Intercept is on
security level : high에서는 현재 비밀번호가 없으면 비밀번호 변경이 되지 않도록 하고 있다.
이 코드는 보안 수준이 MEDIUM 또는 HIGH일 때 작동한다.
- !isset($_REQUEST["token"])
- 요청에 token이 설정되어 있는지 확인한다. 만약 설정되어 있지 않다면 조건문은 참이 된다.
- !isset($_SESSION["token"])
- 세션에 token이 설정되어 있는지 확인합니다. 만약 설정되어 있지 않다면 조건문은 참이 된다.
- $_REQUEST["token"] != $_SESSION["token"]
- 요청에 포함된 token 값이 세션에 저장된 token 값과 일치하는지 확인한다. 일치하지 않으면 조건문은 참이 된다.
위 조건문이 참인 경우, 토큰이 유효하지 않거나 요청에 토큰이 포함되어 있지 않다는 것을 의미한다. 따라서 이 조건을 만족하는 경우, 해당 코드 블록 내에서 CSRF 방어가 수행된다.
이 코드는 보안 수준이 MEDIUM 또는 HIGH일 때 랜덤 토큰을 생성하여 세션에 저장한다.
- if($_COOKIE["security_level"] == "1" or $_COOKIE["security_level"] == "2")
- 쿠키에 저장된 보안 수준이 "1" (MEDIUM) 또는 "2" (HIGH) 인지 확인한다.
- $token = sha1(uniqid(mt_rand(0, 100000)));
- 랜덤한 값을 생성한다. mt_rand(0, 100000)는 0부터 100000 사이의 랜덤 정수를 생성한다.
- uniqid() 함수는 고유한 ID를 생성한다.
- sha1() 함수는 이러한 값을 해시하여 토큰을 생성한다.
- $_SESSION["token"] = $token;
- 생성된 토큰을 세션에 저장한다.
CSRF 방어를 위해 고유한 토큰을 생성하고 이를 세션에 저장하는 역할을 한다. 이렇게 생성된 토큰은 요청 시 검증을 위해 사용된다.
1 EUR를 보냄으로써 999 EUR가 남았다.
총 3회 Submit
현재 잔액 998 EUR에서 1 EUR를 총 3회를 보냄으로써 995 EUR가 남았다.
반대로 '-'를 붙이면 돈이 늘어난다.
위에 코드처럼 CSRF 토큰을 사용하여 각 요청에 대해 고유하고 예측 불가능한 값을 포함하여 요청의 유효성을 검사하여 CSRF 공격에 대한 방어를 강화한다.
'Study records > Web hacking' 카테고리의 다른 글
[Beebox] ShellShock 취약점(CVE-2014-6271) (0) | 2024.07.25 |
---|---|
[Beebox] PHP CGI RemoteExecution(CVE-2012-1823) (0) | 2024.07.25 |
[Beebox] 기능 수준의 접근 통제 누락(디바이스 접근 제한/서버 측 요청 변조) (0) | 2024.07.24 |
[Beebox] 기능 수준의 접근 통제 누락(디렉터리 리스팅/파일 삽입) (0) | 2024.07.18 |
[Beebox] 인코딩 복호화/HTML5 웹 저장소/중요 정보 텍스트 파일 저장 (0) | 2024.07.18 |