what-is-my-ip

개요
- 서버는 한정된 자원을 가지고 있기 때문에, 트래픽이 몰리면 부하가 발생하고 서비스 가용성이 저해된다. 이러한 문제를 해결하기 위해 2가지 방법을 사용해 볼 수 있다.
- (1) Scale-Up : 서버의 사양을 높이는 방법이다. 간단하고 효과적이지만 비용이 발생한다.
- (2) Scale-Out : 여러 대의 서버로 트래픽을 균등하게 분산하는 방법이다.
- HAProxy는 기본적으로 클라이언트와 서버 사이에 위치한 리버스 프록시이기 때문에 백엔드 서버(
app:3000) 입장에서는 모든 요청이 HAProxy에서 오는 것처럼 보인다. haproxy.cfg파일을 살펴보면 서버로 들어오는 http 트래픽에 대하여forwardfor옵션이 있는데 HAProxy가 클라이언트의 실제 IP 주소를 백엔드 서버로 전달하기 위해 사용하는 설정이다.

소스코드 분석
app.py
- app.py 파일을 살펴보면
request.access_route[0]값을 배시 쉘 명령어 인자로 사용한다. - 명령어 실행 결과는
result변수에 담아져ip.html파일이 렌더링 될 때 함께 넘어간다.

- https://flask.palletsprojects.com/en/stable/api/#flask.Request.access_route
access_route속성은 forwarded 헤더로 전달된 값이었다.

ip.html파일이 렌더링 될 때 함께 전달된result (명령어 실행 결과)도 함께 출력된다.- 따라서, forwarded 헤더에 임의의 명령어를 삽입하면 RCE 공격이 가능해 보인다.

- 요청 헤더에
X-Forwarded-For헤더를 추가하여 디렉토리 리스팅에 성공했다.- (Payload) “;ls”

- (Payload) “;ls”
- 쨘! 플래그 탈취도 성공했다.

🐛.. 🐛.. 🐛..