ความฉลาดทางข้อมูลเชิงกำเนิด

ถอดรหัส SANS Holiday Hack Challenge ปี 2023

วันที่:

จากการที่ AI แพร่หลายและความเสี่ยงด้านความปลอดภัยในการใช้งาน ความท้าทายในการแฮ็กวันหยุด SANS ปี 2023 เป็นประสบการณ์ที่มีคุณค่าในการดำเนินตามวัตถุประสงค์ 21 ประการที่ทดสอบและขยายทักษะด้านความปลอดภัยทางไซเบอร์หลายประการ

ความท้าทายที่ดีที่สุดสำหรับฉันคือการตามล่าหาภาพหลอนของ AI ในรายงาน Pentest, เพิ่มสิทธิพิเศษบนระบบ Linux, ค้นหาสูตรโกงในเกม Game Boy, การใช้ Azure REST API เพื่อค้นหาซอร์สโค้ดของแอปฟังก์ชัน Azure และหาประโยชน์จากช่องโหว่ในท้ายที่สุด บริการใบรับรอง SSH ฝึกใช้ อิมแพ็คเก็ต ชุดเครื่องมือและ รับรอง เพื่อแสวงหาประโยชน์จากช่องโหว่ บริการใบรับรอง Active Directoryและใช้ประโยชน์จากช่องโหว่ SQL insert และ Java deserialization ในแอปอวกาศ

ด้านล่างนี้ ฉันแชร์เส้นทางที่ฉันเดินไปเพื่อจัดการกับความท้าทายที่โดดเด่นที่สุดบางส่วน

นักข่าว

รูปที่ 1-เกาะคริสต์มาส-ที่พักของรูดอล์ฟ

ChatNPT ซึ่งเป็นโมเดลภาษาขนาดใหญ่ (LLM) ที่ใช้สำหรับการสร้างความท้าทายบางอย่าง ได้สร้าง รายงานการทดสอบการเจาะ เกี่ยวกับช่องโหว่ที่พบในเครือข่ายของ North Pole Systems ซึ่งบางส่วนเป็นส่วนหนึ่งของความท้าทายที่กำลังจะเกิดขึ้น อย่างไรก็ตาม ChatNPT ทำให้เกิดภาพหลอนในรายละเอียดบางส่วนในรายงาน เมื่อใช้ ChatGPT หรือ LLM อื่นๆ ที่ชื่นชอบ ภารกิจคือตั้งค่าสถานะส่วนต่างๆ ที่มีข้อมูลหลอนประสาท แนวทางของฉันคือการถามคำถามเฉพาะของ ChatGPT เกี่ยวกับเนื้อหาเพื่ออธิบายสิ่งที่ฉันไม่เข้าใจในตอนแรกและในที่สุดก็ค้นพบความผิดปกติ สามในเก้าส่วนมีข้อผิดพลาด

รูปที่-2-ผู้รายงาน-3

ตามที่ยืนยันโดย ChatGPT ส่วนนี้มีหมายเลขพอร์ตที่ไม่ถูกต้อง 88,555 ซึ่งสูงกว่าหมายเลขพอร์ตสูงสุดที่ถูกต้องที่ 65,535 มาก:

รูปที่ 3-ผู้รายงาน-3-ChatGPT-คำตอบ

รูปที่-4-ผู้รายงาน-6

ที่นี่ฉันสังเกตเห็นทันทีว่า SEND ไม่ใช่วิธีการร้องขอ HTTP

รูปที่ 5-ผู้รายงาน-6-ChatGPT-คำตอบ

รูปที่-6-ผู้รายงาน-9

ChatNPT สับสนหมายเลขเวอร์ชัน PHP ที่กล่าวถึงในส่วนที่แปดของรายงานว่าเป็นเวอร์ชันโปรโตคอล HTTP หรือเป็นข้อความที่เข้าใจผิดว่าควรเป็น "คำขอ HTTP HEAD" ในส่วนนี้ นอกจากนี้ การเปิดเผยการลงทะเบียน Windows หรือรหัสผลิตภัณฑ์ในส่วนหัวตำแหน่งถือเป็นคำแนะนำที่ไม่ดี

รูปที่ 7-ผู้รายงาน-9-ChatGPT-คำตอบ

Linux PrivEsc

รูปที่ 8-เกาะแห่งของเล่นที่ไม่พอดี-นกกระจอกเทศ-รถเก๋ง

