Bypass Sandbox trong AngularJS để thực hiện các cuộc tấn công XSS

Trong bài viết này, chúng ta sẽ có cái nhìn tổng quan về các vấn đề bảo mật trong AngularJs bao gồm những kiến thức cơ bản nhất về AngularJs...

Trong bài viết này, chúng ta sẽ có cái nhìn tổng quan về các vấn đề bảo mật trong AngularJs bao gồm những kiến thức cơ bản nhất về AngularJs cũng như cơ chế làm việc bên trong sandbox của AngularJS (trong các phiên bản khác nhau).

GIỚI THIỆU

AngularJs là một framework JavaScript được sử dụng để tạo ra các ứng dụng giàu tính năng trên Internet (RIA – Rich Internet Application), bao gồm cả ứng dụng Web App và ứng dụng Mobile App. Nó cho phép lập trình viên tạo ra những mẫu client-side dựa trên kiến trúc Model-View-Control (MVC). Angular JS sử dụng các biểu thức tích hợp nhằm tạo ra HTML template. Những biểu thức này được dùng để lấy ra hoặc hiển thị trên HTML. Chi tiết về Angular JS các bẹn có thể xem tại đây:

KIẾN THỨC NỀN TẢNG CỦA ANGULARJS

Để có thể sử dụng AngularJS an toàn, chúng ta cần hiểu cơ bản về cách hoạt động của Angular JS như thế nào. Hãy cùng tạo ra một ứng dụng đơn giản và tìm hiểu thông qua các đoạn code.Để tạo ra một ứng dụng, ta cần định nghĩa tên module và các thành phần điều khiển controllers nơi mà ta sẽ lấy dữ liệu ra và hiển thị trong ngữ cảnh HTML (view). Ứng dụng sẽ nhận đầu vào một chuỗi bất kì.
Lưu đoạn code sau vào tệp tin app.js
Tệp tin index.php có nội dung như sau:
Như ta thấy trong đoạn code trên, sử dụng biểu thức {{ }} để lấy ra dữ liệu. Tuy nhiên có một biến khác có tên “alert(1)” có thể hiển thị đúng như hàm alert(). Vậy có phải tất cả các biểu thức được thực thi trong ngữ cảnh JavaScript thì những hàm JavaScript cũng có thể thực thi hay không?
AngularJS sử dụng đối tượng scope để kiểm tra sự tồn tại của biến định nghĩa trong biểu thức. Trong trường hợp này, biến scope “{{alert(1)}}” không được định nghĩa., AngularJS sẽ kiểm tra “alert” có phải là một thuộc tính của đối tượng scope không thông qua hàm con trỏ sau
Do “alert” không được định nghĩa nên giá trị của nó sẽ được gán bằng noop – không thực hiện hành động gì tiếp theo và sẽ không hiển thị. Điều này tương tự với các hàm toàn cục của JavaScript như document.cookie hoặc document.domain.

Sandbox Bypass Trong AngularJs 1.0.8

Như ở phần trước, ta không thể từ đối tượng scope thực thi bất cứ hàm toàn cục nào. Trong phần này chúng ta sẽ thực hiện “thoát” khỏi đối tượng scope và thực thi hàm tùy ý JavaScript thông qua khai thác ‘Gareth Hayes’.
Đối tượng scope cũng khống như các đối tượng JavaScript khác và có một hàm khởi tạo
Hàm khởi tạo có thể được dùng để tạo ra một hàm và ta có thể đưa code JavaScript vào trong ngoặc tròn ( ) để thực thi như sau
Tương tự ta sẽ dùng hàm khởi tạo của hàm khởi tạo đối tượng của đối tượng scope để gán đoạn code như sau {{constructor.constructor(‘alert(0)’)()}}
Kết quả đoạn code alert(0) được thực thi với sự giúp đỡ của hàm khởi tạo.

Sandbox Bypass trong AngularJs 1.2.19

Phiên bản này đã cài đặt một số kiểm tra bảo mật trước khi dữ liệu được đưa vào. Thực chất bao gồm việc kiểm tra các thuộc tính khác nhau của một đối tượng, kiểm tra các hàm thuộc tính như CALL, APPLY, BIND….
Hãy cùng xem đoạn code bypass phiên bản 1.2.18 của Jan Horn
Chi tiết về đoạn khai thác trên như sau:
Đoạn code sử dụng thuộc tính CALL để thực thi đoạn mã JavaScript. Trong phiên bản 1.2.19 một hàm mới được đưa ra nhằm kiểm tra các thuộc tính khác nhau trong đối tượng hàm được sử dụng để bypass trong 1.2.18
Cùng tiếp tục tìm hiểu bypass phiên bản này của “Mathias Karlsson”
Đầu tiên khai thác thay đổi hàm toString bằng cách gán thuộc tính mới “call” và khi hàm khởi tạo toString được gọi bởi hàm sort, toSctring sẽ bằng call và thực thi alert(1).

