반응형
드림핵 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 모듈 연동 확인
풀이과정
넣기과정을 기술하기엔 너무 쉬워져 작성하지 않음
반응형