ในการท้าทายนี้ วัตถุประสงค์สุดท้ายคือการตอบคำถาม แต่คำถามนั้นถูกซ่อนอยู่ในไฟล์ปฏิบัติการที่ไม่สามารถเข้าถึงได้:

คำถาม

ในขณะที่มี วิธีการต่างๆ เพื่อเพิ่มสิทธิ์บนเครื่อง Linux ความท้าทายนี้อนุญาตให้เรียกใช้งานได้แบบกำหนดเอง สำเนาง่ายๆ โดยที่บิต SUID ถูกตั้งค่าให้ถูกใช้ในทางที่ผิด หากมีการตั้งค่าบิต SUID สำหรับเจ้าของไฟล์และเจ้าของตั้งค่าไว้ รากจากนั้นไฟล์นั้นจะถูกเรียกใช้งานด้วยสิทธิ์รูทเสมอ แม้แต่ผู้ใช้ที่ไม่ใช่รูทบนระบบก็ตาม ฉันใช้คำสั่งต่อไปนี้เพื่อค้นหาไฟล์ปกติทั้งระบบที่มีบิต SUID ที่ตั้งไว้สำหรับเจ้าของ โดยละทิ้งเอาต์พุตข้อผิดพลาดใดๆ:

รูปที่คัดลอกอย่างง่าย

สำเนาง่ายๆ ดูเหมือนจะเป็นเวอร์ชันมาตรฐานที่มีช่องโหว่แต่เรียบง่าย cp คุณประโยชน์. แท้จริงแล้วข้อความช่วยเหลือแนะนำสิ่งเดียวกัน:

การใช้งาน: simplecopy

แนวทางของฉันมีดังต่อไปนี้: สร้างข้อมูลสำหรับผู้ใช้ที่มีสิทธิ์ใช้งานรูท ผนวกข้อมูลนี้เข้ากับสำเนาของ / etc / passwd ไฟล์แล้วแทนที่อันเก่า passwd ไฟล์พร้อมสำเนา ต่อไปก็ใช้. su เพื่อเข้าสู่ระบบในฐานะผู้ใช้ใหม่

ด้วยการเข้าถึงรูทของระบบ ฉันสามารถค้นหาไฟล์ปฏิบัติการได้ runmetoanswer ใน /รากรันและเดาคำตอบ: ซานตา.

รูปวิ่งให้ฉันตอบ

คำตอบยังได้รับในไฟล์ปรับแต่งด้วย /etc/runtoanswer.yamlแต่ไฟล์นี้สามารถอ่านได้ด้วยสิทธิ์รูทหรือโดยการใช้เท่านั้น สำเนาง่ายๆ เพื่อคัดลอกไปที่ /dev/stdout.

ตลับเกม: เล่ม 2 และเล่ม 3

รูปที่-10-เกม-คาร์ทริดจ์-Vol2

ความท้าทายสองประการที่เกี่ยวข้องกับวิศวกรรมย้อนกลับแบบเบาของไฟล์ Game Boy ROM เกมแรกคือเกมที่มีวัตถุประสงค์เพื่อผ่านยาม เปิดพอร์ทัล และถอดรหัสคำตอบของคลื่นอากาศ เราได้รับเกมสองเวอร์ชันพร้อมกับคำใบ้ให้ดู diff ระหว่างพวกเขา. การคัดลอกไบต์ฐานสิบหกที่แตกต่างกันสองสามไบต์จากเวอร์ชันหนึ่งไปยังอีกเวอร์ชันหนึ่งก็เพียงพอแล้วที่จะเปิดเผยพอร์ทัล ซึ่งนำไปสู่ห้องที่มีวิทยุกระจายเสียงคำตอบเป็นรหัสมอร์ส:

รหัสมอร์ส

ดา-ดา-ดิท

ดี-ดา-ดิ-ดิท

ดาดาดาดาดาดา

ดีดาดิท

 

ดา-ดี-ดา-ดา

ระบุความประสงค์หรือขอข้อมูลเพิ่มเติม

g

l

0

r

 

y

