HTB Cyber Apocalypse 2021
Last updated
Was this helpful?
Last updated
Was this helpful?
=======================Caas=================================
nhìn vào source code ta thấy, chall được code theo MCV
flag ở /
và ta chỉ cần quan tâm tới 2 file đó là controllers và model
ở controller
có vẻ như đây là một bài command injection, nhân ip và gọi tới commandmodel
nhìn vào model file thì đúng thật, sử dụng curl tới ip mà ta có thể control. với curl ta có một option để đọc file và gửi đi
from stackover
vậy ta có thể đọc file flag ở root dir và gửi đi thôi. ez game
===========================MiniSTRyplace=====================
tiếp tục download source về và đọc code ta để tìm điểm exploit
ta thấy đây là một bài lfi đơn giản, chỉ filter ../
nhưng không đệ quy nên ta có thể sử dụng ....//
để bypass
flag ở root dir nên chỉ cần sử dụng payload sau để có flag
=========================Wild Goose Hunt==========================
nhìn vào source code ta thấy,
có vẻ đây là một bài sqli, và mình không thấy flag ở đâu trong source nên mình đoán flag ở trong db hoặc có thể là password, app sử dụng mongo db
với kinh nghiệm của mình thì đây có thể bị nosqli
lets try
$ne
nghĩa là not equal, vậy tới đây mình sử dụng regex để brute password
tới đây có thể viết 1 đoạn code ngắn để brute những chữ còn lại trong flag
=============================E.Tree===============================
bài này chỉ cho mỗi file xml
nhằm nói cho chúng ta biết cấu trúc của thằng này
nothing! hmmm
vì không có source nên mình phải fuzz để tìm ra thứ có ích cho mình
got it,
mình thậm chí có thể đọc được code của hàm search luôn, nó sử dụng thư viện lxml
để truy vấn xpath, vậy bài này có thể là xpath injection
tiếp tục fuzz kết hợp search gg về xpath injection mình tìm được một số payload
khá giống với sqli
tiếp tục thử cho tới khi mình tìm được payload sau
ừm huh
{"search":"John Doe' or substring(//military/district[2]//selfDestructCode,1,1)='C"}
flag chia làm 2 phần 1 ở district[2] và district[3] nên ta sẽ brute như blind sqli thôi
script sovlve
========================Extortion======================
bài này thì không có source nhưng mình có thể dễ dàng fuzz ra được bài này bị gì
lfi là rõ, nhưng lfi ở đây như thế nào?
thử với f=n3mo
ta biết được cú pháp include của chall như sau
include("files/".$_GET['f'])
vậy ta không thể sử dụng bất kỳ schema nào ở để để đọc source :(,
ngoài ra chall còn có một chức năng là send nhưng không biết send gì.
mình đoán ngay nếu biết send.php làm gì thì sẽ win this chall nhưng tại thời điểm đó mình không fuzz ra được send.php làm gì.
với những lfi mà không thể làm gì tiếp theo, mình mạnh dạn thử
session upload process
oke it work, nhưng trong khi thử cách này thì mình nhận ra chức năng của send.php, send.php nhận đầu vào của mình và lưu vào session, simple hơn so với cách trên. nên mình sẽ đi theo hướng của author trươc.
sau khi biết được chức năng của php là ghi vào session, mà session mặc định được lưu ở /tmp/sess_sessid
, vậy mình có write file + include? ngại gì mà không RCE?
send 2 request sau
and got RCE => done
casch2: sử dụng script trên của mình để rce
========================The Galactic Times==========================
bài này thì có source nên mình xác định được goal từ đầu
xss bypass csp :v
mình giải thích sơ về cách hoạt động của app như sau.
mỗi lần mình submit feadback thì nó sẽ lưu vào db đồng thời gọi bot.
ở route list ta thấy chỉ có thể access từ local hay nói cách khác chỉ bot mới có quyền access,
bot access /list
tức ta phải trigger xss ở đây.
take a look to csp
quen quá :v
sau khi chỉnh một chút để phù hợp với chall thì đây là payload cuối cùng của mình
vì csp chặn không cho fetch ra bên ngoài, nên mình sẽ phải sử dụng document.location và hơn nữa content của file alien.html quá dài nên mình phải cắt bớt để phù hợp với độ dài ở url.
=========================pcalc==========================
với những người chơi ctf thường xuyên thì đọc đề biết ngay liên quan tới eval
với source được cấp
mình sẽ tập trung focus chủ yếu vào đây.
thấy tối đa 100 char, đồng thời không được sử dụng a-z'"
đọc tới đây mình biết cách giải luôn là sử dụng ~
call được phpinfo thì call được system? right?
không hiểu sao khi sử dụng payload này thì mình lại không work, nên mình quyết định xài no space bằng toán tử $IFS thì work
payload cuối
(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DB%84%B6%B9%AC%82%D0%D5)
với những bài eval vơi blacklist lỏng lẻo như thế này thì mình nghĩ sẽ có nhiều hướng, hướng tiếp theo mình gợi ý là sử dụng blacktic cộng với octa
sử dụng blacktic kết hợp với eval để chạy thẳng bash cmd ở đây.
=======================emoji voting==========================
những bài có source như thế này thì mình khá thích vì mình có thể biết được mình đang đối mặt với thứ gì và đồng thời biết được mục tiêu của mình
biết người biết ta trăm trận trăm thắng
nhìn qua một lượt
flag ở trong table flag_random
ta có 2 query
dễ thấy query thứ 2 được truyền thẳng vào mà không có bất kỳ bộ lọc nào.
nên ta có thế sqli ở getEmojis
query chỗ mình control được là ở mệnh đề order by
mình sẽ khẳng định đây là một bài blind
search một lúc thì thấy một trang như sau
có cấu trúc rồi làm thôi.
đây là script cuối cùng của mình
====================bug report=========================
bài xss này gồm chủ yếu file đó là app.py và bot.py
app.py làm nhiệm vụ nhận url của mình truyền vào và gọi tới bot.py
behavior của bot như sau
đầu tiên set cookie là flag và get tới localhost, sau đó mới get tới url mà mình control
vì đây là một header chromeless nên nó có thể thực thi bất kỳ js nào, nhưng vì cors nên không thể nào lấy được cookie từ trang web trước đó được request, cụ thể ở đây là localhost.
stuck một lúc thì mình nhìn lại app.py
đúng là ctf lừa nhau là chủ yếu mà
ta có thể trigger xss ở đây
đến đây thì ez rồi, flag đc set ở cookie local, mà đồng thời ta có thể triger xss ở local => get flag so simple
ip=--data "@/flag"
ref:
`script-src `