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à:

Imgur

Truy cập lần lượt vào 2 file này, ta sẽ lần lượt thu được:

t3ct1ve_0r_ju5t_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à: Imgur


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

Imgur

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é ?

Imgur

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

Imgur

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 Joesuper 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:

Imgur

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

Imgur

Để 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:

Imgur

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 !

Imgur

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}

Imgur

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ử

Imgur

Chạy xong, ta sẽ thấy được:

Imgur

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

Imgur


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ú ý:

Imgur

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:

Imgur

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' --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à:

Imgur

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 !