อย่างที่สองคือเกมที่คุณจะได้รับคะแนนจากการกระโดดเพื่อเก็บเหรียญ อย่างไรก็ตาม การได้รับมากกว่า 998 คะแนนจะทำให้คะแนนของคุณอยู่ที่ประมาณ 0 และภายใต้เงื่อนไขบางประการ ทำให้เกิดข้อความเกี่ยวกับข้อผิดพลาดล้น วัตถุประสงค์คือเพื่อแสดงขั้นลอยไปยังส่วนถัดไปของแผนที่ที่เก็บธงไว้ แต่ต้องใช้ความชำนาญในการกระโดด แต่ฉันกลับค้นพบวิธีการบินด้วยความช่วยเหลือจาก โปรแกรมจำลองเกมบอย BGB และการผสมผสานระหว่างฟังก์ชันค้นหาการโกงและการตรวจสอบ RAM ด้วยภาพระหว่างการเล่นเกมเพื่อค้นหาไบต์ฐานสิบหกที่ควบคุมตำแหน่ง y ของผู้เล่นบนแผนที่ โดยพื้นฐานแล้ว ฉันเดาเอาว่า เกมฉลาม รหัส.

ธงนั้นก็คือ !ทอม+เอลฟ์!.

ใบรับรอง SSHenanigans

แม้ว่าการใช้ใบรับรองแทนคู่คีย์สาธารณะและส่วนตัวจะช่วยเพิ่มความปลอดภัยในการตรวจสอบสิทธิ์ผ่าน SSH แต่บริการลงนามใบรับรอง SSH ที่กำหนดค่าไม่ถูกต้องอาจทำให้ผู้โจมตีสามารถรับใบรับรองอย่างผิดกฎหมายเพื่อตรวจสอบสิทธิ์ในฐานะผู้ใช้รายอื่นได้ ความท้าทายได้รับการตั้งค่าในลักษณะดังต่อไปนี้

An ฟังก์ชัน Azure แอปปรับใช้บน northpole-ssh-certs-fa.azurewebsites.net ส่งคืนใบรับรอง SSH ให้กับใครก็ตามที่จัดเตรียมรหัสสาธารณะ SSH ใบรับรองเหล่านี้สามารถใช้เพื่อตรวจสอบสิทธิ์ผ่าน SSH ได้ ssh-server-vm.santaworkshopgeeseislands.org ในฐานะผู้ใช้ หน้าจอ.

โฮสต์ที่โดเมนนี้คือเครื่องเสมือน Azure ดังนั้นหลังจากเข้าสู่ระบบในขั้นตอนแรกของฉันคือการรวบรวมข้อมูลจาก ข้อมูลเมตาของอินสแตนซ์ เนื่องจากจำเป็นสำหรับการเรียก Azure REST API ในภายหลัง โดยเฉพาะฉันต้องการรหัสการสมัครและชื่อกลุ่มทรัพยากร ฉันยังต้องการโทเค็นการเข้าถึงเพื่อใช้ API นี้ ซึ่งฉันสามารถได้รับมา โดยใช้ข้อมูลระบุตัวตนที่ได้รับการจัดการ. โทเค็นที่ได้รับนี้จะต้องใช้ในส่วนหัวการอนุญาต HTTP เมื่อทำการเรียกไปยัง Azure REST API

ณ จุดนี้ ฉันมีทุกสิ่งที่จำเป็นในการเรียก API รับการกำหนดค่าการควบคุมแหล่งที่มา ของแอปฟังก์ชัน Azure ฉันโทรออกและในบรรดาคุณสมบัติการกำหนดค่าฉันเห็น URL ไปยัง ซอร์สโค้ดของแอปบน GitHub.

การตรวจสอบซอร์สโค้ดพบว่าแอปยอมรับพารามิเตอร์ตัวที่สอง: หลัก. หาก HTTP POST ร้องขอไปยัง /api/create-cert ปลายทางไม่ส่ง ค่าสำหรับ หลักจากนั้นจะมีค่าเริ่มต้นเป็น เด็กซน ถูกส่งกลับ แต่ยังมีช่องโหว่อยู่ โดยใช้ เรอ สวีท ฉันสามารถสกัดกั้นคำขอ HTTP POST และแทรกค่าได้ ผู้ดูแลระบบ. ฉันรู้ที่จะขอ ผู้ดูแลระบบ เพราะเป็นอาจารย์ใหญ่ใน /etc/ssh/auth_principals/เศวตศิลา บนเครื่องเสมือนและฉันต้องการเข้าถึงโฮมไดเร็กตอรี่ของ Alabaster

รูปที่ 12-ใบรับรอง-SSHenanigans-โซลูชัน

ด้วยใบรับรอง SSH สำหรับผู้ดูแลระบบหลักในมือ ฉันลงชื่อเข้าใช้เครื่องเสมือนเดียวกันกับ เศวตศิลา และพบรายการสิ่งที่ต้องทำของ Alabaster ในโฮมไดเร็กตอรี่ของเขา รายการมีคำธง: ขนมปังขิง.

Active Directory

