호기심은 많은 공격자의 주요 동기이며 의미론적 URL 공격이 좋은 예입니다. 이러한 유형의 공격에는 주로 흥미로운 것을 발견하기 위해 URL을 편집하는 것이 포함됩니다. 예를 들어, 사용자 chris가 소프트웨어의 링크를 클릭하여 //m.sbmmt.com/ 페이지에 도달하면, 당연히 그는 사용자의 가치를 바꾸고 무슨 일이 일어나는지 보려고 할 수도 있습니다. 예를 들어, 그는 다른 사람의 정보를 볼 수 있는지 확인하기 위해 //m.sbmmt.com/을 방문할 수 있습니다. GET 데이터의 조작은 POST 데이터의 조작보다 약간 더 편리할 뿐이지만 노출로 인해 특히 초보 공격자의 경우 공격이 더 자주 발생합니다.
대부분의 취약점은 특별히 복잡한 원인보다는 감독으로 인해 발생합니다. 숙련된 많은 프로그래머는 위에 설명된 URL을 신뢰하는 것의 위험성을 쉽게 인식하지만 다른 사람이 이를 지적할 때까지 이를 깨닫지 못하는 경우가 많습니다.
의미론적 URL 공격과 취약점이 어떻게 간과될 수 있는지 더 잘 보여주기 위해 사용자가 로그인하여 자신의 이메일을 보는 것이 주요 기능인 웹 메일 시스템을 고려해 보십시오. 사용자 로그인을 기반으로 하는 모든 시스템에는 비밀번호 검색 메커니즘이 필요합니다. 일반적인 접근 방식은 공격자가 알 가능성이 없는 질문(예: 컴퓨터 브랜드이지만 사용자가 질문을 지정하고 스스로 대답할 수 있으면 더 좋을 것임)을 묻는 것입니다. 비밀번호는 등록된 이메일 주소로 전송됩니다.
웹 메일 시스템의 경우 등록 시 이메일 주소가 지정되지 않을 수 있으므로 질문에 올바르게 답한 사용자에게 이메일 주소를 제공하라는 메시지가 표시됩니다. (해당 이메일 주소로 새 비밀번호가 전송되는 동안 대체 이메일 주소 정보도 수집될 수 있습니다.) . 다음 양식은 새 이메일 주소를 요청하는 데 사용되며 해당 계정 이름은
CODE:
형식의 숨겨진 필드에 저장됩니다.
아아앙수신 스크립트인 Reset.php는 어떤 계정의 비밀번호가 재설정되는지, 새 비밀번호가 어떤 이메일 주소로 전송될지 등 모든 정보를 가져오는 것을 볼 수 있습니다.
사용자가 올바른 질문에 답한 후 위의 양식을 볼 수 있다면 해당 사용자가 Chris 계정의 법적 소유자라고 가정할 이유가 있는 것입니다. chris@example.org를 대체 이메일 주소로 제공하는 경우 제출 후 다음 URL로 이동됩니다:
CODE:
//m.sbmmt.com/
URL은 브라우저 표시줄에 나타나므로 여기까지만 본 사람이라면 누구나 사용자 및 메일 변수가 수행하는 작업을 쉽게 확인할 수 있습니다. 이를 확인한 사용자는 php@example.org가 매우 멋진 주소라고 생각하여 다음 링크를 방문하여 시도했습니다.
CODE:
//m.sbmmt.com/
Reset.php가 사용자가 제공한 정보를 신뢰한다면 이는 의미론적 URL 공격 취약점입니다. 이 경우 시스템은 PHP 계정에 대한 새 비밀번호를 생성하여 chris@example.org로 보내므로 Chris는 PHP 계정을 성공적으로 훔칠 수 있습니다.
세션 추적을 사용하면 위의 상황을 쉽게 피할 수 있습니다.
CODE:
아아앙
위의 예에서는 일부 세부 정보(예: 보다 자세한 이메일 정보 또는 합리적인 비밀번호)가 생략되었지만 사용자가 제공한 계정에 대한 신뢰가 부족함을 보여 주며 더 중요한 것은 사용자가 응답했는지 여부를 저장하기 위해 세션 변수를 사용한다는 것입니다. 질문이 정확함($_SESSION['verified']) 및 질문에 올바르게 답변한 사용자($_SESSION['user']). 애플리케이션의 취약점을 방지하는 데 중요한 것은 바로 이러한 불신입니다.
이 예는 완전히 허구가 아닙니다. 2003년 5월 Microsoft에 의해 발견되었습니다. Passport의 취약점에서 영감을 얻었습니다. //m.sbmmt.com/을 방문하세요. 구체적인 예, 토론 및 기타 정보를 확인하세요.
위 내용은 PHP 보안 시맨틱 URL 공격 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!