PicoCTF 2019 - Web Exploitation
Bài 1: Insp3ct0r
Đề bài:
Kishor Balan tipped us off that the following code may need inspection: https://jupiter.challenges.picoctf.org/problem/41511/ (link) or http://jupiter.challenges.picoctf.org:41511
Lời giải:
Sau khi truy cập vào link: https://jupiter.challenges.picoctf.org/problem/41511/
, ta sẽ nhấn Ctrl+U
để xem mã nguồn:
Ta thấy được:
<!-- Html is neat. Anyways have 1/3 of the flag: picoCTF{tru3_d3 -->
Như vậy, ta cần đi tìm 2/3 flag còn lại.
** Phân tích **
Ta nhận thấy rằng, trong source code này còn có 2 điểm nghi ngờ đó là:
Truy cập lần lượt vào 2 file này, ta sẽ lần lượt thu được:
t3ct1ve_0r_ju5t
và _lucky?832b0699}
Kết hợp 3 phần này được ta được flag là: picoCTF{tru3_d3t3ct1ve_0r_ju5t_lucky?832b0699}
Bài 2: where are the robots
Đề bài:
Can you find the robots? https://jupiter.challenges.picoctf.org/problem/36474/ (link) or http://jupiter.challenges.picoctf.org:36474
Lời giải:
Phân tích: Đề bài đặt chúng ta câu hỏi: where are the robots
. Vậy trước tiên ta sẽ lên mạng để tìm hiểu liệu robots là gì trong web ?
Search GG thì nó trả lời như thế nàu:
A robots. txt file tells search engine crawlers which URLs the crawler can access on your site. This is used mainly to avoid overloading your site with requests; it is not a mechanism for keeping a web page out of Google. To keep a web page out of Google, block indexing with noindex or password-protect the page.
Tạm dịch ra tiếng việt là:
Tệp robots.txt cho trình thu thập dữ liệu của công cụ tìm kiếm biết có thể truy cập vào những URL nào trên trang web của bạn. Tệp này chủ yếu dùng để ngăn trình thu thập dữ liệu gửi quá nhiều yêu cầu cho trang web; đây không phải là cơ chế để ẩn một trang web khỏi Google. Để ẩn một trang web khỏi Google, hãy chặn lập chỉ mục bằng noindex hoặc bảo vệ trang đó bằng mật khẩu.
Tạm thời, mình chưa hiểu cái robots.txt
này lắm, nhưng tạm thời để đó, có duyên sẽ quay lại
Và lời giải của bài này là ta thêm /robots.txt
ta sẽ thấy được Disallow: /477ce.html
và ta tiếp tục truy cập vào url+/477ce.html
ta sẽ thu được flag là:
Bài 3: logon
Đề bài:
The factory is hiding things from all of its users. Can you login as Joe and find what they've been looking at? https://jupiter.challenges.picoctf.org/problem/13594/ (link) or http://jupiter.challenges.picoctf.org:13594
Lời giải:
Truy cập vào link, ta chỉ thấy được form đăng nhập và đăng xuất
Do đó bây giờ ta sẽ thử đăng nhập một cái gì đó bất kỳ, xem nó trả kết quả như thế nào nhé ?
Bây giờ, chúng ta sẽ thử đọc source code xem sao nhé !
Đọc source code xong, ta thấy chẳng có gì bất ngờ, ta quay lại đọc đề xem sao
Thì thấy có một ý có lẻ đáng quan tâm: Can you login as Joe
. Ok, bây giờ ta sẽ thử đăng nhập với username là Joe
xem sao
Ok, đăng nhập xong, ta thấy xuất hiện dòng chữ đỏ thông báo mật khẩu của Joe
là super secure
và bây giờ ta cần tìm cách khai thác mật khẩu này !
Theo giang hồ đồn, thì có SQL Injection
, ta thử làm xem sao nhé !
Đến đây là mình chịu rồi đó, chắc đi đọc write up của mọi người thôi :((
Ok, Sau khi đọc writeup, họ gợi ý là cookie và set false thành true
Thử lại: Bây giờ mình sẽ dùng firefox và thử đặp nhập lại một username và password bất kì, và inspect ta nhận được như sau:
Ta nhận thấy rằng: Ở bên phần cookie, Admin đang False
, bây giờ ta thử set lại thành True
để xem kết quả như thế nào nhé :))
Mà bây giờ cái khó là làm sao để ta sửa False
thành True
, :))
Ok, mình sẽ tiếp tục đọc writeup
Để sửa lại cookie, ta vào mục storage, và edit False
thành True
sau đó refresh lại trang web, ta sẽ thu được kết quả như sau:
Ok, I’m fine ! Cuối cùng flag đã xuất hiện :))
Bài 4: dont-use-client-side
Đề bài:
Can you break into this super secure portal? https://jupiter.challenges.picoctf.org/problem/37821/ (link) or http://jupiter.challenges.picoctf.org:37821
Lời giải:
Truy cập vào đường link để bài cho, nhập thử một số và nhấn verify
ta thấy rằng đây là một dạng mò kim đáy bể
Bây giờ, ta cứ thử những bước reconaise như sau:
Đầu tiên, ta sẽ mở source đọc thử xem sao !
Khi mở source lên ta thấy được đoạn code đáng chú ý này !
Bây giờ ta sẽ cùng phân tích đoạn code này nhé !
Vì đoạn code này đã khá trực quan, nên công việc của chúng ta chỉ việc, sắp xếp lại thì ta sẽ được flag mà thôi:
Và flag sẽ là : picoCTF{no_clients_plz_1a3c89}
Và nhập vào, ta thấy password đã được verify
Bài 5: picobrowser
Đề bài:
This website can be rendered only by picobrowser, go and catch the flag! https://jupiter.challenges.picoctf.org/problem/26704/ (link) or http://jupiter.challenges.picoctf.org:26704
Lời giải:
Phân tích, từ description
bài toán yêu cầu chúng ta tìm hiểu về browser
sau khi click vào Flag
ta thấy được dòng chữ màu đỏ, và thật sự mình cũng chưa biết cái này cho để làm gì :((
Và mình biết những cái này đã quá mindset của mình, nên mình quyết định đọc write up để tiết kiệm thời gian
Đọc writeup xong, thì nó bảo rằng cái Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0
chính là User-Agent
và nó nói cái server cái trình duyệt nào bạn đang sử dụng
Sau đó, thấy họ dùng lệnh này : curl --user-agent "picobrowser" "https://2019shell1.picoctf.com/problem/32205/flag"
Cái này, chắc phải mở máy ảo lên chạy thử
Chạy xong, ta sẽ thấy được:
Hiện tại, cái này khá ảo và mình muốn biết curl là gì ?
Lên mạng đọc thử thì nó nói như thế này:
cURL viết tắt của Client URL là một công cụ dòng lệnh (command line tool) dùng để kiểm tra kết nối từ URL và cho phép truyền dữ liệu
Bài 6: Client-side-again
Đề bài:
Can you break into this super secure portal? https://jupiter.challenges.picoctf.org/problem/56816/ (link) or http://jupiter.challenges.picoctf.org:56816
Lời giải:
Tương tự như bài trước, mở source code lên, ta cũng thấy được đoạn code đáng chú ý:
Cụ thể như sau:
var _0x5a46=['37115}','_again_3','this','Password\x20Verified','Incorrect\x20password','getElementById','value','substring','picoCTF{','not_this']
Và nhiệm vụ của ta bây giờ là sẽ đi tìm được mảnh của flag và ghép chúng lại và ta được flag là:
picoCTF{not_this_again_337115}
Bài 7: Irish-Name-Repo 1
Đề bài:
There is a website running at https://jupiter.challenges.picoctf.org/problem/33850/ (link) or http://jupiter.challenges.picoctf.org:33850. Do you think you can log us in? Try to see if you can login!
Lời giải:
Bài này có vẻ khó, vì mở ra thấy một website rất là hoành tráng, và ta sẽ từ từ khám phá nhé !
Kích vào 3 dấu gạch ngang, nó xuất hiện Admin Login
và đến đây ta sẽ thử đăng nhập :))
Đến đây, mọi thứ có vẻ rất khó, vì kiến thức vể web lúc này của mình chưa nhiều, chắc mình lại đi đọc writeup thôi :((
Đọc writeup, nó chỉ là, vào Support, ta sẽ thấy được một dòng chữ sau : Hi. I tried adding my favorite Irish person, Conan O'Brien. But I keep getting something called a SQL Error
Cái này chắc là nó gợi ý cho ta rằng, bài này sẽ liên quan đến SQL Injection
đó !
Ok, bây giờ mình sẽ đọc tiếp writeup đây :))
Ok, nó chỉ là dùng cái này để đăng nhập cho username: ' OR 1=1--
và password bất kì, kết quả thật vi diệu:
Tuy nhiên, mình vẫn chưa hiểu bản chất của lệnh này lắm, bây giờ mình sẽ đi tìm hiểu, tại sao nó lại như thế nhé !
Bây giờ, đọc writeup nó giải thích như vậy nè:
Khi mà mình đăng nhập á, thì cái câu lệnh sql mà kiểm tra chỗ login nó sẽ như thế này:
SELECT username, password FROM users WHERE username='$username' AND password='$password';
Nhưng khi ta thêm cái ' OR 1=1--
thì câu lệnh nó sẽ thành ra như thế này:
SELECT username, password FROM users WHERE username='' OR 1=1--' AND password='';
Và cái đoạn giải thích rất hay như sau, mình xin dẫn nguyên văn:
What is happening here is the query checks if the username is equal to nothing. Then, it checks OR 1=1. Since 1 is always going to be equal to 1, this returns true. The -- at the end simply comments out the rest of the query. This fools the server into letting us through the portal.
Quả thật đến bài này, mọi thứ bắt đầu rất hấp dẫn phải không nào :__))
Ok, mình cùng tiếp tục nào !
Ở đây có một cách khác ở một write up cũng khá hay, nên mình cũng đưa vào đây luôn :)))
Bài 8: Irish-Name-Repo 2
Đề bài:
There is a website running at https://jupiter.challenges.picoctf.org/problem/64649/ (link). Someone has bypassed the login before, and now it's being strengthened. Try to see if you can still login! or http://jupiter.challenges.picoctf.org:64649
Lời giải:
Ok, vẫn là trang web ấy, nhưng liệu ta có thể dùng sql injection được nữa chăng ?
Lúc này khi dùng lại câu lệnh ' OR 1=1--
nó đã phát hiện được sql injection
Liệu lúc này ta còn cách nào khác để khai thác chăng ?
Chắc có lẻ, mình sẽ đi tìm writeup để đọc thôi nào :__
Ở đây, có một điều thú vị nữa đó là khi đọc hint, ta thấy password đang được lọc, do đó ta có thể sử dụng câu lệnh sql injection sau để khai thác lỗ hỗng
username: admin' --
và password
bất kỳ
và ta cũng thu được flag là: picoCTF{m0R3_SQL_plz_aee925db}
Bài 8: Irish-Name-Repo 2
Đề bài:
There is a secure website running at https://jupiter.challenges.picoctf.org/problem/54253/ (link) or http://jupiter.challenges.picoctf.org:54253. Try to see if you can login as admin!
Lời giải:
Bài này tương tự 2 bài trên, ta cần tìm cách khai thác password này ! Đến đây, mình thực sự bị bí, và chắc là phải đọc write up thôi :((
Ok, sau khi đọc writeup xong, thì họ dùng một lệnh bá đạo như sau:
curl https://jupiter.challenges.picoctf.org/problem/54253/login.php --data "password=' be 1=1--&debug=1" && echo
Và nó cho ra kết quả là:
Flag ta thu được là: picoCTF{3v3n_m0r3_SQL_7f5767f6}
Mặc dù chưa hiểu gì nhiều nhưng mình đã bắt đầu thích sql injection rồi đấy :))
Ok, mình cùng qua bài tiếp theo nào !