เริ่มต้นบนเครื่องเสมือนเดียวกันกับความท้าทายครั้งก่อน ความท้าทายนี้พิจารณาว่ามีการกำหนดค่าผิดพลาดอย่างไร บริการใบรับรองไดเรกทอรีที่ใช้งานอยู่ ผู้โจมตีสามารถนำไปใช้ในทางที่ผิดเพื่อตรวจสอบสิทธิ์เป็นผู้ใช้รายอื่น เช่น เศวตศิลา ฉันมีไดเร็กทอรีที่เต็มไปด้วย อิมแพ็คเก็ต เครื่องมือส่วนใหญ่ต้องการชื่อโดเมนและที่อยู่ IP ของเซิร์ฟเวอร์เป้าหมาย และชื่อผู้ใช้และรหัสผ่านสำหรับการเข้าสู่ระบบ – ข้อมูลที่ฉันยังไม่มี

ขั้นตอนแรกที่ดีคือการหาสิทธิ์ของฉันสำหรับ Azure REST API เนื่องจากไม่จำเป็นต้องเรียก API ทีละรายการเพียงเพื่อพบกับข้อความปฏิเสธการอนุญาตเท่านั้น ดังนั้น ฉัน แสดงรายการสิทธิ์ทั้งหมดสำหรับกลุ่มทรัพยากร ที่ฉันค้นพบในการท้าทายครั้งก่อน

เนื่องจากฉันเห็นว่าฉันมีสิทธิ์หลายประการในการอ่าน Key Vault ฉันจึงย้ายไปที่ แสดงรายการพวกเขา และพบสอง: ขั้วโลกเหนือ-it-kv และ ขั้วโลกเหนือ-ssh-certs-kv.

ถึงเวลาเปลี่ยน API จนถึงตอนนี้ฉันได้โทรไปยังปลายทางแล้ว การจัดการ. azure.com แต่บางส่วนของ Azure Key Vault เปิดอยู่ vault.azure.net และทรัพยากรนี้ต้องการโทเค็นการเข้าถึงของตัวเอง อีกครั้งที่ฉันใช้ของฉัน จัดการข้อมูลประจำตัวเพื่อรับโทเค็นการเข้าถึง แต่คราวนี้เปลี่ยนทรัพยากรเป็น vault.azure.net.

In ขั้วโลกเหนือ-it-kvผม พบชื่อแห่งความลับ. โดยใช้ชื่อนั้นว่า I ขอทราบคุณค่าของความลับนี้ซึ่งกลายเป็นสคริปต์ PowerShell สำหรับ การสร้างผู้ใช้ Active Directory ที่เรียกว่า เอลฟี่. ที่สำคัญ ตอนนี้ฉันมีข้อมูลทั้งหมดที่จำเป็นในการใช้ประโยชน์จากชุดเครื่องมือ Imppacket แล้ว

การใช้ GetADUsers.py เปิดเผยผู้ใช้รายอื่นในโดเมนที่อาจสนใจ: วอมบลีย์คิวบ์. ฉันยังสามารถเชื่อมต่อผ่าน SMB ไปยังเซิร์ฟเวอร์ Active Directory ได้โดยใช้ smbclient.py. ส่วนแบ่งไฟล์ที่สนใจประกอบด้วย super_secret_research ไดเร็กทอรี แต่ฉันไม่สามารถอ่านได้ เอลฟี่.

โชคดีที่ฉันสามารถเข้าถึงเครื่องมืออื่นได้: รับรอง. ใช้เพื่อค้นหาเทมเพลตใบรับรองที่กำหนดค่าไม่ถูกต้องสำหรับ Active Directory Certificate Services และนำไปใช้ในทางที่ผิด เครื่องมือนี้แสดงรายการเทมเพลตที่มีช่องโหว่หนึ่งรายการเนื่องจากอนุญาตให้ผู้ร้องขอใบรับรองสามารถจัดหาเทมเพลตได้ตามอำเภอใจ ชื่อทางเลือกหัวเรื่อง และใบรับรองที่ออกให้การรับรองความถูกต้องไคลเอนต์สำหรับชื่อที่ให้มา

รูปที่ 13-Active-Directory-solution-1

