2016-11-24 7 views
3

내 로컬 호스트에서 열리는 스크립트를 실행하고 있습니다. 내 로컬 서버는 취약한 웹 응용 프로그램 테스트 제품군입니다.Nokgiri 또는 Mechanize를 사용하여 JavaScript 팝업을 확인하는 방법

JavaScript 경고에서 XSS 팝업을 확인하려고합니다. 예 :

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

기계화 또는 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

노코 기리 잘 모르는 것 같아요, 그리고 그것은 노코 기리의 상단에 내장되어 있기 때문에, HTML을 구문 분석 할 수 기계화 및 <script> 태그의 콘텐츠를 반환하십시오.

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

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");'] # => true 

참고 : 그것은 자바 스크립트를 실행으로 그 브라우저 내에서 일어날 것 같은 팝업이 발생한 경우 말해, 노코 기리, 또는 기계화와 수 없습니다. Nokogiri 나 Mechanize는 JavaScript를 이해하거나 해석하지 않습니다. Watir이나 JavaScript를 해석하는 도구 만 그렇게 할 수 있습니다.

1

확실히하고, 기계화 또는 노코 기리도 자바 스크립트를 실행하기 때문입니다.

대신 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 

경고의 셀레늄을 처리하는 몇 가지 까다로운 일이 생각이 있습니다.

rescue 또는 try과 같은 코드를 사용하지 않고 코드에서 유형 (프롬프트, 확인 또는 알림)을 감지 할 수있는 방법이 없습니다. 모든 것은 switch_to.alert을 통해 도달합니다.

또한 브라우저에 경고가 열려 있으면 경고를 처리하지 않는 한 후속 명령을 실행할 수 없습니다. 경고가 열려있는 동안 navigate.to을 시도해 보겠습니다. 경고 메시지를 처리하지 못했습니다.navigate.to 명령을 다시 실행해야합니다. 이 오류가 발생하면 경고 개체도 손실됩니다.

그것은이 방법으로 제어 구조와 같은 구조를 사용하여 약간의 호소력이다 그러나 나는 다른 옵션

+0

글쎄, HTML을 통해 그것을 찾을 수있는 방법이 있을까요? 마찬가지로 구문 분석 할 스크립트 태그가 있습니까? – papasmurf

+1

아마도 XSS를 알기위한 가장 쉬운 방법은 Javascript를 실행하는 것입니다 (Nokogiri/Mechanize와 함께 할 수는 없습니다). –

+0

그래, 나는 이것이 쉽게 될 것이라고 생각하지 않았다. – papasmurf