ผู้สอน: เอาล่ะ ตอนนี้ฉันต้องการแสดงให้คุณเห็นการฉีด
SQL และในไฟล์อื่นและในหน้าต่างๆ และฉันจะแสดงให้คุณเห็นบางสิ่งที่แตกต่างกันซึ่งคุณสามารถทำได้เพื่อใช้ประโยชน์จากช่องโหว่
สิ่งแรกที่ฉันจะไปที่หน้าเข้าสู่ระบบซึ่งอยู่ในนี้
ข้อมูลผู้ใช้
ครั้งแรกที่เราไปที่หน้าเข้าสู่ระบบจากที่นั่น คราวนี้เราไปที่หน้าข้อมูลผู้ใช้
ดังนั้นหน้านี้จะแสดงข้อมูลเกี่ยวกับผู้ใช้ที่ให้ชื่อผู้ใช้และรหัสผ่านแก่คุณ
ฉันจะทำ zaid และฉันจะใส่รหัสผ่าน
123456
และมันจะแสดงรายละเอียด ชื่อผู้ใช้และรหัสผ่านของฉัน และลายเซ็นของฉันเป็น
aa
ดังนั้นคำสั่งที่กำลังดำเนินการที่นี่จึงคล้ายกับที่ดำเนินการเมื่อคุณเข้าสู่ระบบ
ดังนั้นการเลือกดาวจากบัญชีที่ชื่อผู้ใช้คือสิ่งที่คุณใส่ลงในช่องผู้ใช้และรหัสผ่านคือสิ่งที่คุณใส่ลงในช่องรหัสผ่าน
สิ่งที่เราจะทำตอนนี้คือเราจะเห็นวิธีที่แตกต่างออกไป
ในการใช้ประโยชน์จากช่องโหว่ประเภทนี้
ในวิดีโอที่แล้ว
เราทำโดยใช้กล่องข้อความ POST
ดังนั้นสิ่งที่คุณใส่ในกล่องข้อความจะถูกโพสต์โดยใช้วิธีการ
POST ไปยังเว็บแอปพลิเคชัน
ตอนนี้ ช่องโหว่เหล่านี้สามารถมีอยู่ใน GET
และสิ่งที่ฉันหมายถึงโดย
Get คือเมื่อคุณทำ Get เมื่อบางสิ่งถูกส่งเป็น GET คุณจะเห็นที่นี่ใน
URL
ดังนั้น หากคุณดู URL
ที่นี่ คุณจะเห็นว่ามันถูกส่งเป็นชื่อผู้ใช้
zaid และรหัสผ่าน 123456
ขอผมคัดลอก URL นี้ที่นี่
และเราจะเริ่มเล่นกับมันจาก
URL แทนที่จะทำบนหน้าเว็บ
ฉันแค่อยากให้คุณเห็นตัวอย่างที่แตกต่างออกไป
เพราะในหลาย ๆ ที่ อาจไม่มีแม้กระทั่งกล่องข้อความ ตัวอย่างเช่น อาจเป็นบางอย่างเช่น
ข่าวและข่าว
php
ให้ดูตรงนี้ครับ ในตัวอย่างนี้ มันคือ index.php php.php
และในการทดสอบด้วยปากกา คุณอาจเห็นบางอย่างเช่นข่าว
php
และตัวอย่างเช่น id เท่ากับสอง จากนั้นคุณสามารถลองแทรกข้อมูลในนั้นได้
เรามีตัวอย่างที่เราจะฉีดเข้าไปในช่อง
username ซึ่งก็คือช่องนี้ และเราจะใส่ข้อมูลต่างๆ
ลงในนี้
ดังนั้นทุกครั้งที่คุณทำการทดสอบด้วยปากกา
เมื่อใดก็ตามที่คุณเห็นพารามิเตอร์เช่นนี้ คุณควรพยายามฉีดเข้าไป
ทุกครั้งที่เห็นอะไรบางอย่าง php แล้วคุณมี
Parameter เท่ากับอะไรสักอย่าง
แล้วลองใส่ข้อมูลลงไปดูว่าเหมาะกับคุณหรือไม่
ดังนั้นเราจึงได้เห็นวิธีการค้นพบการฉีดด้วย
นั่นคือการใช้เครื่องหมายคำพูดและการใช้
and
เราจึงทำการเท็จและจริง และหนึ่ง
เท่ากับหนึ่งแล้วหนึ่ง
เท่ากับสอง และหากเซิร์ฟเวอร์ดำเนินการตามที่เราต้องการ
เราจะรู้ว่ามีการฉีด SQL
ผมจะแสดงให้คุณเห็นอีกวิธีหนึ่งในการค้นพบช่องโหว่เหล่านี้
และมันใช้ลำดับโดย
ตามชื่อที่แนะนำ
ลำดับตามคำสั่งใช้เพื่อเรียงลำดับผลลัพธ์ที่เราได้รับบนหน้าจอตามคอลัมน์เฉพาะ
การฉีดของเราจะเป็นแบบนี้
เลยจะสั่งทีละอย่าง
ดังนั้น ถ้ามีการฉีดอยู่ สิ่งนี้น่าจะใช้ได้เพราะในแต่ละคำสั่ง
select ควรมีการเลือกอย่างน้อยหนึ่งคอลัมน์
ดังนั้นเมื่อเราพูดตามลำดับ
เรากำลังบอกว่าฉันต้องการเรียงลำดับผลลัพธ์ตามคอลัมน์แรก
ดังนั้น ฐานข้อมูลควรยอมรับสิ่งนี้เสมอ
และคืนความจริงหรือสิ่งที่เราคาดหวัง
เรายังต้องเพิ่มความคิดเห็นที่นี่และรันโค้ดนี้
มันก็เหมือนกับเมื่อก่อนนั่นแหละ
เมื่อเราทำสิ่งนี้
โดยพื้นฐานแล้ว นี่คือ URL ของเรา และสิ่งที่จะเกิดขึ้นกับฐานข้อมูล
ดังนั้นนี่คือโค้ดที่กำลังรันบนฐานข้อมูล มันจะออกมาเป็นแบบนี้
ดังนั้นมันจะเลือกดาวจากบัญชีที่ชื่อผู้ใช้เท่ากับ
zaid และสังเกตว่าสิ่งนี้จะปิดใบเสนอราคาและเราจะดำเนินการสั่งซื้อทีละรายการและไม่ควรมีรหัสนี้สำหรับ
และ และความคิดเห็นนี้จะบอก
ล่าม SQL เพื่อละเว้นสิ่งใดก็ตามที่เข้ามาหลังจากนั้น ทั้งหมดนี้จะถูกละเว้น
ฉันกำลังคัดลอกสิ่งนี้
ดังนั้น คุณสามารถวางการฉีดยานี้สำหรับลำดับ
zaid ทีละชื่อในชื่อตรงนี้ และนั่นก็ใช้ได้
แต่อีกครั้ง ฉันแค่อยากจะแสดงให้คุณเห็นวิธีการทำที่ต่างออกไป โดยการฉีดผ่านเบราว์เซอร์
อีกสิ่งหนึ่งที่ฉันต้องการให้คุณทราบคือ
เมื่อคุณฉีดข้อมูลต่างๆ ลงในเบราว์เซอร์ เบราว์เซอร์ ควรเข้ารหัสโค้ด
ตัวอย่างเช่น เครื่องหมายนี้โดยปกติ
เมื่อคุณใส่ลงใน URL
ควรเขียนเป็น %23
ตัวอย่างเช่น Spaces ถูกแปลงเป็น
%20 และ %23 เป็นความคิดเห็นที่เรากำลังใช้
ดังนั้นฉันจะคัดลอกและแทนที่เครื่องหมายความคิดเห็นด้วย
ตอนนี้คุณสามารถ google HTTP Encoder
และคุณจะเห็นว่าออนไลน์มีเครื่องมือออนไลน์ที่จะแปลงสิ่งนี้ให้คุณ
สำหรับฉันตอนนี้ ฉันรู้แล้วว่าแฮชแท็กสามารถแปลงเป็น
%20 ได้
นั่นเป็นเหตุผลที่ฉันใช้มันที่นั่น
และฉันจะกด Enter
และอย่างที่คุณเห็นตอนนี้
เราเห็นบางสิ่งที่ยอมรับได้
ไม่มีอะไรผิดปกติ แล้วมันก็แสดงข้อมูลเกี่ยวกับ
zaid 123456 และแสดงลายเซ็นให้ฉันดู
ดังนั้นมันจึงเพิกเฉยต่อรหัสผ่าน
ดังนั้นการฉีดจึงทำงานและมีการเรียงลำดับทีละตัว จึงไม่แสดงให้ฉันเห็นสิ่งผิดปกติ
ลองทำให้เลขนี้หนึ่งเป็นจำนวนที่มาก
ผมจะใส่ 10,000 หรือ 100,000 เดี๋ยวนี้
สิ่งที่เราพูดในตอนนี้คือ
ฉันต้องการให้คุณเรียงลำดับผลลัพธ์ที่จะถูกส่งกลับโดยคำสั่ง
select ปัจจุบันตามคอลัมน์ 100,000
ขณะนี้มีโอกาสไม่มีคอลัมน์ 100,000 ที่ใช้ในคำสั่ง
select นี้ ดังนั้นสิ่งนี้ควรส่งคืนข้อผิดพลาด
เมื่อฉันดำเนินการนี้
คุณจะเห็นว่ามีข้อผิดพลาด
และข้อผิดพลาดอยู่ในลำดับที่ใกล้เคียง
และยังมีคอลัมน์ที่ไม่รู้จักสำหรับ 100,000 คอลัมน์และนี่ก็เยี่ยมมากเพราะตอนนี้เรารู้ว่าฐานข้อมูลกำลังดำเนินการตามที่เราต้องการ
ดังนั้นเมื่อเราบอกให้เรียงลำดับผลลัพธ์ตามคอลัมน์แรก
มันแสดงผลลัพธ์ให้เราทราบ
ดังนั้นมันจึงเป็นไปตามที่เราบอก
และเมื่อเราบอกให้เรียงลำดับผลลัพธ์ตามคอลัมน์ที่ไม่มีอยู่
มันทำให้เราเกิดข้อผิดพลาด
ดังนั้นจึงเห็นได้ชัดว่ามีความเสี่ยงต่อการฉีด SQL