หลังจากขอใบรับรองด้วย วอมบลีย์คิวบ์ เมื่อแทรกลงในฟิลด์ชื่อทางเลือกของหัวเรื่องแล้ว ฉันยังใช้ Certipy เพื่อรับแฮช NT ด้วย วอมบลีย์คิวบ์ โดยใช้ใบรับรองนั้น จากนั้นจึงส่งแฮชของ Wombley ไปที่ smbclient.pyฉันสามารถเชื่อมต่อผ่าน SMB ไปยังเซิร์ฟเวอร์ Active Directory ได้เช่น วอมบลีย์คิวบ์ และเข้าถึง super_secret_research ไดเร็กทอรีซึ่งมีคำแนะนำสำหรับความท้าทายถัดไป คำแนะนำสำหรับการเข้าสู่ดาวเทียมGroundStation.txt.

รูปที่ 14-Active-Directory-solution-2

ลำโพงเข้าถึงประตู Space Island

รูปที่ 15-เกาะอวกาศ-ท่าเรืออวกาศ-จุด

เพื่อเข้าถึงความท้าทายในระบบอวกาศ ภาคพื้นดินจำเป็นต้องใช้ LLM เพื่อสร้างเสียงปลอมของ Wombley Cube ที่พูดข้อความรหัสผ่าน เมื่อพิจารณาจากไฟล์เสียงของวอมบลีย์ที่เล่าเรื่องราวและข้อความรหัสผ่าน จึงเป็นเรื่องเล็กน้อยที่จะใช้ โลโว ไอ เพื่อสร้างเสียงจำลองของ Wombley เพื่อพูดข้อความรหัสผ่านและรับรองความถูกต้องได้สำเร็จ

หากไม่มีการป้องกันเพิ่มเติม การรับรองความถูกต้องด้วยเสียงต้องเผชิญกับความท้าทายร้ายแรงในฐานะกลไกการรักษาความปลอดภัยในยุคของ LLM

การเข้าถึงกล้อง

รูปที่ 16-เกาะอวกาศ-สุดยอด-SGS

หลังจากพูดข้อความรหัสผ่านแล้ว ฉันก็ขึ้นรถไฟที่พาฉันไปยังส่วนพื้นดินที่รับผิดชอบในการสื่อสารกับในเกม CubeSatซึ่งเป็นดาวเทียมขนาดเล็กประเภทหนึ่ง ในสถานีภาคพื้นดินเราได้รับ Wireguard การกำหนดค่าเพื่อตั้งค่าการเชื่อมต่อที่เข้ารหัสกับ CubeSat นี้

ซอฟต์แวร์บนดาวเทียมนี้สามารถใช้งานร่วมกับ กรอบงาน NanoSat MO (NMF) ซึ่งเป็นเฟรมเวิร์กซอฟต์แวร์ที่พัฒนาโดย European Space Agency สำหรับ CubeSats กรอบนี้มาพร้อมกับ SDK สำหรับการพัฒนาและทดสอบแอปอวกาศ นอกจากนี้ ยังมี Consumer Test Tool (CTT) ให้เป็นทั้งแอปภาคพื้นดินและเครื่องมือบรรทัดคำสั่ง เพื่อเชื่อมต่อกับหัวหน้างานภายในเครื่อง ซึ่งเป็นผู้จัดเตรียมซอฟต์แวร์ที่ดูแลการเริ่มและหยุดแอปอวกาศ ตลอดจนประสานงานงานอื่นๆ

ความท้าทายคือการหาวิธีสั่งให้แอปกล้องในตัวถ่ายภาพ จากนั้นจึงดึงสแนปช็อตกลับมา ฉันทำตามขั้นตอนต่อไปนี้

หลังจากบูตอินเทอร์เฟซ CTT ฉันป้อน URI ของหัวหน้างานเพื่อเชื่อมต่อกับหัวหน้างาน จากนั้นฉันตรวจสอบแอปที่มีอยู่ พบแอปกล้อง และเริ่มต้นใช้งาน แอปกล้องถ่ายรูปส่งคืน URI ซึ่งฉันใช้เชื่อมต่อ ต่อไป ฉันดำเนินการการกระทำ Base64SnapImage ซึ่งสั่งให้กล้องออนบอร์ดถ่ายภาพ

แอพกล้องยังมีบริการพารามิเตอร์ที่สามารถส่งคืนค่าได้สองค่า: จำนวนสแนปที่ถ่ายและสแนปช็อต JPG ที่เข้ารหัสใน base64 อย่างไรก็ตาม ดูเหมือนว่าอินเทอร์เฟซ CTT จะไม่มีวิธีดูภาพหรือคัดลอกค่าพารามิเตอร์โดยตรงจากอินเทอร์เฟซ แม้ว่าฉันจะเห็นว่ามีค่าที่ต้องการอยู่ก็ตาม ดังนั้นฉันจึงต้องการวิธีวงเวียนเพื่อให้ได้ภาพ

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

