Security Note
article thumbnail
반응형


드림핵 what-is-my-ip 문제 풀이 과정 서술


 

1. what-is-my-ip 문제

Client IP를 출력하는 페이지에서 flag 출력이 목적

2. 분석

2.1. HAProxy 모듈

1) HAProxy는 여러 서버에 대해 요청을 확산시키는 TCP 및 HTTP 기반 애플리케이션들을 위해 고가용성 로드밸런서와 리버스 프록시를 제공

  •  출처 : 위키백과

2) 본 문제는 HAProxy 모듈이 연동되어있음(공격 구간)

2.2. HAProxy 모듈 설정 파일

설정 파일을 보니 X-Forwarded-For 헤더를 사용할 수 있음

<bash />
listen http-in bind *:8000 option forwardfor server app app:3000

2.3. app.py 소스 분석

소스 분석 결과 flag 함수에서 Client IP를 받아와 서버에서 명령 실행

<python />
def flag(): // ClientIP 헤더에서 받아오기 user_ip = request.access_route[0] if request.access_route else request.remote_addr // ClientIP 값으로 OS 명령 실행(run) try: result = run( ["/bin/bash", "-c", f"echo {user_ip}"], capture_output=True, text=True, timeout=3, ) return render_template("ip.html", result=result.stdout)

 

3. 마치며

3.1. Hint

1) HAProxy 모듈

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-Forwarded-For

2) 리눅스 명령어

3.2. 문제풀이 삽질

1) remote_addr 를 우회할 수 있나?
2) access_route 를 우회할 수 있나?
3) 소스 분석 중 haproxy 연동 확인
4) Haproxy 모듈 연동 확인

3.3. 풀이과정

넣기과정을 기술하기엔 너무 쉬워져 작성하지 않음

반응형
profile

Security Note

@긴면봉

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!