web security academy 25

2026. 3. 23. 12:40ㆍ보안/Web security Academy

Lab: DOM XSS in AngularJS expression with angle brackets and double quotes HTML-encoded

 

(This lab contains a DOM-based cross-site scripting vulnerability in a AngularJS expression within the search functionality.

AngularJS is a popular JavaScript library, which scans the contents of HTML nodes containing the ng-app attribute (also known as an AngularJS directive). When a directive is added to the HTML code, you can execute JavaScript expressions within double curly braces. This technique is useful when angle brackets are being encoded.

To solve this lab, perform a cross-site scripting attack that executes an AngularJS expression and calls the alert function.)

 

이 연구실에는 검색 기능 내 AngularJS 표현식의 DOM 기반 사이트 간 스크립팅 취약점이 포함되어 있습니다.

AngularJS는 인기 있는 JavaScript 라이브러리로, ng-app 속성(AngularJS 지시어라고도 함)을 포함하는 HTML 노드의 내용을 스캔합니다. 지시어를 HTML 코드에 추가하면 이중 컬리 브레이스 내에서 JavaScript 표현식을 실행할 수 있습니다. 이 기술은 앵글 괄호를 인코딩할 때 유용합니다.

이 실험실을 해결하기 위해 AngularJS 식을 실행하고 경고 함수를 호출하는 사이트 간 스크립팅 공격을 수행합니다.

 

1. 웹 페이지를 확인을 해보니 검색 기능이 있습니다 이를 기준으로 alert를 발생시켜보도록 해보겠습니다 

 

 

일단 angularJS라는 단어를 처음 들어 검색을 해보닌깐 구글에서 개발한 양방향 데이터 바인딩을 통한 웹 개발용 SPA 프레임 워크입니다 현재는 지원 종료를 했고 2세대라고 볼 수 있는 Angular를 지원하고 있습니다 AngularJS는 자바스크립트기반이며 Angular는 Typescript기반입니다 AngularJS에 특징은 np-라는 접두사 사용이며 Angular는 [],()기호를 사용합니다 

지원이 종료가 되어서 CSTI( Client-Side Template Injection )( { { } } ) 취약점에 노출이 된 상태라서 일반적으로 볼 수 있는 상태는 아닌것같다 Angular는 현재도 지원하고 있기때문에 강력한 보안을 자랑한다

 

그럼 이제 {{}}라는 취약점을 알았으니 이것을 기반으로 확인을 해봅시다

 

 

검색창에 {{7*7}}를 입력을 하니 49라는 검색 결과가 나왔다 

 

그럼 {{alert(1)}}를 하면 될것같다

막혔습니다 찾아보니 AngularJS는 {{alert(1)}}같은 직접적인 함수 호출을 샌드박스라는 형태로 막아두고 있다고 합니다 

이렇게 직접 공격이 아닌 우회 공격을 해야하는 상황입니다 

 

AngularJS에 우회 공격을 찾아보니 사용자객체를 불러서 alert를 시키면 된다고 합니다 

 

  • $on: 이벤트를 처리하는 함수 (가장 많이 쓰임)
  • $eval: 코드를 실행해주는 함수
  • $root: 최상위 스코프 객체
  • constructor: 아까 보신 것처럼 $scope 그 자체의 생성

객체에는 이런 종류들이 있어 

 

{{$on.constructor('alert(1)')()}} or {{constructor.constructor('alert(1)')()}}

를 사용하면 된다

 

그리고 ''따옴표가 필요한가 라는 의문이 들어 찾아보니 

 

왜 따옴표(Quotation Marks)가 필요한가? AngularJS 샌드박스는 직접적인 함수 호출을 차단한다. 따라서 실행하고자 하는 페이로드를 문자열(' ') 형태로 전달하여 샌드박스의 감시를 우회한 뒤, Function 생성자를 통해 해당 문자열을 다시 동적 코드로 변환하여 실행하는 기법이 필요하다.

 

 

 

 

이상입니다

 

감사합니다

 

'보안 > Web security Academy' 카테고리의 다른 글

web security academy 27  (0) 2026.03.25
web security academy 26  (0) 2026.03.24
web security academy 24  (0) 2026.03.22
web security academy 23  (0) 2026.03.20
web security academy 22  (0) 2026.03.18