เนื่องจากฉันใช้ CTT ในคอนเทนเนอร์ Docker ฉันจึงคัดลอกไฟล์ไปยังระบบโฮสต์ของฉันด้วย นักเทียบท่า cpลบ cruft ออกจากเนื้อหาไฟล์ จากนั้น base64 ถอดรหัสรูปภาพเพื่อดูแฟล็ก: พิชิตเทศกาลวันหยุด!.

รูปที่ 19-Camera-app-snapshot

การเบี่ยงเบนขีปนาวุธ

ความท้าทายสุดท้ายคือการใช้ ระบบกำหนดเป้าหมายขีปนาวุธ แอพบน CubeSat ในเกมเพื่อเปลี่ยนเส้นทางขีปนาวุธจากโลกไปยังดวงอาทิตย์ แอพนี้ให้การกระทำเดียวเท่านั้น: การแก้ปัญหา. การรันดูเหมือนจะไม่ได้ผลอะไรมากยกเว้นการพิมพ์ SQL VERSION คำสั่งและเอาต์พุตราวกับว่ามันถูกรันโดยฐานข้อมูลที่แอพใช้:

เวอร์ชัน (): 11.2.2-MariaDB-1:11.2.2+maria~ubu2204

ฉันสงสัยทันทีว่ามีช่องโหว่การฉีด SQL เกิดขึ้นหรือไม่ อินเทอร์เฟซ CTT จัดให้มีฟิลด์เพื่อป้อนอาร์กิวเมนต์สำหรับ การแก้ปัญหา ดังนั้นฉันจึงลองฉีดคำสั่งอื่น:

; แสดงทุนสำหรับ CURRENT_USER();

เงินช่วยเหลือสำหรับ targeter@%: ให้สิทธิ์การใช้งานบน *.* ถึง `targeter`@`%` ระบุด้วยรหัสผ่าน '*41E2CFE844C8F1F375D5704992440920F11A11BA' |

เงินช่วยเหลือสำหรับ targeter@%: ให้สิทธิ์เลือก แทรกบน `missile_targeting_system`.`satellite_query` ถึง `targeter`@`%` |

เงินช่วยเหลือสำหรับ targeter@%: ให้สิทธิ์เลือกบน `missile_targeting_system`.`pointing_mode` ถึง `targeter`@`%` |

เงินช่วยเหลือสำหรับ targeter@%: ให้สิทธิ์เลือกบน `missile_targeting_system`.`การส่งข้อความ` ถึง `targeter`@`%` |

เงินช่วยเหลือสำหรับ targeter@%: ให้สิทธิ์เลือกใน `missile_targeting_system`.`target_coordinates` ถึง `targeter`@`%` |

เงินช่วยเหลือสำหรับ targeter@%: ให้สิทธิ์เลือกบน `missile_targeting_system`.`pointing_mode_to_str` ถึง `targeter`@`%` |

เอาล่ะ ถึงเวลาปล้นฐานข้อมูลแล้ว! ที่ pointing_mode และ pointing_mode_to_str ตารางที่ระบุว่าขีปนาวุธกำลังชี้ไปที่ใด:

; SELECT * จาก pointing_mode;

รหัส: 1 | numerical_mode: 0 |

; SELECT * จาก pointing_mode_to_str;

รหัส: 1 | numerical_mode: 0 | str_mode: โหมดจุดโลก | str_desc: เมื่อ pointing_mode เป็น 0 ระบบการกำหนดเป้าหมายจะใช้ target_coordinates กับ Earth |

รหัส: 2 | numerical_mode: 1 | str_mode: โหมดจุดดวงอาทิตย์ | str_desc: เมื่อ pointing_mode เป็น 1 ระบบการกำหนดเป้าหมายจะชี้ไปที่ดวงอาทิตย์ โดยไม่สนใจพิกัด |

จากข้อมูลนี้ผมเห็นว่าจำเป็นต้องเปลี่ยน ตัวเลข_โหมด ค่าใน pointing_mode ตารางที่ 1แต่ฉันไม่ได้รับอนุญาตให้อัปเดตตารางนั้น

ฉันได้รับอนุญาตให้แทรกแถวใหม่ลงใน ดาวเทียม_แบบสอบถาม ตาราง ซึ่งปัจจุบันมีหนึ่งแถวโดยมีค่าที่ยังไม่ทราบใน วัตถุ คอลัมน์และซอร์สโค้ดของคลาส Java ที่เรียกว่า SatelliteQueryFileFolderยูทิลิตี้ ใน ผล คอลัมน์.

