[WU][Web]CyberTalents
Hành trình phá đảo cybertalents
Last updated
Was this helpful?
Hành trình phá đảo cybertalents
Last updated
Was this helpful?
Link chall:
Ctrl+U để xem source
Trong source có đoạn comment HTML username password để đăng nhập
Nhớ lại hint "Administrators only has the power to see the flag"
Sử dụng burpsuite để edit header request trường cookie từ role=support sang role=admin
Kết quả nhận ngay flag
Ctr+U xem source
Phát hiện 1 đoạn JS khá dài và khó đọc
Có thể đọc hiểu từ cái đoạn này luôn
Hoặc decode dễ xem hơn
user và pass là Cyber-Talent là done
Xem source
Một đoạn script lạ
Sử dụng decoder trên
Tiếp tục decode là có flag
Thấy input rồi in cái input đó ra thì nghĩ ngay đến XSS
Dùng input khác:
Bài này có thể dùng nhiều XSS payload khác nhau nhưng nhìn chung thì chỉ cần Alert thành công.
Lý do kỹ hơn thì xem source có 1 đoạn JS cần decode để đọc và có 1 đoạn:
JS bắt sự kiện alert rồi xuất flag qua alert trên (có thể debug đoạn code trên để lấy flag trực tiếp).
Xem source và phát hiện
Thử truy cập url /secret-admin
Tiếp tục Ctr+U xem source
Xóa attribute hidden hoặc vào trực tiếp file db.json để xem flag
Input là email type
Nhập đúng format
Dùng burpsuite bật proxy để chỉnh sửa gói tin gửi đi rồi đưa và repeater để debug cho tiện
Thử gửi không đúng format email
Xem validating phía server mạnh không
inject commad vào thử (payload: ;ls;@.)
Giải thích: %3b là dấu "chấm phẩy - ;" để thực hiện nhiều command trong linux có thể dùng ; || &&
Xem source
Được cho username password là Guest
Kết quả đoán trước được là bị access denied
Dùng brupsuite để kiểm tra gói tin gửi đi (vẫn đăng nhập là Guest) và cho vào repeater debug
Sửa lại cookie Authen là login=Admin sau khi encode: bG9naW49YWRtaW4%3D
Vào login và đăng nhập demo/demo theo hint đề bài.
Đăng nhập thành công và vào profile (edit lại header request)
Bắt được flag
Nhìn tổng quan, xem source không thấy gì thử robots.txt
Thêm param source vào url
Decode ra: Cyber-Talents. Đăng nhập thử
Có đoạn mã morse: ..-. .-.. .- --. -.--. .. -....- -.- -. ----- .-- -....- -.-- ----- ..- -....- .- .-. ...-- -....- -- ----- .-. ... ...-- -.--.-
Translated: FLAG(I-KN0W-Y0U-AR3-M0RS3)
Thêm param welcome vào url:
Thiếu gì thêm đó thôi!
Lúc đầu mình nghĩ local là local của server nên mình thử referer và cả x-forwarded-for kèm theo http://35.197.254.240/ nhưng không được.
LOCAL??? thế mình thử 127.0.0.1 thế nào
Mở challange bị chuyển hướng sang google
Hint từ đề: not pretty much many options. No need to open a link from a browser, there is always a different way
Dùng brupsuite. Từ "not pretty much many options" nghĩ xem thay đổi gì để có gì đó đặc biệt. Ví dụ như GET sang POST.
Decode đoạn script trên
flag: 2b323f9008ed771765cd2259d860baec
Ayya bài này thử hết robots.txt, flag.php, thêm param source, admin, user,... mà không có gì.
Mấy bài mà không để lại vết tích này thì mình dùng dirb để scan directory.
Vào link trên tải file HEAD có nội dung là 1 chuỗi rồi submit và decrypt xong submit nhưng vẫn wrong, thử vài thư mục/file khác nhưng không thấy gì.
Dùng wget -r http://3.126.138.80/maximum/.git để tải toàn bộ file và thư mục.
Xem 1 vài file:
NOTE: .git là thư mục lưu tất cả trạng thái, thông tin và tất tần tật về project của bạn.
.git is initialized by
git init
..git contains all information required for version control. If you want to clone your repo, copy .git is enough.
4 sub-directories:
hooks/ : example scripts
info/ :
exclude
file for ignored patternsobjects/ : all "objects"
refs/ : pointers to commit objects
4 files:
HEAD : current branch
config : configuration options
description
index : staging area
Here "object" includes:
blobs(files)
trees(directories)
commits(reference to a tree, parent commit, etc)
Check git status
Restore nội dung trước đó file flag.php theo command được hướng dẫn
Nhìn tổng quan, xem source, robots.txt không có gì bất thường
Đăng nhập thử với SQL injection
Done
Vào dạo quanh 1 vòng không thấy gì thôi thì quyết định dùng dirb để scan directory
Khôi phục lại tất cả và mở ra xem thử
Oh no không file nào chứa flag như bài trên. Hmmmm api.php có nhúng 1 file access.php mà không thấy đâu, maybe là file access.php đã bị xóa từ những lần commit trước đó nữa. Phải tìm hiểu thêm về .git để xem có thể làm gì?!!?!
Xem lại commit log
Commit gần nhất mình đã xem vậy thử xem commit thứ 2
Vừa hay ta đã có 3 file liên kết với nhau. Ghép lại cùng đọc và debug nào!
WORKFLOW: Flag trong api.php <- COOKIE api_key = $apikey = $access = bin2hex('this_is_top_secret') = 746869735f69735f746f705f736563726574
Gửi 1 request đến với cookie như trên tới api.php
Thử nhập tên mình vào
Thử vài cái thẻ script, img mà bị filter lọc nên dùng payload sau để XSS
Xem tổng quan thấy không gì đặc biệt. Thử 1 payload XSS vào input xem nó xuất ra gì
Tiếp theo thử thẻ scipt nhưng không được
Thử payload mà trigger onload cũng không có gì đặc biệt
Thử payload trigger onerror rồi alert thì thành công (không alert là không được).
Xem tổng quan thì trong source có mỗi cái link register bị hidden ra thì không thấy gì.
Vào signup.php đăng ký 1 tài khoản và đăng nhập ngay xem thế nào (không cho đặt tên là admin => đã có 1 username admin)
Trong lúc đăng nhập mình có thử cố sửa lại một số trường thành admin và userid=1
Mình thử nhiều lần sửa các trường sao cho giống admin nhưng không thành.
Vào setting edit profile để đổi password, mình cũng cố thử sửa các trường trước khi gửi đi (cứ gói tin nào gửi đi mình đều sửa userid=1)
Vậy là mình đã đổi pass thành công, thử đăng nhập với username/password là admin/admin.
GIẢI THÍCH: Theo cách suy nghĩ của mình thì session của mỗi user được lưu ở phía server thì khi đăng nhập hoặc reload lại trang đều sẽ được kiểm tra có trùng khớp giữa session lưu ở server và PHPSESSID trong cookie phía client không. Nhưng lúc đổi pass bằng cách nào đó ông dev này không kiểm tra session.
Nhìn tổng quan hong có gì để khai thác. Dùng dirb để scan directory của trang này.
Truy cập vào link xem thế nào.
Tra xem các thể loại vulr liên quan đến directory hoặc về file của nginx. Một keyword đặc biệt Directory traversal
GIẢI THÍCH: config nginx alias nếu không cẩn thận quên mất 1 dấu / sẽ là lỗ hổng để attacker tấn công khai thác. Cụ thể hơn sau url chưa directive define rõ thêm ../ sẽ đưa về thư mục gốc linux.
Dựa vào hint đề bài để đưa về nhà thì ta vào thư mục home để xem
Chall bảo mình thử search Admin hoặc Users gì đó thì cứ thử
Nhập Admin mà Forbidden :< Ctrl+U lên xem source
Search Momen thử
Thêm param show với giá trị True/False thử
Thêm trường Referer và các giá trị Cookie mà source cần vào
Giải thích về 2 giá trị của cookie flag và flag1, search keyword: Magic hashes php
Thêm param flag và sửa cookie flag thỏa yêu cầu thứ 3
Làm theo hint và bị dẫn dắt đi đủ thứ cảm xúc :)
Thay đổi liên tục các trường trong header request và method, cuối cùng
Đổi user-agent và vào từng file allow xem thôi
Xem tổng thể source hong thấy gì. Đăng ký rồi đăng nhập bằng proxy cũng không thấy gì đặc biệt
Share thử 1 post
Trong đầu nảy ra cái suy nghĩ do backend php echo chuỗi nhập vào nên mình sẽ thử RCE
Đem lỗi đó đi search thì mình biết rằng đấy là lỗi của Sqlite chứ hong phải php @@ quàoooo
Vậy bắt đầu injection sqlite. Do là lần đầu nên vừa tìm hiểu vừa exploit :<
Ban đầu mình hình dung câu lệnh sqlite mà server dùng để insert idea của mình vào là: INSERT INTO <tblname>(col_value) VALUES('.$value.');
' || (<statment sqlite>) || ' : sẽ là payload hoàn hảo nhất để exploit.
Dấu 'nháy' đầu và cuối là để đóng và mở các values phía trước và sau.
Dấu 'double pipline' có nghĩa là nối chuỗi.
Dấu 'đóng/mở ngoặc' một cái thiết yếu trong syntax sql để bao khối lệnh khi thêm vào 1 khối lệnh
Tất cả các đúc kết trên mình tham khảo từ các nguồn sau:
Tiếp tục exploit để xem table xde43_users
vừa tìm được phía trên
Vẫn chưa thỏa flag (password của admin). Chắc do hidden :< kèm theo cái where
thử
Câu này tổng quan ban đầu mình nhìn không có gì đặc biệt, không tim ra được hướng đi
Click vào các mục của navbar thì mình có "linh cảm ông bà nhắc nhở" :"))))))))
Lúc trước code web php thì mình luôn pretty url chứ ít khi để nó cả query string vậy nên là mình khá là có nghi vấn với url đặc biệt ở chỗ truyền giá trị cho param home
Với nghi vấn này mình có tưởng tượng ra trong đầu:
Khi truyền vào giá trị trị gì cho home thì index.php sẽ gọi page với giá trị đó lên qua các
include\require\include_once\require_once
Thật may mắn khi tìm được vuln liên qua với keyword
LFI php
:
Vậy là nhận được source code dưới dạng base64. Giờ đi decode thôiiii
Chall này bị lậu :)))) làm quài không ra.. quá thất dzọng :< Ai đó chơi sửa challenge rùi bà con ơi
Ctr+U xem source cái!
Mở burpsuite, thêm trường Cookie
và đặt cookie PHPSESSID
vào rồi gửi đi!
Lựa cái thứ 3, sửa giá trị PHPSESSID
rồi gửi đi lần nữa
Thêm 1 cookie UserInfo
giá trị username server cần là admin
vào xem sao
Giờ nhìn lại thì nhớ ra đoạn code ajax phía trên post đến 1 file getcurrentuserinfo.php
với phương thức POST
và 1 param là PHPSESSID
với giá trị là chuỗi ký tự vừa lụm được ở trên.
Link chall:
Sử dụng online decoder sau
Link chall:
Link chall:
Link chall:
Link chall:
Link chall:
Link chall:
Link chall:
Link chall:
Link chall:
Link chall: '
Link chall:
quoted from
Link chall:
Link chall:
Câu này bắt đầu giống câu . Dùng wget và git status kiểm tra thôi!
Doc chính thống từ git để xem history commit:
Link chall:
Link chall:
Link chall:
Tham khảo:
Link chall:
Tham khảo:
Link chall:
Link chall:
Link chall:
Link chall:
Link chall: