Proxy-1

Peroro·2023년 2월 7일
0
post-thumbnail
post-custom-banner

문제: https://dreamhack.io/wargame/challenges/13/

위와 같은 페이지를 띄우고, Raw Socket Sender(Done)을 통해 들어가면 아래와 같은 창을 띄우게 된다.

해당 페이지는 raw socket을 생성해서 http 헤더를 보내는 페이지이다. 이 때 웹서버에서 원하는 host, port, data 값을 보내야 flag를 얻을 수 있다.

app.py의 일부를 보자

@app.route('/admin', methods=['POST'])
def admin():
    if request.remote_addr != '127.0.0.1':
        return 'Only localhost'

    if request.headers.get('User-Agent') != 'Admin Browser':
        return 'Only Admin Browser'

    if request.headers.get('DreamhackUser') != 'admin':
        return 'Only Admin'

    if request.cookies.get('admin') != 'true':
        return 'Admin Cookie'

    if request.form.get('userid') != 'admin':
        return 'Admin id'

    return FLAG

app.run(host='0.0.0.0', port=8000)

/admin에 접속할때 필요한 data이다. 첫번째로 localhost에서만 접속이 가능하고 Port도 8000, User-Agent = 'Admin Browser', DreamhackUser = 'admin', cookie 역시 admin의 쿠키가 필요하고 userid 역시 admin이어야 한다.

이에 맞게 data의 값을 넣어주자

host = 127.0.0.1
port = 8000
data =
POST /admin HTTP/1.1
User-Agent:Admin Browser
DreamhackUser:admin
cookie:admin=true
Content-Type: application/x-www-form-urlencoded
Content-Length: 12

userid=admin

일단 다른 패킷을 따라서 대충 쳐봤는데 안 됐던 이유 중 하나는 data에서 줄바꿈('\n')을 넣어서 오류가 났고, 두 번째는 content-type과 content-length가 필요한지 몰랐다. content-type은 클라이언트 브라우저로 자원을 보낼 떄 웹 서버가 보내고자 하는 자료형태를 말한다. 여기서는 HTML Form으로 보낸다. content-length의 경우 'userid=admin'의 길이를 의미한다.

profile
오늘 공부한 것을 올리는 공간 / 일주일에 글 3개 / 블로그 이전 : https://perorochan321.tistory.com/
post-custom-banner

0개의 댓글