이메일 템플릿에 HTML 주입

Jan 09 2023
회사를 대신하여 이메일을 보내시겠습니까? 여러 대기업에서 쉽게 포상금을 받을 수 있는 이 취약점을 발견한 방법은 다음과 같습니다. 안녕 사냥꾼.
크레딧 : 핀터레스트

회사를 대신하여 이메일을 보내시겠습니까? 여러 대기업에서 쉽게 포상금을 받을 수 있는 이 취약점을 발견한 방법은 다음과 같습니다.

안녕하세요 사냥꾼 입니다. 여기서 목표는 회사를 대신하여 이메일 주소 에서 콘텐츠 및 HTML 템플릿 을 변경/사용자 정의할 수 있는 기능을 사용 하여 이메일을 보낼 수 있도록 하는 것 입니다.

이러한 취약점의 영향은 무엇입니까?

이 취약점의 영향은 상당할 수 있습니다. 공격자는 사용자를 사기성 사이트(피싱 등)로 리디렉션하거나 계정에서 바람직하지 않은 작업을 수행하도록 강요하기 위해 플랫폼에 대한 사용자의 신뢰를 이용합니다. 프로그램은 일반적으로 낮음과 보통 사이에서 이 취약점의 심각도를 고려합니다 .

어떻게 작동합니까?

HTML 주입은 애플리케이션이 사용자 입력을 수락한 다음 입력을 HTML에 포함시키는 취약점입니다. 공격자는 사용자 입력에서 HTML을 삽입하여 악성 코드가 응용 프로그램에서 생성된 전체 템플릿에 포함되도록 할 수 있습니다.

이는 사용자 입력이 제대로 정리되지 않았기 때문입니다. 수정하기는 매우 쉽지만 특히 이 공격 벡터는 버그 사냥꾼의 기쁨을 위해 매우 자주 레이더 아래로 이동합니다.

개발자를 위한 유명한 황금률: 절대 사용자 입력을 신뢰하지 마십시오.

다양한 공격 벡터 및 익스플로잇 식별

이 취약점을 식별하기 위해 가장 먼저 해야 할 일은 이메일을 보내는 애플리케이션에서 기능을 찾는 것입니다. 대부분의 애플리케이션에는 회사 팀에 요청을 보낼 수 있는 "문의하기" 섹션 또는 "도움말" 섹션이 있습니다. 이러한 기능은 가장 기본적이며 목록이 완전하지 않으며 응용 프로그램의 특성에 따라 메일을 보내는 다양한 기능을 찾을 수 있습니다.

이러한 기능이 발견되면 다음과 같은 몇 가지 기준 이 있는지 테스트하고 확인해야 합니다 .

회사의 기술 직원에게 요청(도움 요청)을 보낼 수 있는 양식을 예로 들어 보겠습니다.

[1] 양식 제출 시 이메일(양식에 명시된 이메일 주소 또는 요청을 보낸 계정에 연결된 이메일 주소)을 받나요?

그렇지 않은 경우 시간이 좀 걸릴 수 있으므로 확인하십시오. 그러면 더 이상 볼 필요가 없습니다. 템플릿에 코드를 삽입하기 전에 해당 템플릿이 여전히 존재해야 합니다.

[2] 양식을 제출할 때 이메일을 받으면 양식/쿼리에 이메일 주소를 지정할 수 있습니까?

취약점을 악용하려면 다른 사람을 대상으로 할 수 있어야 하므로 문제의 양식을 통해 내가 선택한 이메일을 지정할 수 있거나 양식을 제출하기 위해 연결되어 있어야 이메일이 자동으로 다음 주소로 전송됩니다. 이메일 주소는 연결된 계정에 바인딩됩니다.

이 경우 선호하는 프록시에서 요청을 가로채어 HTTP 요청(POST 원칙)에 이메일 주소가 없는지 확인하고 원하는 이메일 주소로 변경해 보십시오.

[3] 양식에 제공된 정보 중 일부가 수신된 이메일에 반영되었습니까?

양식에 입력한 값을 반영하는 이메일의 예

그렇지 않은 경우 계정에 연결된 경우 사용자 이름, 성 또는 이름과 같은 일부 개인 정보가 이메일에 반영되어 있는지 확인하십시오.

이 경우 반영된 정보를 수정하고 거기에 페이로드를 입력해 보십시오. 문제의 정보가 응용 프로그램에서 해석되지 않더라도 이메일에서 해석될 수 있으며, 이를 2차 주입 이라고 하며 양식의 사용자 입력에서 직접 주입이 수행되지 않고 다른 곳에 기록된 정보에서 주입이 수행됩니다. , 예를 들어 계정에서.

그렇지 않으면 코드를 삽입하거나 필터를 우회할 수 없습니다.

[4] 마지막 단계는 해당 템플릿에 의해 해석될 HTML 코드를 삽입하는 것입니다.

앞서 언급한 바와 같이 이러한 종류의 취약점은 종종 눈에 띄지 않으며 일부 애플리케이션에는 프런트엔드 또는 백엔드 측 필터가 없으며 HTML 코드를 포함하는 간단한 페이로드로 충분합니다.

vul<strong>ne</strong>rable

다음은 태그를 포함하는 HTMLi입니다.
,

뿐만 아니라 링크에 버튼 모양을 제공하는 css

때때로 개발자는 특수 문자가 포함된 양식을 제출하는 것을 불가능하게 만드는 프런트 엔드 필터에 집중했습니다. 거기서 멈추지 말고 임의의 값으로 양식을 제출하고 프록시에서 요청을 가로챈 다음 프록시에서 직접 페이로드를 입력하십시오. 이것은 때때로 현상금을 향한 마지막 보루인 전선의 모든 보호 장치를 날려버릴 것입니다. 후면에도 보호 기능이 있는 경우 처음 몇 분 동안 포기하지 말고 필터를 우회하십시오. 방법론은 XSS 취약점과 동일합니다.

특정 문자에 대한 필터를 우회하는 데 문제가 있습니까? 보세요 :https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS%20Injection/README.md

처음 쓰는 글이었는데 읽어주셔서 감사합니다. 질문이 있으시면 언제든지 알려주세요.

내 트위터 계정:https://twitter.com/blank_cold