Security Note
article thumbnail
반응형


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


 

what-is-my-ip 문제

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

분석

HAProxy 모듈

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

  •  출처 : 위키백과

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

HAProxy 모듈 설정 파일

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

listen http-in
    bind *:8000
    option forwardfor
    server app app:3000

app.py 소스 분석

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

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)

 

마치며

Hint

1) HAProxy 모듈

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

2) 리눅스 명령어

문제풀이 삽질

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

풀이과정

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

반응형
profile

Security Note

@긴면봉

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