[WU][Web]CyberTalents

Hành trình phá đảo cybertalents

LEVEL EASY

Admin has the power

Link chall: http://35.193.45.56/adminpower/

  • Ctrl+U để xem source

  • Trong source có đoạn comment HTML username password để đăng nhập

đăng nhập thành công
  • 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

edit header request
  • Kết quả nhận ngay flag

flag

This is Sparta

Link chall: http://35.193.45.56/sparta/

  • Ctr+U xem source

  • Phát hiện 1 đoạn JS khá dài và khó đọc

script
đã được format
  • Hoặc decode dễ xem hơn

decoded
  • user và pass là Cyber-Talent là done

flag

Iam Legend

Link chall: http://35.193.45.56/iamlegend/

  • Xem source

  • Một đoạn script lạ

  • Sử dụng decoder trên

eval decoder

Tiếp tục decode là có flag

jsfuck decoder - flag trong code
flag

Cool name effect

Link chall: http://34.77.37.110/cool-effect/

  • Thấy input rồi in cái input đó ra thì nghĩ ngay đến XSS

<h1 onclick="alert('1')">thien</h1>
  • Dùng input khác:

<body onload=alert(1)>hello</body>

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

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).

Encrypted Database

Link chall: http://34.77.37.110//encrypted-database/

  • Xem source và phát hiện

source
  • Thử truy cập url /secret-admin

phát hiện trang đăng nhập
  • Tiếp tục Ctr+U xem source

phát hiện 1 input và 1 file
  • Xóa attribute hidden hoặc vào trực tiếp file db.json để xem flag

flag

Newsletter

Link chall: http://18.192.3.151/newsletter/

  • Input là email type

  • Nhập đúng format

đú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

server báo contain @ và . tức có validating input
  • Xem validating phía server mạnh không

Param gửi đi oke thì validating khá yếu
  • inject commad vào thử (payload: ;ls;@.)

Thành công thực hiện command list

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 ; || &&

who am i?

Link chall: http://34.76.107.218/whoami/

  • 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

Gói tin thứ 2 có 1 đoạn cookie authen được encode bằng base64
decode cookie
  • Sửa lại cookie Authen là login=Admin sau khi encode: bG9naW49YWRtaW4%3D

yah! có flag

Blue Inc

Link chall: http://35.240.62.111/blue_inc/chal1/

  • 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)

thay thế demo bằng admin
  • Bắt được flag

flag

Easy Message

Link chall: http://35.240.62.111/easymessage/

  • Nhìn tổng quan, xem source không thấy gì thử robots.txt

có gì mới nè
  • Thêm param source vào url

có user pass nè, decode thôi
  • Decode ra: Cyber-Talents. Đăng nhập thử

  • Có đoạn mã morse: ..-. .-.. .- --. -.--. .. -....- -.- -. ----- .-- -....- -.-- ----- ..- -....- .- .-. ...-- -....- -- ----- .-. ... ...-- -.--.-

  • Translated: FLAG(I-KN0W-Y0U-AR3-M0RS3)

Cheers

Link chall: http://ec2-54-93-122-202.eu-central-1.compute.amazonaws.com/ch33r5/

php báo lỗi chưa khai báo biến welcome nè
  • Thêm param welcome vào url:

php báo lỗi thiếu gimme_flag nè
  • Thiếu gì thêm đó thôi!

xin flag thì cho flag

Got Controls

Link chall: http://35.197.254.240/gotcontrol/

đề bảo truy cập từ local machine hoặc local LAN
  • 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

OKEEEE có flag

Back to basics

Link chall: http://35.197.254.240/backtobasics'

  • 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.

packet 1
Trong respones thu được đoạn script
  • Decode đoạn script trên

đoạn code hàm ý là đảo ngược chuỗi ceab068d9522dc567177de8009f323b2
  • flag: 2b323f9008ed771765cd2259d860baec

Maximum Courage

Link chall: http://3.126.138.80/maximum/

  • 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.

hehe lụm được 1 cái check trước nha!
  • 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:

Hong có gì hết trơn

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 patterns

  • objects/ : 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)

quoted from https://stackoverflow.com/questions/29217859/what-is-the-git-folder

  • Check git status

có sự thay đổi: xóa file index.php và chỉnh sửa trong file flag.php
  • Restore nội dung trước đó file flag.php theo command được hướng dẫn

oke có flag - một chuỗi md5

Easy Access

Link chall: http://ec2-35-158-236-11.eu-central-1.compute.amazonaws.com/easy-access/

  • 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

' or '1'='1' #
  • Done

flag

COMRADE III

Link chall: http://ec2-35-158-236-11.eu-central-1.compute.amazonaws.com/comrade/

  • Vào dạo quanh 1 vòng không thấy gì thôi thì quyết định dùng dirb để scan directory

ra 1 cái url nè
  • Câu này bắt đầu giống câu Maximum Courage. Dùng wgetgit status kiểm tra thôi!

