본문 바로가기

드림핵

[드림핵 워게임] proxy-1

위의 문제를 다음과 같은 방법으로 풀어보았다.

 

 

 

1. 페이지를 확인한다.

페이지에 방문하면 뜨는 첫 화면이다. Raw Socket Sender (Done) 을 클릭해보았다.

 

 

host, port, Data를 입력할 수 있는 폼이 뜬다.

 

 

host, port, Data에 아무 값이나 넣어서 Send해보았다.

 

 

 timed out 에러가 뜬다.

 

 

 

2. 코드를 확인한다.

@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

코드를 확인해보면,

주소는 127.0.0.1 이 아니면 에러 메시지를 출력하고,

User-Agent 값은 Admin Browser가 아니면 에러 메시지를 출력하고,

DreamhackUser 값은 admin이 아니면 에러 메시지를 출력하고,

Cookie 값은 admin=true 여야 하고,

폼에서는 userid=admin이어야 하는 것을 알 수 있다.

이것을 참고하여 버프스위트에서 Request를 수정해 요청값을 보내보기로 한다.

 

 

 

3. 버프스위트를 준비시킨다.

버프스위트를 켜고 처음 뜨는 창에서 Next를 클릭한다.

 

 

그 다음에 뜨는 창에서 Start Burp를 클릭한다.

 

 

상단 메뉴바에서 Proxy 클릭 > 그 아래 메뉴바에서 Options 클릭

Proxy Listeners에서 Interface가 127.0.0.1:8080 으로 되어있는 것을 확인한다.

 

 

스크롤을 내리면 Intercept Client Requests Intercept Server Responses을 볼 수 있다.

초기 상태에는 Enabled 체크박스가 하나씩만 체크되어있는데, 나머지 체크박스도 모두 클릭하여 활성화해준다.

 

 

이제 메뉴바에서 Intercept로 이동한다.

Intercept is off 를 클릭해서 Intercept is on으로 바꿔주고,

Open Browser를 클릭해서 버프스위트 내에서 브라우저를 열어준다.

 

 

열린 브라우저의 주소창에 드림핵 페이지의 주소를 복사, 붙여넣기 해준다.

 

 

버프스위트에서 POST 요청을 잡을 수 있도록 아무런 데이터나 입력하여 Send 버튼을 클릭한다.

 

 

HTTP history 메뉴로 이동하면 POST 메소드로 기록된 히스토리를 확인할 수 있다. 해당 히스토리를 클릭하여 Request와 Response 데이터를 확인한다.

 

 

Request에서 우클릭하여 Send to Repeater를 클릭한다.

//

 

 

 

4. Request 데이터를 수정한다.

상단 메뉴바의 Repeater로 가서 데이터를 위와 같이 수정한다.

/admin : 코드 상에서 /admin으로 라우팅 되어 있었으므로 이와 같이 수정한다.

Content-Length: 12 : 맨 밑 줄에 'userid=admin'이라고 작성한 부분이 12자리이므로 이와 같이 수정한다.

User-Agent: Admin Browser : 앞서 살펴본 코드에서 User-Agent가 Admin Browser여야 한다고 되어 있었기 때문에 이와 같이 수정한다.

DreamhackUser: admin : 앞서 살펴본 코드에서 DreamhackUser가 admin이여야 한다고 되어 있었기 때문에 이와 같이 수정한다.

Cookie: admin=true : 앞서 살펴본 코드에서 Cookie가 admin=true이여야 한다고 되어 있었기 때문에 이와 같이 수정한다.

userid=admin : 앞서 살펴본 코드에서 폼에서 userid=admin이여야 한다고 되어 있었기 때문에 이와 같이 수정한다.

 

 

 

5. 수정한 데이터를 Raw Socket으로 보내어 익스플로잇 코드를 전송한다.

수정한 request 데이터를 Raw Socket Sender 의 Data 부분에 복사, 붙여넣기한다.

host는 코드에서 확인한 대로 127.0.0.1로 하고,

port 번호는 앞서 살펴본 코드에서는 생략하였으나 원본 코드의 맽 아래줄에 port가 8000으로 설정되어있으므로 8000으로 한다.

이와 같이 작성하여 Send를 클릭한다.

 

 

 

6. flag를 확인한다.

 

전송 결과에서 flag를 확인할 수 있다.

'드림핵' 카테고리의 다른 글

[드림핵 워게임] simple-ssti  (0) 2022.11.11
[드림핵 워게임] php-1  (0) 2022.11.11
[드림핵 워게임] blind-command  (0) 2022.11.11
[드림핵 워게임] web-ssrf  (0) 2022.11.06
[드림핵 워게임] file-download-1  (0) 2022.11.02