ข้ามการเข้ารหัสฝั่งไคลเอนต์เพื่ออ่านไฟล์ Windows Server ภายใน
เฮ้ อีกครั้ง ฉันคืออะบิเชกมอร์ลา
บล็อกนี้เกี่ยวกับวิธีการทำลายการเข้ารหัสฝั่งไคลเอ็นต์ด้วยการวิเคราะห์ซอร์สโค้ด และสามารถอ่านไฟล์เซิร์ฟเวอร์ Windows ภายในเช่นLFIแต่หลังจากข้ามเลเยอร์การเข้ารหัส
ดังนั้น ฉันจึงคิดโปรแกรมขึ้นมา สมมติว่าsub.domain.comและข้อมูลรับรองมีให้ในขอบเขต
ระหว่างเข้าสู่ระบบ ฉันพบว่ามีการเข้ารหัสชื่อผู้ใช้และรหัสผ่าน
![](https://post.nghiatu.com/assets/images/m/max/724/1*Cr9DODDQDDtOFfYIR-Yl1w.png)
และต่อมา ถอดรหัสชื่อผู้ใช้เพื่อแสดงในส่วนหน้า
หลังจาก googling ฉันได้รับบล็อกที่สวยงามนี้โดยSameer Bhatt “ https://bhattsameer.github.io/2021/01/01/client-side-encryption-bypass-part-1.html " หลังจากผ่านไป
ประการแรก บันทึกคำขอเข้าสู่ระบบลงในเรอ และฉันเริ่มค้นหาตัวแปรในแหล่งที่มา หากแอปพลิเคชันใช้ฟังก์ชันจาวาสคริปต์ฝั่งไคลเอ็นต์เพื่อเข้ารหัสชื่อผู้ใช้และรหัสผ่าน หลังจากค้นหาคำหลักสองสามคำ ฉันพบฟังก์ชันชื่อ encryptData () ซึ่งใช้CryptoJS
![](https://post.nghiatu.com/assets/images/m/max/724/1*2uutzhAUwfR65TqwRNV2yQ.png)
และแอปพลิเคชันไม่เพียงแค่ใช้การเข้ารหัสแบบธรรมดาเท่านั้น พวกเขายังติดตั้งคีย์ iv โหมด และช่องว่างภายในตามเอกสารประกอบของhttps://cryptojs.gitbook.io/
ตอนนี้เป้าหมายหลักของฉันคือการค้นหาคีย์ ค่า iv เพื่อที่จะเข้ารหัส/ถอดรหัสค่าของเราได้สำเร็จ ฉันเริ่มขุดลึกลงไปในแหล่งที่มา จากนั้นจึงหาตัวแปรอื่นที่เรียกว่าคีย์เฟรม ซึ่งใช้ในส่วนการถอดรหัส และนั่นคือรหัสลับฮาร์ดโค้ดที่ใช้สำหรับค่าคีย์และ iv
ในที่สุดฉันก็พบว่าคีย์และค่า iv นั้นไม่มีอะไรนอกจาก CryptoJS.enc.Utf8.parse(“secret_key”)
ฉันติดตั้งแพ็คเกจ npm ในเครื่องและสร้างฟังก์ชันเดียวกับที่ใช้ในซอร์สโค้ด
const key = CryptoJS.enc.Utf8.parse("secret_key");
const iv1 = CryptoJS.enc.Utf8.parse("secret_key");
const encrypted = CryptoJS.AES.encrypt("C://Windows//System32//drivers//etc//hosts", key, {
keySize: 16,
iv: iv1,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
console.log(encrypted+""); // will give the encrypted value
console.log("For decryption : ");
var cipher = "KSxIfH6RWYGA==";
const plainText = CryptoJS.AES.decrypt(cipher, key, {
keySize: 16,
iv: iv1,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
console.log(plainText.toString(CryptoJS.enc.Utf8)); // will give the decrypted value
และตอนนี้ส่วนที่น่าสนใจ
หลังจากสแกนเรอแล้ว ผมได้ไฟล์ชื่อ “ ViewDocumentFile ” ซึ่งมี พารามิเตอร์ พาธที่รับค่าที่เข้ารหัส หลังจากถอดรหัสด้วยไฟล์ JS ข้างต้นแล้ว พบว่าเป็นพาธของ png นั่นคือD:\\website\\logo.png ,
![](https://post.nghiatu.com/assets/images/m/max/724/1*SeWAGWFZ7g4lBwpYzAKUXg.png)
ฉัน googled สำหรับเพย์โหลด LFI ที่ใช้ windows และได้รับC://Windows//System32//drivers//etc//hostsทำการเข้ารหัสและส่งผ่านไปยังพารามิเตอร์พา ธ และบูมเราสามารถอ่านไฟล์ภายในได้ เพียงแค่ทำลาย การเข้ารหัสบางอย่าง
![](https://post.nghiatu.com/assets/images/m/max/724/1*UrNB40mCa88dg1FDFKcC1A.png)
![](https://post.nghiatu.com/assets/images/m/max/724/1*oefT-jvFIlb7kEUQ7xiq9g.png)
และนั่นเป็นวิธีที่การอ่านไฟล์ JS เป็นส่วนสำคัญของการทดสอบ (บทเรียนที่ฉันได้รับจากการประชุมด้านความปลอดภัย)
ขอบคุณที่อ่าน!
ลิงค์อิน:https://www.linkedin.com/in/abhishekmorla/
ทวิตเตอร์ :https://twitter.com/abhishekmorla