ค้นหา path สำหรับ pentest ใน JS ด้วย LinkFinder

Bank Eakasit
2 min readMay 20, 2019

--

เคยไหมครับเวลา pentest แล้วรู้สึกตัน ไม่รู้จะ test อะไร ยิ่งบางครั้ง blackbox ไม่ให้ user/pass อะไรมาเลย มีมาแต่หน้า login (da fark) แล้วจะเอาอะไรมาทำ report

ตัวอย่างหน้า Login
ปล. Portainer ในบทความนี้เป็นเพียงตัวอย่างเอามาหา path เท่านั้น ในส่วน endpoint ต่างๆไม่ได้มีช่องโหว่อะไรนะครับ (หรือยังไม่มีช่องโหว่ -w-)

สิ่งที่เราต้องการอย่างนึงในการหาช่องโหว่ คือ เราต้องการ attack surface มากๆ ยิ่ง attack surface มากเนี่ย โอกาสจะหาช่องโหว่เจอก็สูงตามเป็นเรื่องธรรมดา บางครั้งเราก็ต้องหา subdomain ซ่อนต่างๆ แต่ครั้งนี้จะมาแนะนำการหา path ลับที่ถูกซ่อนอยู่ใน Javascript ต่างๆ เพื่อนำ path เหล่านั้นมาทดสอบหาพวกช่องโหว่ประเภท missing authorization ต่อไปอีกที

สีเหลืองคือ Javascript ที่ถูก minify มา ส่วนสีแดงคือกระบวนการ Login

ข่าวดีสำหรับ pentester คือ ปัจจุบันเนี่ยพวก web development ชอบไปในทางที่ว่า รวม Javascript ทุกไฟล์เข้าด้วยกันเป็นอันเดียว แล้ว minify ให้มันเล็กๆ ให้โหลดครั้งเดียวตั้งแต่หน้า login เลย ทำให้ใครๆก็สามารถเข้าถึง Javascript ได้ ไม่ต้อง login

ทีนี้ minify เนี่ยมันอ่านยากมาก ติดกันเป็นพรืด แถมหลายๆครั้ง ไฟล์ก็ขนาดเป็น MB ได้ง่ายๆเลย แต่มันไม่ได้ถูกออกแบบมาให้ถึงขั้น obfuscated เพื่อให้อ่านยากหรือซ่อนข้อมูลจริงๆ เช่นพวก String ทั้งหลาย จะไม่ถูกแตะเลย ยังเป็นก้อนๆเหมือนเดิม ทำให้เราสามารถใช้โปรแกรมไปค้นหาดึงค่าเรานี้ออกมาดูได้

โชค 2 ชั้น คือมันมีโปรแกรมที่ใช้ regex เข้าไปนั่งหา String ที่คล้ายๆจะเป็น URL ให้เราได้อยู่แล้ว มันคือ LinkFinder หลักการทำงานของมันง่ายมาก คืออะไรตรง regex ก็เอามาแสดง

วิธี run ก็ง่ายมาก

python linkfinder.py -i http://localhost:9000/js/app.f55ec34c.js

ปล ที่จริง ถ้าโหลดโปรแกรมไปลองตอนนี้ ผลลัพธ์จะยังไม่ได้แบบผมนะครับ ผมเพิ่งแก้ regex แล้วเปิด PR ไปหมาดๆ -w- แต่เดี๋ยวคงดีขึ้น

เท่านี้เราก็สามารถหา attack surface เพิ่มสำหรับ pentest ต่างๆได้ มีตั้งแต่ unauthorized endpoint ทั่วไป ไปจนถึงพวก path ประหลาดๆ backup บ้าง test บ้าง v1 v2 ทิ้งเอาไว้ก็มีเหมือนกันครับ

การทำงานของมันนั้นง่ายมากครับ มันดัก String ตาม regular expression เลย อะไรตรงกับ regex ก็เอามาแสดงแค่นั้น ถ้าพบว่าแสดงไม่ครบ อยากได้นู่นได้นี่เพิ่ม ก็แก้ regex แล้วเปิด pull request ให้ tool มันดีขึ้นได้

Developer ต้องป้องกันตัวยังไง

อันนี้ ต้องเข้าใจกันก่อนว่ามันยังไม่ได้ vulnerable เป็นแค่ weakness ดังนั้นยังไม่ถูกแฮกหรอกครับ จะมีช่องโหว่ก็ต่อเมื่อ endpoint พวกนั้นมันไม่ได้เช็คสิทธิ เช็ค cookie ให้เรียบร้อย ดังนั้นก็ไปแก้ตรงนั้นให้เรียบร้อย ถ้า endpoint ไม่มีช่องโหว่ ต่อให้ URL มันหลุดไป มันก็โจมตีอะไรไม่ได้อยู่ดีครับ

จำเป็นต้อง obfuscate ไหม ผมมองว่าไม่จำเป็น มันทำให้ไฟล์ใหญ่ขึ้นกว่า Minify และโหลดลง browser ช้ากว่าแน่ๆ อีกทั้งก็ไม่ได้เป็นการป้องกัน เป็นแค่การยื้อเวลาเท่านั้นเอง process ฝั่ง dev ก็เพิ่มขึ้นด้วย เอาเป็นว่าอยากทำก็ทำได้ครับ แต่ผมไม่ได้รู้สึกว่ามันดีขึ้น

ส่วนที่ minify รวมทุกอย่างในเว็บเป็นไฟล์เดียวแล้วโยนให้ตั้งแต่ตอนก่อน login เนี่ย ผมไม่ค่อยเห็นด้วย เพราะมันผิดสิทธิชัดเจน เหมือนเราแจกผังบ้านเป็นใบปลิวอะ ใครรู้สึกสบายใจก็บ้าแล้ว ถึงแม้บ้านจะมีกุญแจอยู่ก็เหอะ ถ้าเป็นผม ผมอยากให้แบ่งเป็น JS สำหรับ unauthorized กับ JS สำหรับ login User แบบนี้มากกว่า แต่ถ้า framework มันบังคับเป็นแบบนั้น มันก็ต้องเป็นแบบนั้นไปแหละ ช่วยไม่ได้ แถมเวลาใช้งานจริง URL endpoint มันก็ fixed อยู่แล้ว ไม่หลุดจาก JS นี้ มันก็หลุดจากคนที่เคยเข้าไปใช้แล้วอยู่ดี การแก้ตรงนี้เลยไม่ได้สำคัญอะไรขนาดนั้นครับ

ผมก็ไม่ได้เป็นนักเขียนเว็บอะไร ใครเขียนเว็บมา มีคำแนะนำอะไร เพิ่มเติมได้เลยครับ

- May 20, 2019 -

--

--

Bank Eakasit
Bank Eakasit

No responses yet