-
[Bugbounty Study] #OTP Bypass Account TakeoverStudy/Bugbounty Study 2021. 2. 8. 19:49
# Otp Bypass Account Takeover
logicbomb-1.medium.com/otp-bypass-account-takeover-to-admin-panel-ft-header-injection-16f2982a0136
타겟은 정확하게 밝히지 않았고, OTP 인증이 구현되어 있는 온라인 교육 플랫폼이라는 것만 밝혔다.
OTP 기반의 로그인이 있었고, 이에 Brute Force 공격을 시도하였다.
이를 통해 IP 주소를 기반으로 속도 제한이 걸려 있다는 것을 알아냈다.
IP 주소 기반의 속도 제한은 다양한 Client IP 주소 또는 Upstream Server IP 주소로 우회가 가능하다.
IP 주소 기반 속도 제한 우회 방법?
Client가 웹 서버에 접근할 때 Proxy Server를 거쳐가는 경우,
Proxy Server는 X-Forwarded-For Header를 이용하여 웹 서버에 Client IP 주소를 전달하는데,
이때, 해당 헤더를 이용하여 IP 주소를 속일 수 있다.
[X-Forwarded-For Header] https://grini25.tistory.com/212Burp Suite를 이용하여 아래와 같이 Brute Force 공격을 수행하였다.
Intruder 기능의 Cluster bomb를 이용하여 X-Forwarded-For 값과 OTP 값을 Brute Force 하였다.
이를 통해 OTP 기반의 로그인을 성공하였다.
로그인 성공을 통해 헤더 인젝션이 가능하다는 것이 분명해졌다.
IP 접근 제어 또는 속도 제한을 우회하는 것 외에 이것을 이용하는 다른 가능성도 있을 수 있었다.
원작자는 이전 회사에 있을 때 WordPress 관리자 인터페이스를 Client IP 주소를 기반으로 내부 IP로만 제한했었던 일을 떠올렸는데, 그 작동은 다음과 같았다.
허용된 내부 IP 주소가 헤더 값으로 입력되면,
실제 화이트리스트 목록에 없는 IP 주소와의 연결 및 제한된 페이지나 API 엔드 포인트로의 접속이 허용되더라도 Proxy는 X-Forwarded-For 값을 전달한다.만약 X-Forwarded-F:127.0.0.1 헤더를 설정한 경우,
서버는 내부 IP에서 접속하고 있다고 판단하여 제한된 콘텐츠에 접근하는 것을 허용한다.
그러나 이를 위해서는 운이 좋아서 제한된 페이지를 찾을 수 있어야 하는데, 일반적으로 관리자 페이지/관리자 패널/민감한 엔드포인트는 찾기 어렵다.
타겟의 블로그 페이지(wp-admin)로 WordPress 관리자 인터페이스에 HTTP 요청을 시도하여 성공하였다.
(타겟 사이트가 WordPress 기반의 웹 사이트였던 것으로 추측된다.)이제 Directory Brute Force를 수행하고 IP 기반의 제한된 엔드포인트가 더 있는지 찾는 것은 시간문제이다.
이와 같은 엔드포인트를 찾는데 유용한 리소스를 찾아 Burp Suite의 Intruder에 활용하였다.[유용한 리소스]
https://github.com/ziadab/AdminBomber/blob/master/AdminBomber.py
https://github.com/s0md3v/Breacher/blob/master/paths.txt다행히도 타겟의 CMS 카탈로그에는 HTTP 요청이 가능한(/cms/_admin/logon.php) 관리자 페이지가 하나 있었고, 이와 함께 수평 권한 상승에 성공하였다. (포털에 로그인하기 위해 권한이 한 단계 상승한 것은 아니다.)
예방 방법
신뢰할 수 있는 Proxy Server(또는 Load Balancers)의 IP 주소 목록을 지정한다.
만약 해당 목록에 없는 IP 주소에서 요청이 올 경우 X-Forwarded-For Header를 버린다.
Nginx는 다음과 같은 작업을 수행한다.
마지막 항목부터 시작하여 각 항목을 확인하여 신뢰할 수 있는 IP 주소 목록에 있는지 확인한다.
만약 신뢰할 수 있는 목록에 존재하지 않으면, 해당 항목 앞에 있는 모든 항목을 버린다.'Study > Bugbounty Study' 카테고리의 다른 글
[Bugbounty Study] #Account Takeover (0) 2021.03.06 [Bugbounty Study] #iCloud _ Stored XSS (0) 2021.02.23 [Bugbounty Study] #Vimeo _ SSRF (0) 2021.01.27 [Bugbounty Study] #GitHub _ Account Takeover (0) 2021.01.20 [Bugbounty Study] #Cross Domain Referrer Leakage (0) 2021.01.13 댓글