2016-11-24 71 views
3

我正在運行一個將在我的本地主機上打開的腳本。我的本地服務器是一個易受攻擊的Web應用測試套件如何使用Nokgiri或Mechanise確認JavaScript彈出框

我在嘗試從JavaScript警報中確認XSS彈出窗口。例如:

http://127.0.0.1:65412/v?=0.2<script>alert("TEST");</script> 

我需要確認使用Mechanize或Nokogiri發生的彈出。是否有可能確認Nokogiri或Mechanize彈出窗口?

例如:

def page(site) 
    Nokogiri::HTML(RestClient.get(site)) 
end 

puts page('http://127.0.0.1:65412/v?=0.2<script>alert("TEST");</script>') 

回答

2

引入nokogiri,而且機械化,因爲它是建立在引入nokogiri的頂部,可以解析HTML和返回<script>標籤的內容。標籤的內容是文本,以便在這一點上,有必要看看裏面的文字找到你想要的東西:

require 'nokogiri' 

doc = Nokogiri::HTML(<<EOT) 
<html> 
<head> 
<script>alert("TEST");</script> 
</head> 
</html> 
EOT 

script_content = doc.at('script').content # => "alert(\"TEST\");" 

可以很容易地檢查,看是否有子串存在於這一點:

script_content['alert("TEST");'] # => "alert(\"TEST\");" 

或:

!!script_content['alert("TEST");'] # => true 

注:這是不可能的引入nokogiri,或機械化,以判斷是否發生了彈出作爲會在瀏覽器中發生,因爲它運行JavaScript的。 Nokogiri和Mechanize都不理解或解釋JavaScript。只有像Watir這樣的工具或解釋JavaScript的工具才能做到這一點。

1

非也,那是因爲沒有機械化或引入nokogiri運行JavaScript。

取而代之,您可以使用Selenium

事情是這樣的:

require 'selenium-webdriver' 

class AlertChecker 
    Driver = Selenium::WebDriver.for :firefox 
    def initialize(url) 
    Driver.navigate.to url 
    end 
    def raise_alert(text) 
    Driver.execute_script "alert('#{text}')" 
    self 
    end 
    def safely_get_alert 
    begin 
     Driver.switch_to.alert 
    rescue Selenium::WebDriver::Error::NoAlertOpenError 
    end 
    end 
end 

用法:

alert_checker = AlertChecker.new("http://my.website") 

alert = alert_checker.safely_get_alert 
# => nil 

alert_checker.raise_alert("hack") 
alert = alert_checker.safely_get_alert 
puts alert.text 
# => 'hack' 

# As far as I'm aware Selenium doesn't have a built-in way 
# to tell you if it's an alert, confirm, or prompt. 
# But you know it's a prompt, for example, you could also send 
# keys before accepting or dismissing 
alert.accept 

alert = alert_checker.safely_get_alert 
# => nil 

沒有與硒的處理警報的一些技巧性的東西,雖然。

沒有使用像rescuetry這樣的東西,您的代碼無法檢測類型(提示,確認或提醒)。一切都通過switch_to.alert達成。另外,如果您的瀏覽器打開了警報,則除非您處理警報,否則無法運行任何後續命令。假設您在嘗試打開警報時嘗試navigate.to;你會得到一個錯誤你沒有處理警報和你的navigate.to命令將不得不重新運行。發生此錯誤時,警報對象也會丟失。

這是一個有點吸引力使用救援以這種方式控制結構,但我不知道有任何其他選項

+0

那麼這是什麼,有沒有辦法通過html找到它?就像會有一個腳本標籤來解析? – papasmurf

+1

可能確保知道XSS的最簡單方法是運行Javascript(不能與Nokogiri/Mechanize一起使用)。 –

+0

是的,我不認爲這會很容易 – papasmurf