[Write-up] Wargame 3.0 — Web08

ThongTran
4 min readNov 11, 2020

--

Nội dung của challenge này :

Haha

You should submit WhiteHat{sha1(flag)}

haha.wargame.whitehat.vn

Let’s start !
Khi truy cập vào url haha.wargame.whitehat.vn

Ở địa chỉ web này hiển thị lên những dòng code PHP đã được highlight, thử đọc hiểu code này nào !
Sau khi đọc cấu trúc code của file và tìm hiểu các hàm được sử dụng trong đoạn code này, mình có những suy đoán sau :
(1) : Khi biến super global $_GET[‘le’] chưa được set, thì file code thực hiện hightlight syntax của file index.php , chính là những dòng code được hiển thị đây và sau đó hệ thống dừng lại ==> set $_GET[‘le’] để code file index được thực thi
(2) : file haha.php được include nằm cùng directory với file index và chứa biến $flag mà chúng ta đang cần tìm
(3) : biến $tuz là một chuỗi md5 được băm từ một chuỗi ko cố định, thay đổi theo từng milisecond và theo biến $_COOKIE[‘PHPSESSID’] ==> biến $tuz không cố định ==> biến $file không cố định
(4) : Server sẽ tạo một file có tên là giá trị của biến $file , sau đó ghi vào một string “hehehehe” và sau đó xóa file đó. Nếu thực hiện xóa file thành công thì hệ thống dừng lại, còn nếu xóa file thất bại thì sẽ hiển thị ra flag cần tìm ==> Muốn lấy được flag của challenge này thì phải làm thế nào để server ko thể xóa được file được tạo ra đó.

Từ những suy đoán trên thì mình bắt đầu hành động :D
Đầu tiên, set biến $_GET[‘le’] là một giá trị tùy ý và được hiển thị sau

đúng là this is not flag thật :))
Lúc này mình suy nghĩ phải làm sao để biến $file đó là tên file của 1 file đã có sẵn ở server , và file đó là không thể xóa được. Từ đó mình bắt đầu thử set biến $tuz = “1” giống như dòng comment (vì mình nghĩ phải có lý do gì đó họ mới comment như vậy :D )
Vì string truyền vào hàm md5 được nối từ string trả về của hàm date(“ms”) với string từ biến $_COOKIE[“PHPSESSID”] nên mình thử modify cookies thành một chuỗi như sau :

Lý do cho chuỗi này là mình nghĩ sẽ tận dụng được việc nối chuỗi (giống SQLi)
Show requests with this cookie. Bùm, đây là kết quả :

Chả có gì xảy ra :D , cookie được reset về giá trị lúc trước khi modify
Mình đã đi sai hướng rồi!
Đến đây, mình lại suy nghĩ tiếp làm thế nào để xóa file không thành công hay là làm cho file đó không thể xóa được ? Sau nhiều thời gian tìm hiểu, mình phát hiện ra hiện tượng Race Condition , xảy ra khi nhiều luồng truy cập vào dữ liệu chung và cố gắng thay đổi dữ liệu cùng thời điểm

Bây giờ mình sẽ thử tạo ra nhiều request đến server cùng một lúc, như vậy thì ghi nội dung vào file và xóa file giữa các luồng sẽ bị xung đột, tạo ra Race condition ==> Việc xóa file sẽ thất bại ==> sẽ có được flag
Code file python như sau :

Execute và mình có được flag :

Quả là một challenge khó nhai, hoặc là do mình gà :D

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

ThongTran
ThongTran

Written by ThongTran

just a solidity dev interested in security

Responses (1)

Write a response