ถึงจุดนี้เอาท์พุตจาก การแก้ปัญหา การกระทำสามารถดูได้ง่ายในบานหน้าต่างที่ด้านล่างของ บริการตัวเรียกใช้งานแอป แท็บที่จัดทำโดยหัวหน้างานในอินเทอร์เฟซ CTT อย่างไรก็ตาม ดูเหมือนว่าค่าออบเจ็กต์จะแสดงผลไม่ถูกต้องในบานหน้าต่าง ตามหลักการแล้ว เป็นการดีที่จะเห็นการถ่ายโอนข้อมูลฐานสิบหกของวัตถุ ซึ่งสามารถรับได้ด้วยความช่วยเหลือจาก Wireshark หรือโดยใช้ SQL HEX การทำงาน. สิ่งนี้เปิดเผยว่าฉันกำลังจัดการกับวัตถุ Java ที่ทำให้เป็นอนุกรม

หลังจาก กำลังอ่านอยู่ โปรโตคอลการทำให้เป็นอนุกรมวัตถุ Java ฉันจัดการเพื่อถอดรหัสไบต์ฐานสิบหก:

ไบต์ฐานสิบหก

สัญลักษณ์/ความหมาย

หมายเหตุ (ค่า ASCII ของไบต์ฐานสิบหกในแบบอักษร monospaced)

Aced

สตรีม_เมจิก

เลขมหัศจรรย์.

0005

STREAM_VERSION

เวอร์ชันโปรโตคอลสตรีมคือ 2

73

TC_OBJECT

จุดเริ่มต้นของวัตถุ

72

TC_CLASSDESC

จุดเริ่มต้นของคำจำกัดความของคลาส

001F

ความยาว

ชื่อคลาสมีความยาว 31 ไบต์

536174656C6C697465517
565727946696C65466F6C
6465725574696C697479

ความคุ้มค่า

ชื่อชั้นเรียนคือ SatelliteQueryFileFolderยูทิลิตี้.

12D4F68D0EB392CB

serialVersionUID

ตัวระบุเฉพาะที่เกี่ยวข้องกับคลาสซีเรียลไลซ์นี้

02

SC_ซีเรียลไลซ์ได้

คลาสเป็นแบบซีเรียลไลซ์ได้

0003

สนามนับ

ชั้นเรียนมีสามช่อง

5A

ชนิดข้อมูล – ค่า ASCII Z

ฟิลด์แรกคือบูลีน

0007

ความยาว

ชื่อของฟิลด์นี้มีความยาว 7 ไบต์

69735175657279

Name

ชื่อของฟิลด์นี้คือ isQuery.

5A

ชนิดข้อมูล – ค่า ASCII Z

ฟิลด์ที่สองคือบูลีน

0008

ความยาว

ชื่อของฟิลด์นี้มีความยาว 8 ไบต์

6973557064617465

Name

ชื่อของฟิลด์นี้คือ คืออัปเดต.

4C

ชนิดข้อมูล – ค่า ASCII L

ฟิลด์ที่สามคือวัตถุ

000F

ความยาว

ชื่อของฟิลด์นี้มีความยาว 15 ไบต์

706174684F72537
46174656D656E74

Name

ชื่อของฟิลด์นี้คือ เส้นทางหรือคำสั่ง .

74

TC_STRING

ประเภทคลาสของวัตถุนี้ถูกกำหนดไว้ในสตริง

0012

ความยาว

สตริงนี้มีความยาว 18 ไบต์

4C6A6176612F6C616E
672F537472696E673B

ความคุ้มค่า

ประเภทคลาสของวัตถุนี้คือ ชวา/lang/สตริง.

78

TC_ENDBLOCKDATA

จุดสิ้นสุดของคำจำกัดความของชั้นเรียน

70

TC_NULL

ไม่มีการกำหนดซูเปอร์คลาส

00

ความคุ้มค่า

ฟิลด์บูลีน isQuery มีค่า เท็จ.

00

ความคุ้มค่า

ฟิลด์บูลีน คืออัปเดต มีค่า เท็จ.

74

TC_STRING

ค่าของ เส้นทางหรือคำสั่ง ฟิลด์เป็นสตริง

0029

ความยาว

ค่าของ เส้นทางหรือคำสั่ง ฟิลด์มีความยาว 41 ไบต์

2F6F70742F536174656C6
C69746551756572794669
6C65466F6C64657255746
96C6974792E6A617661

