SVATTT ASEAN 2019

SVATTT năm nay mình thi đấu cho đội z3r0_n1ght, team mình làm được 2 bài là vuln_vm và HelloVietnam

Mình đại diện team viết writeup bài HelloVietnam, do mình viết cho cả những bạn không tham gia giải này xem nên writeup sẽ bao gồm cả phân tích đống source code cũng như hướng suy nghĩ, writeup sẽ hơi dài 1 tý

Analysis

Bài do anh @ducnt ra và source code được cho sẵn

  • Nghiên cứu source code (app.py) thì app này có những chức năng cơ bản gồm : đăng kí, đăng nhập, upload và các chức năng chỉ có thể sử dụng sau khi đăng nhập bao gồm: lấy danh sách các blog, thêm blog mới, like blog và get flag

  • Ngoài app.py thì source code còn có 1 file quan trọng là hellovietnam.sql bao gồm các stored procedure xử lí các chức năng của app, mà stored procedure code chuẩn như tác giả thì ta sẽ loại trừ được khả năng SQL Injection đầu tiên

  • Đây là 1 bài được code bằng Python nên theo mình biết thì việc upload shell cũng không khả thi => loại bỏ phần upload để tiết kiệm thời gian

  • Để sử dụng các chức năng khác thì mình cần phải có tài khoản và đăng nhập vào được Dashboard

Flow chương trình:

  • App sẽ có sẵn 3 tài khoản mặc định với id là 1,2,3

  • Vậy với những tài khoản được tạo tiếp theo sẽ có id > 3, sau khi CreateUser thì app.py sẽ call sp_validate_golden_member để xóa những user có id > 3

  • Vậy để đăng nhập vào được Dashboard thì mình phải có 3 tài khoản mặc định hoặc đăng nhập trước khi tài khoản bị xóa. Do SQL Injection không khả thi (loại từ ban đầu) nên chỉ còn hướng Race Condition để đăng nhập trước khi app call sp_validate_golden_member

=> Race Condition cả đăng kí lẫn đăng nhập để lấy ra authenticated cookie

Get Flag

  • Sau khi đăng nhập xong thì mình có thể getFlag

Để được phép getFlag thì mình phải đáp ứng được điều kiện:

  • Số like bài post của admin < số like của bài post của mình

Nếu mình like 1 bài post bất kì, app sẽ bonus luôn số like đó cho post của admin => không thể tạo nhiều user để buff like cho 1 post được

Cách 1

  • Để ý kĩ thì app không check số like người dùng đưa vào có phải là số âm hay không, nhanh trí nghĩ đến việc buff cho số like admin giảm xuống, POST like là -99 lên, thành công nhưng nó không hoạt động như team mình nghĩ, số like admin không giảm nhưng cũng không tăng và số like của bài post mình lại tăng, nhưng chỉ áp dụng với những bài post có số like bằng NULL

Cách 2

  • Để ý kĩ lần nữa thì app không bonus cho post của admin cùng số like như post của mình, mà app bonus int(float(số_like_của_mình))

Feedback

  • Cảm ơn anh @ducnt và các anh trong BTC đã ra challenge hay cho kì SVATTT lần này
Written on December 2, 2019