endy

@endy

Joined on Nov 17, 2022

  • Java là một ngôn ngữ lập trình hướng đối tượng, chính vì thế khi có nhu cầu trao đổi dữ liệu dưới dạng các object thì các format thông thường như JSON hay XML sẽ không thể nào làm tốt, do đó ta cần sử dụng serialized data để thực hiện việc trao đổi dữ liệu của object dưới dạng bytes Ví dụ code serialize và deserialize // User.java import java.io.Serializable; public class User implements Serializable { private String name; private int age;
     Like  Bookmark
  • Sau khi đã làm quen với gadgetchain và cách debug trong InteliJ, mình tiếp tục phân tích CommonsCollections5, gadgetchain này hoạt động ở version 3.1 của thư viện Commons Collections. CommonsCollections5 nằm trong bộ gadgetchains CommonsCollections 1-7 nhằm khai thác thư viện Commons Collections, bộ gadgetchain này về cơ bản cũng đều lợi dụng class InvokerTransformer và InstantiateTransformer để invoke method. Bài phân tích mình tham khảo blog này và blog này, các bạn có thể xem bài viết gốc để hiểu rõ về chain CommonsCollections5 Setups Vì chain này dùng để khai thác thư viện, nên trước hết ta cần include thư viện vào.
     Like 1 Bookmark
  • Pwn Petshop Ý tưởng Sử dụng OOB để leak exe.address --> sử dụng bug fmt của scanf để BOF leak libc.address --> tiếp tục sử dụng bug fmt của scanf để ret2libc Phân tích Leak exe.address Ở chall này, thì đầu tiên ta có bug OOB ở hàm buy int v6; // [rsp+1Ch] [rbp-424h] BYREF
     Like  Bookmark
  • Giới thiệu Đã có bao giờ bạn phát hiện lỗ hổng LFI trên một ứng dụng web nhưng loay hoay mãi không thể tìm được file nào tiềm năng để leo thang mức độ ảnh hưởng như dẫn đến RCE hay không ? Để giải quyết nổi đau này mình sẽ giới thiệu về kỹ thuật PHP filter chain có thể biến mọi LFI thành RCE 😀 Vấn đề Giả sử ta có đoạn code bị LFI như sau <?php // do something
     Like 6 Bookmark
  • Be Posititve Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/be-positive Thay vì chuyển tiền thông thường thì sẽ chuyển số âm Slow Down Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/slow-down Transfer với amount=111111111+1 Youtube Downloader Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/youtube-downloader
     Like  Bookmark
  • Trước khi đi vào writeup bài này thì mọi người cần biết về RMI trong Java, mình sẽ nói sơ qua về RMI, và nó có liên quan gì đến Java deser RMI là gì Khái niệm RMI (Remote Method Invocation) là một API trong java cho phép có thể truy cập method của một object từ xa trên máy khác. Ví dụ mình có 1 server có method hello của interface User, và phía client có interface User nhưng lại không có method hello, client muốn gọi method này sẽ đứng từ xa và dùng RMI để truy cập đến method hello của server RMI được sử dụng trong các hệ thống phân tán, hoặc gọi đến các method của bên thứ 3. Ví dụ một thư viện XYZ cung cấp method imgRender để xử lý ảnh, src của thư viện được host ở một nơi khác, ta có thể dùng RMI để truy cập đến method imgRender mà không cần tải cả thư viện về. Nói sơ qua về cấu trúc của RMI sẽ như sau:
     Like  Bookmark
  • HCM Finals 2023 it-s Bài này khá đơn giản khi sử dụng ejs ver 3.1.5 khi search thì ta biết được ejs bản này bị lỗi RCE thông qua property outputFunctionName https://security.snyk.io/package/npm/ejs/3.1.5 Có đoạn code sau xuất hiện trong file /routes/index.js router.post('/error-log', (req, res, next) => { //chi~ admin moi' log duoc. loi^~ User.findOne({ email: 'admin@admin.com' }, (err, data) => {
     Like  Bookmark
  • 100 - Questions Description Enum Chall cho một trang web như thế này Khi trả lời đúng sẽ trả về Corect Nhìn vào src code chall cung cấp thì ta biết được trang web sẽ lấy 2 param là qn_id và ans và thực hiện truy vấn SQL để xem câu trả lời có đúng hay không.
     Like  Bookmark
  • Đầu tiên challange cho ta file app.js như sau const express = require('express'); const cookieParser = require('cookie-parser'); const app = express(); app.use(cookieParser()); app.get('/', (req, res) => { // free xss, how hard could it be? res.end(req.query?.xss ?? 'welcome to impossible-xss');
     Like  Bookmark
  • Khi nhắc đến xml có phải chúng ta sẽ nghỉ ngay đến XXE. Tuy nhiên nếu cứ bám theo XXE ta đã bỏ qua một attack vector khác từ xml. XSLT là gì ? XSLT (eXtensible Stylesheet Language Transformations) là một stylesheet language có chức năng chính là chuyển đổi xml thành các định dạng khác để hiển thị. Nếu HTML có CSS thì XML cũng có XSLT Thông thường XSLT sẽ chuyển đổi xml thành HTML để hiển thị một cách đẹp mắt và dễ dàng Ví dụ:
     Like  Bookmark
  • Giới thiệu Ví dụ ta có đoạn code sau <?php //do something... file($_GET['user_input']); //do something... ?> Hàm file có tác dụng sẽ đọc toàn bộ nội dung file, tuy nhiên sẽ không cho ra bất kỳ response gì.
     Like  Bookmark
  • tags: Case study Giới thiệu Steam là một nền tảng phân phối và cung cấp thư viện game khổng lồ. Để có thể mua game trên Steam ngoài phương thức thanh toán thông thường như tài khoản ngân hàng hoặc thẻ tín dụng, chúng ta có thể sử dụng Steam Wallet, giống như ví Momo bạn có thể nạp tiền vào và mua game hoặc các sản phẩm liên quan đến game. Details Lỗ hổng xuất hiện tại đường dẫn https://store.steampowered.com/steamaccount/addfunds Khi ta nhấn add funds để nạp vip và sử dụng phương thức thanh toán Smart2Pay Khi ta bắt lại cú request nó sẽ có dạng như sau:
     Like  Bookmark
  • CVE-2022-21661 - SQLi WP_Query Giới thiệu CVE này là về lỗi SQLi xảy ra ở bản 5.8.2 của Wordpress, đã được vá sau đó tại bản 5.8.3. Lỗi này cho phép dù là user guest thông thường hay là user admin đều có thể thực thi được câu lệnh SQL. Nó xuất hiện trong Wordpress core tuy nhiên để có thể trigger được lỗi thì ta cần phải có một plugin sử dụng đến class WP_Query. Phân tích lỗi Đầu tiên ta diff 2 bản patch để xem sự khác biệt Có thể thấy đoạn code xử lý biến $query['terms'] đã được thay đổi. Vì sao lại như vậy ? Đoạn code trên nằm ở dòng 559 của file /wp-admin/class-wp-tax-query.php cụ thể hơn nữa là trong hàm clean_query.
     Like  Bookmark
  • Challange cho ta source và trang web như sau: Soure xử lý chính: const express = require('express') const path = require('path'); const bodyParser = require('body-parser') const fetch = (...args) => import('node-fetch').then(({ default: fetch }) => fetch(...args)); const app = express()
     Like  Bookmark
  • Challage cung cấp cho ta một trang viết và thêm note, nhưng trước khi truy cập vào ta phải đăng nhập trước đã, có thể đăng nhập với username:guest và password:guest Ngoài ra ta cũng có source code: const fs = require('fs'); const path = require('path'); const express = require('express'); const auth = require('express-basic-auth'); const mustache = require('mustache'); const app = express();
     Like  Bookmark
  • Đầu tiên chall cho ta một trang web và cả source code, khi chạy docker thì truy cập vào web sẽ như thế này: Ta có thể nhập bất kỳ đường dẫn nào vào và thực hiện gửi report đi. Nhìn qua source code thì ta thấy ngoài trang index.php còn các đường dẫn khác Trong đó config.php thực hiện kết nối với db còn flag.php là một cú lừa đau đớn Tuy nhiên file đã gợi ý ta rằng flag thật sự nằm trong đoạn code php của file này Vậy chỉ còn login.php, thử truy cập thì đây chỉ là một trang đăng nhập bình thường
     Like  Bookmark
  • Ở challage này cung cấp cho ta source code và một trang web như sau: Nhìn qua source thì ta sẽ thấy 2 endpoint khác là /debug và /api/submit Ở endpoint /debug sẽ nhận param là debug và thực hiện check xem có xuất hiện những ký tự trong blacklist không, nếu có sẽ return not allow còn nếu không thì sẽ được đưa vào hàm eval để thực thi Còn ở endpoint /api/submit thì ta phải truy cập qua methods POST. Để kích hoạt được endpoint này thì ta phải truyền property là artist.name và set Content-Type: application/json, ta có thể thấy điều này được gợi ý trong file /static/js/main.js
     Like  Bookmark