ความคุ้มค่า

ค่าของ เส้นทางหรือคำสั่ง ฟิลด์คือ /opt/SatelliteQueryFileFolderUtility.java

การรับวัตถุนี้ผ่าน Wireshark จะส่งคืนหมายเลขเวทย์มนตร์ที่ไม่ถูกต้องและ serialVersionUIDแต่ไม่ใช่เมื่อใช้ฟังก์ชัน HEX

เพื่อทำความเข้าใจว่าอะไร. INSERT เข้าไปใน ดาวเทียม_แบบสอบถาม table จะทำอย่างไร ฉันแทรกวัตถุนี้ลงในแถวใหม่ของตารางและได้รับซอร์สโค้ด Java เดียวกันกลับมาใน ผล คอลัมน์. ที่จริงแล้วพฤติกรรมนี้สอดคล้องกับสิ่งที่ฉันเห็นในโค้ดนั้นว่าเป็น รับผลลัพธ์ ฟังก์ชั่นของ SatelliteQueryFileFolderยูทิลิตี้ วัตถุ.

ฟังก์ชันนี้ใช้เส้นทางการดำเนินการที่แตกต่างกัน ขึ้นอยู่กับค่าของฟิลด์ทั้งสามของออบเจ็กต์: isQuery, คืออัปเดตและ เส้นทางหรือคำสั่ง. ถ้าฉันsQuery และ คืออัปเดต เป็นเท็จ จากนั้นฟังก์ชันจะตรวจสอบว่า เส้นทางหรือคำสั่ง เป็นเส้นทางและไดเร็กทอรี หากเป็นเช่นนั้น ระบบจะส่งคืนรายการไฟล์ที่อยู่ในไดเร็กทอรี มิฉะนั้นจะถือว่ามีการจัดเตรียมไฟล์ไว้และพยายามส่งคืนเนื้อหาของไฟล์นั้น

ในทางกลับกัน หาก isQuery และ isUpdate เป็นจริง ฟังก์ชันจะดำเนินการเนื้อหาของ pathOrStatement เป็น SQL อัพเดท คำแถลง. สิ่งที่ฉันจำเป็นต้องดำเนินการคือ:

อัปเดต pointing_mode SET numerical_mode = 1;

ฉันเปลี่ยนไบต์ที่จำเป็น (เน้นด้านล่าง) ในวัตถุต่อเนื่องกันและฉีดคำสั่งที่ชนะ:

; แทรกลงใน satellite_query

(วัตถุ)

  VALUES

(0xACED00057372001F536174656C6C697465517565727946696C65466F6C6465725574696C69747912D4F68D0EB392CB0200035A0007697351756572795A000869735570646174654C000F706174684F7253746174656D656E747400124C6A6176612F6C616E672F537472696E673B7870010174002C55504441544520706F696E74696E675F6D6F646520534554206E756D65726963616C5F6D6F6465203D20313B)

ปรับตัวขึ้น

รูปที่-20-ตอนจบ

นี่เป็นเพียงบางส่วนที่ครอบคลุมใน SANS Holiday Hack Challenge ปี 2023 มีอีกหลายคนที่มองเรื่องความปลอดภัยของ โทเค็นเว็บ JSON,ถอดรหัสรหัสผ่านด้วย hashcat,เสมือนการแคร็กของล็อคกระเป๋าเดินทางและ ล็อคแบบรวมแบบหมุน, การฉีด Python NaN, ใช้ ภาษาแบบสอบถาม Kusto for การล่าภัยคุกคาม, กำลังตรวจสอบ บันทึก DKIM และ SPF เพื่อช่วยระบุอีเมลที่เป็นอันตรายและมินิเกมที่สามารถแฮ็กได้

โดยรวมแล้ว ฉันมั่นใจว่าชุดความท้าทายที่สนุกสนานที่หลากหลายเช่นนี้จะสอนใครก็ตามที่พยายามจะเผชิญความท้าทายไม่ได้ และในขณะที่ฉันกำลังตั้งตารอการท้าทายในปีหน้าอยู่แล้ว ก็ขอขอบคุณผู้จัดงาน SANS Holiday Hack Challenge ที่ได้รวบรวมการท้าทายในปีนี้ไว้ด้วยกัน

สามารถอ่านไฮไลท์ของผมจากชาเลนจ์ปี 2022 ได้ที่ แตกเลย! ไฮไลท์จาก KringleCon 5: Golden Rings.

จุด_img

ข่าวกรองล่าสุด

จุด_img