การตรวจสอบฝั่งไคลเอ็นต์
ในบทนี้เราจะเรียนรู้ว่าการตรวจสอบความถูกต้องช่วยใน Python Pentesting อย่างไร
เป้าหมายหลักของการตรวจสอบความถูกต้องคือการทดสอบและตรวจสอบให้แน่ใจว่าผู้ใช้ได้ให้ข้อมูลที่จำเป็นและมีรูปแบบที่ถูกต้องซึ่งจำเป็นในการดำเนินการให้สำเร็จ
การตรวจสอบความถูกต้องมีสองประเภทที่แตกต่างกัน -
- การตรวจสอบฝั่งไคลเอ็นต์ (เว็บเบราว์เซอร์)
- การตรวจสอบฝั่งเซิร์ฟเวอร์
การตรวจสอบฝั่งเซิร์ฟเวอร์และการตรวจสอบฝั่งไคลเอ็นต์
การตรวจสอบอินพุตของผู้ใช้ที่เกิดขึ้นบนฝั่งเซิร์ฟเวอร์ในระหว่างเซสชันการโพสต์แบ็คจะถูกเรียก server-side validation. ภาษาเช่น PHP และ ASP.Net ใช้การตรวจสอบฝั่งเซิร์ฟเวอร์ เมื่อกระบวนการตรวจสอบความถูกต้องในฝั่งเซิร์ฟเวอร์สิ้นสุดลงคำติชมจะถูกส่งกลับไปยังไคลเอนต์โดยการสร้างหน้าเว็บใหม่และมีไดนามิก ด้วยความช่วยเหลือของการตรวจสอบความถูกต้องทางฝั่งเซิร์ฟเวอร์เราจะได้รับการป้องกันจากผู้ใช้ที่ประสงค์ร้าย
ในทางกลับกันการตรวจสอบอินพุตผู้ใช้ที่เกิดขึ้นบนฝั่งไคลเอ็นต์เรียกว่าการตรวจสอบความถูกต้องฝั่งไคลเอ็นต์ ภาษาสคริปต์เช่น JavaScript และ VBScript ใช้สำหรับclient-side validation. ในการตรวจสอบประเภทนี้การตรวจสอบความถูกต้องของผู้ใช้ทั้งหมดจะกระทำในเบราว์เซอร์ของผู้ใช้เท่านั้น มันไม่ปลอดภัยเหมือนการตรวจสอบฝั่งเซิร์ฟเวอร์เนื่องจากแฮ็กเกอร์สามารถข้ามภาษาสคริปต์ฝั่งไคลเอ็นต์ของเราได้อย่างง่ายดายและส่งข้อมูลที่เป็นอันตรายไปยังเซิร์ฟเวอร์
Tempering Client-side Parameter: Validation Bypass
การส่งผ่านพารามิเตอร์ในโปรโตคอล HTTP สามารถทำได้โดยใช้วิธีการ POST และ GET GET ใช้เพื่อขอข้อมูลจากทรัพยากรที่ระบุและ POST ใช้เพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์เพื่อสร้างหรืออัปเดตทรัพยากร ความแตกต่างที่สำคัญอย่างหนึ่งระหว่างวิธีการทั้งสองนี้คือหากเว็บไซต์ใช้เมธอด GET พารามิเตอร์การส่งผ่านจะแสดงใน URL และเราสามารถเปลี่ยนพารามิเตอร์นี้และส่งต่อไปยังเว็บเซิร์ฟเวอร์ ตัวอย่างเช่นสตริงการสืบค้น (คู่ชื่อ / ค่า) ถูกส่งไปใน URL ของคำขอ GET:/test/hello_form.php?name1 = value1&name2 = value2. ในทางกลับกันพารามิเตอร์จะไม่แสดงขณะใช้วิธี POST ข้อมูลที่ส่งไปยังเซิร์ฟเวอร์ด้วย POST จะถูกเก็บไว้ในเนื้อหาการร้องขอของคำร้องขอ HTTP ตัวอย่างเช่น POST/test/hello_form.php HTTP/1.1 Host: ‘URL’ name1 = value1&name2 = value2.
โมดูล Python สำหรับการตรวจสอบ Bypass
โมดูล Python ที่เราจะใช้คือ mechanize. เป็นเว็บเบราว์เซอร์ Python ซึ่งให้ความสะดวกในการรับเว็บฟอร์มในหน้าเว็บและอำนวยความสะดวกในการส่งค่าอินพุตด้วย ด้วยความช่วยเหลือของเครื่องจักรเราสามารถข้ามการตรวจสอบความถูกต้องและพารามิเตอร์ฝั่งไคลเอ็นต์อารมณ์ได้ อย่างไรก็ตามก่อนที่จะนำเข้าในสคริปต์ Python ของเราเราจำเป็นต้องติดตั้งโดยดำเนินการคำสั่งต่อไปนี้ -
pip install mechanize
ตัวอย่าง
ต่อไปนี้เป็นสคริปต์ Python ซึ่งใช้กลไกเพื่อข้ามการตรวจสอบความถูกต้องของเว็บฟอร์มโดยใช้วิธี POST เพื่อส่งผ่านพารามิเตอร์ แบบฟอร์มเว็บได้จากลิงค์https://www.tutorialspoint.com/php/php_validation_example.htm และสามารถใช้ในเว็บไซต์จำลองใดก็ได้ที่คุณเลือก
เริ่มต้นด้วยให้เรานำเข้าเบราว์เซอร์กลไก -
import mechanize
ตอนนี้เราจะสร้างวัตถุชื่อ brwsr ของเบราว์เซอร์กลไก -
brwsr = mechanize.Browser()
โค้ดบรรทัดถัดไปแสดงว่าตัวแทนผู้ใช้ไม่ใช่หุ่นยนต์
brwsr.set_handle_robots( False )
ตอนนี้เราจำเป็นต้องระบุ url ของเว็บไซต์จำลองของเราซึ่งมีแบบฟอร์มเว็บที่เราต้องการเพื่อหลีกเลี่ยงการตรวจสอบความถูกต้อง
url = input("Enter URL ")
ตอนนี้บรรทัดต่อไปนี้จะตั้งค่าพาเรนต์บางส่วนเป็นจริง
brwsr.set_handle_equiv(True)
brwsr.set_handle_gzip(True)
brwsr.set_handle_redirect(True)
brwsr.set_handle_referer(True)
จากนั้นจะเปิดหน้าเว็บและพิมพ์แบบฟอร์มเว็บในหน้านั้น
brwsr.open(url)
for form in brwsr.forms():
print form
โค้ดบรรทัดถัดไปจะข้ามการตรวจสอบความถูกต้องในฟิลด์ที่กำหนด
brwsr.select_form(nr = 0)
brwsr.form['name'] = ''
brwsr.form['gender'] = ''
brwsr.submit()
ส่วนสุดท้ายของสคริปต์สามารถเปลี่ยนแปลงได้ตามช่องของเว็บฟอร์มที่เราต้องการข้ามการตรวจสอบความถูกต้อง ที่นี่ในสคริปต์ด้านบนเราได้นำสองฟิลด์ -‘name’ และ ‘gender’ ซึ่งไม่สามารถเว้นว่างได้ (คุณสามารถดูได้ในการเข้ารหัสของเว็บฟอร์ม) แต่สคริปต์นี้จะข้ามการตรวจสอบความถูกต้องนั้น