<문제 링크>
https://dreamhack.io/wargame/challenges/26/
csrf-1
여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. CSRF 취약점을 이용해 플래그를 획득하세요. Reference Client-side Basic
dreamhack.io
<나의 풀이>
이 문제는 강의의 해설을 따라가며 해결했다.
코드에 대한 자세한 해설은 웹해킹로드맵/stage5/[함께실습]CSRF/2.웹서비스 분석에 있으니 이번 writeup은 코드 분석 없이 문제 풀이만 작성했다.
코드 분석 결과 이 문제의 취약점은 XSS공격을 방지하는 장치를 했지만 CSRF공격은 방지하지 못했다는 점이다.
1. 문제 링크 접속, 취약점 발생 여부 확인
문제에서 주어진 링크에 접속하면
왼쪽과 같은 화면을 볼 수 있다.
문제 해결을 위해 가장 먼저 HTTP응답 수신을 위한 웹서버가 필요해 드림핵 툴즈 서비스를 이용했다.
이것을 통해 나의 URL이 생성되었고 이 주소에 대한 접속 기록을 확인할 수 있다.
문제에서 주어진 링크로 접속하고 취약점 발생 여부 확인을 위해 <img>태그를 이용해 내가 생성한 url에 접속하는 코드를 넣었다. /vlun?param=<img src="...">부분이 공격코드이다.
공격 코드를 입력하니 의도한 대로 이미지가 출력되는 것을 볼 수 있다.
공격 후 내가 생성한 url의 접속 기록을 확인하니 get 메소드 요청이 온 것을 볼 수 있었다.
이를 통해 CSRF 취약점이 존재한다는 것을 확인했고, 같은 방법으로 문제를 해결하기로 했다.
2. 공격 코드 작성, 전송 통해 플래그 획득
문제 링크 페이지 flag에 들어가면 공격 코드를 전송할 수 있다.
이번에도 마찬가지로 img태그를 사용하는데, 이 웹페이지 코드에서 /admin/notice_flag 페이지를 방문하려고 할 때 userid가 admin인지 검사하는 코드가 있기 때문에 이 내용도 공격 코드에 포함시켜야 한다.
전송할 공격 코드는 아래와 같다.
<img src="/admin/notice_flag?userid=admin" />
공격 코드를 성공적으로 전송하면 good 팝업 창이 뜨고,
home으로 돌아가 memo에 들어가면 플래그를 획득하게 된다.
flag : DH{11a230801ad0b80d52b996cbe203e83d}
<풀이 요약>
1. 문제 링크 접속, 취약점 발생 여부 확인(테스트 베드 이용)
2. 공격 코드 작성, 전송 통해 플래그 획득
<이 문제를 통해 배운 것>
테스트 배드 활용 방법(드림핵 툴즈)
테스트 배드 통한 취약점 발생 여부 확인
웹페이지 코드에서 요구하는 조건에 맞춰 공격코드 작성
로컬 호스트에서만 접근이 가능하도록 작성한 페이지도 다른 IP의 사용자가 CSRF 공격을 통해 원하는 정보나 권한에 접근할 수 있다는 사실
'해킹 공부 > 웹 해킹' 카테고리의 다른 글
Dreamhack_image-storage(파일 업로드 공격) (0) | 2022.02.13 |
---|---|
Dreamhack_command-injection-1 (0) | 2022.02.13 |
Dreamhack_csrf-2(CSRF 취약점) (0) | 2022.02.05 |
dreamhack xss-2(XSS 방화벽 우회) (0) | 2022.01.30 |
dreamhack xss-1(XSS 취약점) (0) | 2022.01.30 |