Thứ Sáu, 10 tháng 7, 2015

[Hướng dẫn] Giải 1 số bài CTF coding trong CTF, wargame

Ví dụ: https://www.hackthis.co.uk/levels/coding/1

Đọc yêu cầu của đề nào: Các từ bị xếp lộn xộn. Nhiệm vụ là sắp xếp lại các từ theo thứ tự alphabet. Sau đó submit kết quả với cùng định dạng. Thời gian để hoàn thành là 5 giây.

Phân tích: với thời gian 5 giây thì với thao tác thủ công ta không thể nào hoàn thành kịp nhiệm vụ này. Vì vậy ta cần phải giải bài này bằng code.
Các bước: Lấy danh sách các từ bị sắp xếp lộn xộn => sắp xếp chúng lại theo thứ tự => Submit kết quả

Bài này sử dụng http request. Với python ta có thể sử dụng thư viện có sẵn như requests (http://docs.python-requests.org/en/latest/) nhưng mình đã code 1 hàm sẵn rất đơn giản và tiện dụng (http://pastebin.com/e7CueNfU)
Cách sử dụng:
Bạn cần 3 param (url, post_data, cookie) nếu sử dụng get thì post_data = "", nếu không cần cookie thì gán cookie = ""
OK. Lấy cookie, url
Sử dụng add-on livehttpheader ta được thông tin request như sau:

OK.
Giao thức là GET
url = https://www.hackthis.co.uk/levels/coding/1
Cookie = _ga=GA1.3.1205173578.1433484176; member=1; km_ai=x2PU%2FQmuZkE0OR%2F2qGxqE6N7Jqo%3D; km_uq=; km_lv=x; autologin=o-%01%98%7F%09%D3%EBW%22w%FBGc%B5%8C%5C%EC%1E%24%B4n%E7%25%93%E7%02%8F%AC%BB%E2V4%BE%C0%9C%A6%E7%A7%16%7BFc+%8B%C4%D1h%A3%B5%F5s%D9jUs%08J_Z%A1%A1%C1o; PHPSESSID=j0k3ihv246vdijl3om5f7f8a87

OK. Đưa vào hàm requests lấy dữ liệu về thôi.


Run:

Đoạn bôi trắng là đoạn ta cần quan tâm.
Làm sao để lấy được các từ ra?
Suy nghĩ đơn giản thôi nào. Biến res của ta chỉ là string thôi nên ta chỉ việc phân tích chuỗi là có thể lấy được các từ ra.
Ta có thể sử dụng tới Regular expression operations (https://docs.python.org/2/library/re.html) nhưng RE có thể gây tốn thời gian. Vì form này có format như nhau sau mỗi lần request nên ta chỉ cần sử dụng các hàm xử lý chuỗi đơn giản nhằm tránh mất thời gian.
Trước các từ cần quan tâm là chuỗi "<textarea>" và sau các từ cần quan tâm ta có "</textarea>" mà trong chuỗi res ta chỉ có duy nhất 1 chuỗi "<textarea>" trong đó. OK simple rồi. Lấy chuỗi từ sau "<textarea>" và trước "</textarea>" là được chuỗi các từ cần tìm.
Run:
OK. Việc tiếp theo là tách chuỗi này thành các từ riêng lẻ.
Giữa các từ được phân cách bằng chuỗi ", " vì vậy ta có thể sử dụng hàm split để tách ra.
Run:
OK. Vậy ta được 1 list các từ.
Tiếp theo là sắp xếp các từ. Vì đây là list nên ta có thể sử dụng hàm sorted (https://docs.python.org/2/library/functions.html#sorted)

Như vậy ta thấy list words trên chưa được sắp xếp nhưng list answer dưới đã được sắp xếp theo alphabet.
Nhiệm vụ bây giờ là biến list thành string theo đúng format ban đầu (cách mỗi từ là chuỗi ", ") và submit.
Để biến chuỗi thành đúng format ban đầu ta dùng hàm join.

OK. Ta có chuỗi answer đúng format và đã được sắp xếp.
Nhiệm vụ bây giờ là submit.
Ta coi http request bằng livehttpheader:
Giao thức: POST
Url: https://www.hackthis.co.uk/levels/coding/1
Cookie: như cũ
Post_data: answer = chuỗi_các_từ_đã_được_sắp_xếp


OK. tiếp tục :D
OK. Level Completed

Còn một số dạng nữa khi nào rảnh mình sẽ cập nhật

Bạn nào chưa hiểu thì có thể comment hoặc liên hệ facebook mình:
https://www.facebook.com/xxvicon