-
인가(Authorization) 취약점 실습(1~5)IT/웹 해킹 2024. 2. 22. 19:25
[이 블로그는 해킹 공부하면서 가볍게 정리용으로 기록 및 내 생각을 끄적여 두기 위한 블로그(라 쓰고 일기라 읽는)이다.]
- 목차
- CTF 1번 시나리오
- 실습
- CTF 2번 시나리오
- 실습
- CTF 3번 시나리오
- 실습
- CTF 4번 시나리오
- 실습
- CTF 5번 시나리오
- 실습
1. CTF 1번 시나리오
계정 정보를 입력하여 미사일 발사를 할 수 있는 화면으로 접근 후 버튼을 클릭하여 발사하는 구조이다. 그러나 버튼이 없다?! 이때 HTML코드를 확인하여 혹시 숨겨진 코드가 있는지, 주석 처리가된 코드가 있는지 확인해서 파라미터 응답 값을 변조하여 문제를 해결해 보자.
2.실습
1) 로그인 화면에서 전달받은 계정 정보를 입력하여 로그인 시도를 한다.
2) 버튼이 없는 핵미사일 발사 페이지가 나온다. 관리자만 이용 가능하다는 메시지가 보인다.
3) 이때 burp suite의 패킷을 확인해보면 응답 패킷에서 HTML 코드 중 버튼이 주석처리된 것을 확인할 수 있다. 아마도 인증을 거쳐 관리자의 권한을 얻으면 페이지가 주석처리가 없는 페이지로 이동하는 모양인가보다.
4) 프록시의 intercept를 이용하여 파라미터 응답 값을 변조하여 보자.( 주석처리된 코드에서 주석 <-- --> 삭제)
5) 응답 값을 변조 후 포워딩을 해보면 화면에 빨간색 발사 버튼이 나타난 것을 볼 수 있다.
6) 발사 버튼을 눌러 플랙 그 획득!
3. CTF 2번 시나리오
로그인을 하여 핵미사일 시스템에 접근하니 이번에는 발사 버튼이 존재한다. 그러나 버튼을 누르면 권한이 없다는 메시지가 뜨는데 아무리 버튼을 눌러봐도 프록시에서 패킷은 들어오지 않고 있다.?! 이 사실은 권한 자체를 서버에서 입력받아 검증하는게 아니라 프론트엔드에서 검증을 한다는 것을 의미한다. 그럼 HTML 및 JavaScript코드를 확인하여 응답값을 변조해서 플래그를 얻어보자.
4.실습
1) 로그인 후 뜨는 페이지에는 핵미사일 발사 버튼이 있는 페이지에 접근이 되었다.
2) 발사 버튼을 누르니 관리자 권한이 없다며 알림창이 뜬다. 근데 아무리 알림창을 눌러봐도 프록시에서는 패킷이 보이지 않는다. 그럼 이 사실은 프론트엔드에서 관리자 권한을 처리한다는 의미이다.
3) 프록시 응답을 확인해보면 goMenu라는 함수를 사용하여 버튼이 작동한다는 사실을 알게 되었다. 그리고 이 함수는 자바스크립트를 통해 작동하고 있다.
4) 로그아웃 버튼을 눌러보면 자바스크립트 패킷이 나오는데 코드를 잘 살펴보니 click에 인자를 받고있고 로그아웃 버튼도 동일하게 같은 값을 받고 있는것을 보았을 때 sfUser로 받고 있는것을 추측하였고 goMenu()함수에 인자값을 admin으로 추가해보았다.
5) burp suite의 intercept를 이용하여 goMenu에 admin을 넣고 포워드를 해보았다.
6) 발사 버튼을 누르니 플래그 획득!
5. CTF 3번 시나리오
로그인하여 게시판에 들어가면 공지사항이 있는데 글쓰기 버튼이 없다. 즉 일반 계정은 글을 쓸 수 없는 환경이다. 이때 공지사항 게시글은 읽을 수 있다. burp suite에서 확인 시 공지사항 버튼을 누르면 notice_list.php로 이동되고 현재는 notice_read.php 이다. 그럼 추측을 해보면 쓰기 페이지는 write가 아닐까? 이때 프록시에서 응답을 보면 공지사항 버튼의 이름은 writeBtn으로 원래는 글쓰기 버튼이었나보다. 그럼 응답 값을 변조해 공지사항 버튼을 누르면 list가 아니라 write로 가게 만들어 보겠다.
6.실습
1) 로그인 후 게시판 페이지를 들어가니 공지사항이 제목인 게시글 하나가 보인다.
2) 게시글에 접근을 하여 읽어보았더니 해킹은 나쁜거라 배우지말라고 하신다... 깔끔하게 무시하면서 burp suite의 패킷을 살펴보았다.
3) writeBtn이라 이름이 명시된 이 버튼을 누르면 게시판 리스트로 이동되어지는 자바스크립트의 속성이다. 원래는 글쓰기 버튼이었나보다. 아마도 리다이렉트 되는 주소만 바꿔준 것 같으니 나도 똑같이 write 페이지 이름을 추측해 burp suite의 intercept로 응답 값을 수정해 포워딩해보겠다.
4) 자바스크립트의 속성인 location.href의 주소를 내가 추측한 글쓰기 페이지 파일로 수정하여 응답 변조를 포워딩 해보았다. 결과는!?!?
5) 아무일도 일어나지 않았다...!
는 거짓말이고, 공지사항 버튼을 클릭하면 내가 의도한 글쓰기 페이지로 이동되었다.
6) 제목과 내용을 작성 후 create 버튼을 누르면 플래그 획득!
7. CTF 4번 시나리오
이번에는 게시판에 공지사항 글을 권한이 없어 읽을 수가 없는 상황이다. 대신 내가 게시글을 작성할 수 있고 내 게시물은 읽을 수 있다. 이때 관리자가 작성한 게시글의 id값이 url상에서 노출되어있고 이를 이용하여 파라미터 응답 변조를 시도해 플래그를 획득할 것이다.
8.실습
1) 로그인을 하고 게시판에 들어와보니 제일 첫 번째 게시글이 admin 계정으로 올린 flag 임시 저장 글이 보인다. 냄새가 난다 냄새가...플래그 냄새가
2) flag 임시 저장 글을 클릭하여 접근해보니 권한이 없다는 메시지 창이 뜬다. 이때 id값이 42로 노출된 채로 URL창에 표시된다.
3) 게시글을 직접 작성하여 보자 게시글 제목은 abcdefg 로 작성하였다.
4) 글 작성에 성공했다는 메시지가 뜨면서 게시판 리스트로 이동되었다.
5) 내 게시글을 읽으니 응답에 각 버튼을 눌렀을 때 이동 경로가 뜬다. 수정 버튼을 누르면 id가 82번인 게시물을 수정할 수 있게 뜬다. 이걸 이용하여 관리자 게시물의 id값인 42번을 넣어보면?!
6) burp suite의 intercept를 이용하여 파라미터 응답을 변조해보자. 이때 이렇게 id값 뿐만 아니라 read를 입력했을 때는 그대로 관리자 권한이 없다며 읽기에 실패하고 만다.
7) 그러나 update.php?id=42를 입력하여 포워딩하였더니 관리자 게시물의 수정페이지로 접근이 되었다. 자바스크립트로 경고 메시지를 띄우고 list.php로 리다이렉트 하는 코드를 응답 값에서 지우고 다시 포워딩을 해보았다.
이미 관리자 게시물의 수정페이지 응답값에 접근을 하여 게시물의 내용이 다 보이는 것을 볼 수 있다, 8) 관리자 게시물 읽기 성공! 플래그 획득!
9. CTF 5번 시나리오
로그인 후 마이페이지를 들어가보면 아이디에는 placeholder로 sfUser가 입력되어있고 나머지 칸에도 placeholder로 입력되어있다. 그러나 url창 mypage.php?user=sfUser로 아이디를 파라미터 값을 받고 있는게 노출이 되어있다. 이때 관리자의 계정으로 파라미터 값을 변조 한다면? 관리자 계정의 마이페이지가 뜨면서 플래그가 나오게 될 것이다.
10.실습
1) 로그인 후 마이페이지에 접근 후 개인정보 입력칸에 placeholder로 아이디 및 다른 글자들이 채워져 있다. 아마도 문제를 풀면 Nothing Here...에 플래그가 나오지 않을까? 하는 추측을 했었다. 이때 URL을 자세히 보면 user의 파라미터 값을 아이디로 받고 있는게 확인이 되었다.
2) 파라미터 값을 admin으로 바꾸자 바로 개인정보 창이 admin으로 바뀌면서 플래그가 나온 것을 볼 수 있다. 짐작대로 두 번째 칸에 플래그가 나왔다. 하지만 HTML의 input태그 속성 중 placeholder라서 value값이 아니라 플래그의 끝자리까지 알 수 가 없다. 이때 프록시를 쓰거나 개발자 도구를 이용하여 확인하면 되는데 나는 개발자 도구를 이용하겠다.
3) 개발자 도구를 이용해 값을 찍어 보았더니 바로 플래그 전체 글자가 나왔다. 플래그 획득!
'IT > 웹 해킹' 카테고리의 다른 글
모의해킹 스터디가 끝난 후 (0) 2024.03.21 네이버 버그 바운티를 제출해보았다. (0) 2024.03.20 인증(Authentication) 취약점 실습(1~4) (0) 2024.02.22 인증과 인가(Authentication and Authorization) (0) 2024.02.22 File Download 취약점 실습2 (0) 2024.02.21