[WebSec] Level 10

https://websec.fr/level10/index.php

Information Gathering

Challenge này thuộc về dạng lỗi Type Jugling. Các bạn có thể tham khảo challenge tương tự và các giải thích tại đây.

Để nói một cách ngắn gọn thì lỗi này xảy ra do trong source code sử dụng == để so sánh thay vì ===.

Người ta gọi ==loose compare===strict compare.

Khác nhau ở 2 cách so sánh này là == thì nó sẽ convert về cùng kiểu giá trị để so sánh.

Ví dụ:

  • “1” == 1 –> True
  • “123a” == “123” –> True
  • md5(0e91238) == md5(0) –> True

Còn so sánh === thì phải đúng 100% kiểu dữ liệu thì mới cho kết quả True:

Ví dụ:

  • “1” === “1” –> True
  • 1 ===1 —> True
  • False === False –> True

Source code

Đoạn code trên kiểm tra nếu tồn tại 2 parameters là fhash thì sẽ thực thi code bên trong.

Nhưng có 2 vấn đề cần chú ý là dòng 7 và dòng 10.

Dòng 7: filename của parameter f sẽ được nằm giữa 2 biến $flag. Sau đó sẽ encrypt md5 chuỗi đó và sẽ cắt lấy 8 ký tự đầu tiên.

Dòng 10: So sánh $hash của dòng 7 và cái hash của mình nhập vào.

Mục tiêu của mình sẽ đọc file flag.php và cái hash của mình phải so sánh == với $hash.


Exploit

Để khai thác bài này sẽ có 2 cách, đều là brute force cả.

Cách 1

Brute force giá trị hash (cách này không khả thi vì abcdefghijklmnopqrstuvwxyz0123456789 là 36 ký tự, chọn ngẫu nhiên 8 ký tự của 36 ký tự là 30260340 trường hợp cần thử).

Cách 2

Brute force filename.

Ủa alo??? Filename là flag.php mà đi brute force chi cha nội =))

Nàiii, filename flag.php cũng chính là ./flag.php mà cũng chính là .//flag.php hay là ./////flag.php.

Khi đó, số lượng / (forward slash) đủ lớn thì sẽ đem lại giá trị md5 hash dưới dạng <number>e<alphabet numerals>

Ví dụ mình có 1 file test.php.

filename is test

Run file test.php.//////////test.php vẫn ra kết quả như nhau.

The same result

Bắt intercept gửi vào intruder Burp Suite. Chọn payload là character blocks với base string là /.

Brute force

Kết quả là 881 /

881 /

Và flag là:

Flag

Sau khi có flag, mình thử lại cách so sánh của code thử có đúng không?

1
2
3
4
5
6
<?php
$flag = "WEBSEC{Lose_typ1ng_system_are_super_great_aren't_them?}";
$hash = md5($flag . './////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////flag.php' . $flag);
$hash_substr = substr(md5($flag . './////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////flag.php' . $flag), 0, 8);
var_dump($hash_substr == "0e1337");
?>

Retest


[WebSec] Level 10
https://dovankha.github.io/2022/08/17/lv10/
Author
Khado
Posted on
August 17, 2022
Licensed under