위의 문제를 다음과 같은 방법으로 풀어보았다.
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 |