1-day 분석을 하기로 마음 먹고 주제를 Http Request Smuggling으로 잡았는데 공부하다 보니 전에 Smuggling 문제가 있던게 생각나서 풀어보려한다.
해당 워게임 사이트는 팀 H4C에서 운영하는 사이트라고한다.
서버에 접속하면 위와 같은 문자열만 리턴하고 끝이다. 문제에서 주어진 코드 파일을 살펴보자..
main.py
main 코드이다.
from flask import Flask
app = Flask(__name__)
flag = open("FLAG").read()
@app.route('/', methods=['GET', 'POST'])
def main():
return 'Hello! Our Team is TeamH4C'
@app.route('/guest', methods=['GET', 'POST'])
def guest():
return 'ref. jfrog'
@app.route('/flag', methods=['GET', 'POST'])
def get_flag():
return flag
if __name__ == '__main__':
app.run()
코드를 보면 /flag에 접근하면 flag를 얻을 수 있다. 접근해보자.
403에러가 뜬다.
haproxy.cfg
global
daemon
defaults
mode http
timeout client 50000
timeout server 50000
timeout connect 50000
frontend web
bind *:8000
http-request deny if { path_beg /flag }
http-request deny if { path_beg // }
default_backend websrvs
backend websrvs
http-reuse always
server srv1 flask:5000
해당 서버는 haproxy 서버를 사용하는 것 같다. 위 파일을 haproxy 서버 설정 값들인 것 같다. haproxy 서버를 통해 front-end 서버와 back-end 서버를 구분해주는 것 같다. 위 파일에서 /flag에 대한 요청은 거부되고 있으므로 이를 우회 해야된다. smuggling 문제이므로 패킷 변조를 통해 접근해보자.
문제 도커 파일을 보면 haproxy 2.2.16을 사용하기 때문에 해당 취약점이 보고된 내용을 구글링하여 접근하면 될 것 같다.
CL.CL 취약점을 이용해서 익스를 했다!