Sandbox Bypass trong AngularJs 1.4.7

Trong phiên bản này AngularJs đã đưa một trình biên dịch tích hợp và sử dụng kĩ thuật AST (Abstract Syntax Tree) nhằm mã hóa biểu thức và thực thi hàm an toàn. Khi thử khai thác giống phiên bản 1.2.19 chúng ta nhận được thông báo lỗi như sau
Tại sao lại có thông báo lỗi và tại sao ta không thể trỏ đến đối tượng hàm nữa ?
Như đoạn code ở trên, khởi tạo của một hàm khởi tạo lại là một hàm khởi tạo, do đó dòng “if (obj.constructor === obj)” trong hàm ensureSafeObject chặn thành công các khai thác bằng cách kiểm tra nếu đối tượng của hàm khởi tạo không phải là một đối tượng.
Đoạn mã khai thác của Gareth Heyes tiếp tục bypass AngularJS như sau:
{{‘a’.constructor.prototype.charAt=[].join;$eval(‘x=1} } };alert(1)//’);}}
Đầu tiên  ghi đèn hàm charAt bằng hàm join, đồng nghĩa với viếc khi ta gọi hàm chartAt, nó sẽ nối giá trị của mỗi kí tự thay vì trả về chỉ mục index của kí tự đó
Phân tiếp theo của khai thác là sử dụng vòng lặp để lấy ra token
Kết quả trả về
Mã JavaScript tùy ý được thực thi
Tài liệu tham khảo

COMMENTS

Tên