nhiều file bị xóa ghê
  • Khôi phục lại tất cả và mở ra xem thử

api.php
contact_process.php

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ì?!!?!

Doc chính thống từ git để xem history commit: https://git-scm.com/book/en/v2/Git-Internals-Git-References

  • Xem lại commit log

lịch sử có 2 commit
  • Commit gần nhất mình đã xem vậy thử xem commit thứ 2

vừa hay có file access.php rồi nè
access.php
  • 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

flag

x corp

Link chall: http://ec2-35-158-236-11.eu-central-1.compute.amazonaws.com/xcorp/

  • Thử nhập tên mình vào

nhập gì vào thì sẽ đưa vào alt của thẻ img
  • Thử vài cái thẻ script, img mà bị filter lọc nên dùng payload sau để XSS

<body onload=alert(1)></body>
cách mà nó nhúng vào
flag

uGame

Link chall: http://ec2-35-158-236-11.eu-central-1.compute.amazonaws.com/gamebook/

  • 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ì

thành công xss
  • 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).

flag

Silly Doors

Link chall: http://ec2-35-158-236-11.eu-central-1.compute.amazonaws.com/silly/

  • 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

header request chưa bị chỉnh sửa
  • 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)

sửa cho giống admin để hy vọng mình vừa đổi password của admin
OHHHH thành công nè
  • Vậy là mình đã đổi pass thành công, thử đăng nhập với username/password là admin/admin.

YOOOOO Ơn giời flag đây rồi

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.

Tham khảo: https://canvas.seattlecentral.edu/courses/937693/pages/10-advanced-php-sessions

bean

Link chall: http://52.28.216.196/bean/

  • Nhìn tổng quan hong có gì để khai thác. Dùng dirb để scan directory của trang này.

scan được 1 url bị direct nè
  • Truy cập vào link xem thế nào.

thật sự bị direct qua đây
  • 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.

Tham khảo: https://www.acunetix.com/vulnerabilities/web/path-traversal-via-misconfigured-nginx-alias/

phát hiện ra lỗi ngay
  • Dựa vào hint đề bài để đưa về nhà thì ta vào thư mục home để xem

Oh có file gì nè
Done! capture the flag

SkiddyKill3r

Link chall: http://52.28.216.196/skiddy/

  • 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

phát hiện hint khá mới
  • Search Momen thử

aaaa có hint
vào hint xem thử mà có vẻ thiếu gì đó
  • Thêm param show với giá trị True/False thử

ơn giời source code đây rồi
  • Thêm trường Referer và các giá trị Cookie mà source cần vào

có được 2 phần của flag rồi nè!

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

bắt đầu làm theo hint thôi
  • Làm theo hint và bị dẫn dắt đi đủ thứ cảm xúc :)

nhưng mình nghĩ flag nằm ở đây
nhớ lại cái hint này trong source rồi tiếp tục mò
  • Thay đổi liên tục các trường trong header request và method, cuối cùng

cái chính xác nhất :<
  • Đổi user-agent và vào từng file allow xem thôi

final flag đây rồi :>>>

LEVEL MEDIUM

share the ideas

Link chall: http://3.126.138.80/shareideas/

  • 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

<body onload=alert(1)>test</body> Ơ XSS ĐƯỢC NÈ @@
  • 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

sau 5p thử các loại không có gì nhưng cuối cùng cũng bung lỗi nè @@
  • Đ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

kết quả sau khi exploit

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

tìm ra được 1 account quyền user nè
  • Vẫn chưa thỏa flag (password của admin). Chắc do hidden :< kèm theo cái where thử

done flag hereeeeeeeeee!

Dark Project

Link chall: http://35.184.249.177/darkp/

  • 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ácinclude\require\include_once\require_once

Thật may mắn khi tìm được vuln liên qua với keyword LFI php :

php://filter/convert.base64-encode/resource=index
  • Vậy là nhận được source code dưới dạng base64. Giờ đi decode thôiiii

got the flag

Join Team

Link chall: http://18.192.3.151/join-team/

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

The Restricted Sessions

Link chall: http://34.77.37.110/restricted-sessions/

  • Ctr+U xem source cái!

1 đoạn jquery ajax khá hữu ích
  • Mở burpsuite, thêm trường Cookie và đặt cookie PHPSESSID vào rồi gửi đi!

được 1 hint mới toanh, vào file xem thử
được tận 3 chuỗi giá trị cookie :)) quẹo lựa luôn!
  • Lựa cái thứ 3, sửa giá trị PHPSESSID rồi gửi đi lần nữa

hint mới nữa nè
  • Thêm 1 cookie UserInfo giá trị username server cần là admin vào xem sao

ayyaaaa, không thành công rồi
  • 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.

oke done, giờ có username rồi, bỏ vào cookie UserInfo thôi!
ơn giời flag đây giồi!

Last updated

Was this helpful?