.:: Connect Trojan ::.,111,.htaccess,2,0-day,3,10000+ Latest Carding Dorks 2020 and 2021,1,2017,2,Add-on,16,Affiliate,1,Anotador,1,AutoIT,17,BackDoor,1,Bán Sách,13,banhangonline,1,Bảo Mật,206,Bất Động Sản Tại Tiền Giang,5,Bestsellers,13,Binder,1,blog,31,Blogger,4,Blogger Template,1,Botnet,3,Brute,1,Bug Bounty,1,Bypass,11,camera,1,ceh,1,Châu Tinh Trì,2,Checked,6,Chrome,21,Code,5,coin hive,1,Coin-Hive,2,CoinHive,1,Connect Trojan,342,Connect Trojan ::.,1,Cổ Tích,2,Crack,3,Crypto,5,CSRF,5,CSS,2,Cuộc Sống,1,Dau tu,8,DDoS,6,Designer,1,Dich vụ,1,DNS,4,Download,2,du-an,3,DVD LUMION Tiếng Việt của anh Dũng Già Pro,1,Đam Mỹ,1,điện,1,Đồ Họa,215,Đô Thị,16,e11.me,1,ebook,19,ebook free,295,eBook Phệ Hồn Nghịch Thiên,1,eBook Thịnh Thế Địch Phi,1,Encrypt,1,Encryption,1,epub,76,epub [Tiên hiệp],1,ET-Logger,1,exploit,23,Exploitation,1,Extractor,2,facebook,69,FireFox,15,Flood,2,Forensic,7,full prc,2,game,177,Gerador,3,Gerenciador,1,Get Root,3,GHDB,3,Giả Tưởng,1,giaitri,1,Google,15,H&Y Shop,2,Hacker,3,Hacking,16,Hacking and Security,6,Hacking Tools,36,Hành Động,3,He Thong Site Phim,25,Hijacking,6,Hình Sự,1,hivecoin.hive coin,1,Hỏi Xoáy Đáp Xoay Trên VTV3,1,HTML,1,https,1,Huyền Ảo,92,Hướng dẫn Internet cơ bản,1,IFTTT,703,Imgur,2,Infographic,1,Information Disclosure,1,Internet Explorer,3,IT News,39,J2TeaM,29,J2TeaM Tools,9,JavaScript,6,Javascript Injection,3,Juno_okyo's Blog,23,Khóa Học,61,Khóa Học kiếm tiền online với accesstrade,5,khoá học miễn phí,28,Khóa học Photoshop,19,Khóa học sử dụng mã độc và phòng chống mã độc,2,Khoa Huyễn,6,khuyến mãi,16,kiemhiep,9,Kiếm Hiệp,20,Kiếm Tiền MMO,40,kiếm tiền rút gọn link,1,KilerRat,1,Kinh Dị,24,Kinh Dị - Ma,4,Kinh Doanh,73,kinhdi,1,kinhdoanh,5,KRACK Attacks,1,Lãng mạn,1,lazada,1,Lắp đặt trọn gói camera tận nhà giá rẻ tại Gò Công,1,Lập trình,2,Lịch Sử,5,Linux,1,Local Attack,2,Logins/Cadastro,1,Lỗi Web,1,Lược Sử Hacker,2,Mã Giảm Giá,2,Mã Hóa,48,Malware,3,Master-Code,31,Máy Tính,1,Metasploit,2,Microsoft,4,mobile hacking,2,monero,1,Movie,25,MySQL,1,NEW PRODUCTS,19,NGHỆ THUẬT ẨN MÌNH,13,ngontinh,10,Ngôn Tình,151,nhà đất,1,Nhà Đất Gò Công,1,Nhân Vật Lịch Sử,2,Nhật Bản,1,Nhựt Trường Group,1,NjRat,5,Nước,1,open redirect,1,Oracle,1,Path Disclosure,2,pdf,76,Pen-Test,6,Pentest Box,9,Phan mem Internet,1,phanmem,23,phanmemdienthoai,3,phanmemmaytinh,10,phần mềm,12,Phim 18,2,Phim 2012,1,Phim 3D,1,Phim Âm Nhạc,2,Phim Bộ,39,Phim Chiến Tranh,5,Phim Dã Sử - Cổ Trang,6,Phim Đài Loan,6,Phim Đề Cử,4,Phim Hài Hước,26,Phim Hàn Quốc,33,Phim HD Chất Lượng Cao,5,Phim Hoạt Hình,2,Phim Hot,1,Phim Hồng Kông,20,Phim HQ,2,Phim Kinh Dị,8,Phim lẻ,4,Phim Mới 2011,2,Phim Mới 2012,1,Phim Mới 2015,1,Phim Nhật Bản,4,Phim SD,3,Phim Thái Lan,6,Phim Thần Thoại,4,Phim Tình Cảm,35,Phim Trung Quốc,37,Phim Truyền Hình,19,Phim Viễn Tưởng,1,Phim Võ Thuật,36,Phim Xã Hội Đen,1,Phishing,5,PHP,16,Plugin,1,Port,1,post mẫu,1,prc,77,Programming,15,Python,1,Quảng Cáo,1,rat,457,Recovery,3,Remote Code Execution,1,Remote Desktop,1,Reverse Engineering,6,review,3,rút gọn link,1,sach,49,Sách,41,Sách Nghệ Thuật Sống,12,sách nói,1,Sách Tâm Linh,1,Sách Tiếng Anh,2,sachiep,2,sachnoi,1,Sản Phẩm,1,Sắc Hiệp,16,Scam,1,Scanner,10,Security,66,SEO,5,share,1,Shell,5,shop,1,Social Engineering,4,Software,22,Source Unity,1,SQL injection,21,Sức Khỏe,1,Symlink,3,Tài Chính,1,Tài chính cá nhân,2,Tài Liệu,1,Tản mạn,7,Taudio,2,Tâm lý xã hội,1,tấn công,1,Testador,1,Thái Lan,2,Tham Khảo,3,thamkhao,11,them,1,Thiệp Cưới,1,Thiết Kế Web,33,Thời Trang,2,Thủ Thuật Hacking,53,Thuyết Minh,1,tienhiep,5,Tiên Hiệp,123,Tiểu Thuyết,94,tiki,3,TIL,8,Tin Tức,53,Tips,39,tool,3,Tool Hack,14,Tools,9,Tổng Hợp,1,Tricks,26,Trinh thám,1,trojan original,48,Trọng sinh,11,Trộm mộ,1,Trung Quốc,1,Truyện,3,Trương Định,110,Tu Chân,2,TUTORIALS,124,Twitter,1,Ung_Dung,4,Upload,1,usb,1,vanhoc,11,văn học,6,vBulletin,7,video,16,Vietsub,1,Việt Nam,4,Virus,4,Võ Thuật,3,Võng Du,5,Vulnerability,19,Web Developer,15,webmau,5,WHMCS,3,WiFi,2,wiki lỗi máy tinh,1,wiki lỗi NTG,3,Windows,12,WordPress,43,Write-up,11,XSS,16,Yahoo,1,yeah1offer,1,youtube,11,
ltr
item
NhutTruong.Com - Chia sẻ kiến thức miễn phí: Bypass Sandbox trong AngularJS để thực hiện các cuộc tấn công XSS
Bypass Sandbox trong AngularJS để thực hiện các cuộc tấn công XSS
http://securitydaily.net/wp-content/uploads/2017/04/angularjs_1.png
NhutTruong.Com - Chia sẻ kiến thức miễn phí
https://www.nhuttruong.com/2017/05/bypass-sandbox-trong-angularjs-e-thuc.html
https://www.nhuttruong.com/
https://www.nhuttruong.com/
https://www.nhuttruong.com/2017/05/bypass-sandbox-trong-angularjs-e-thuc.html
true
7607280272436897486
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content