2013-02-16 137 views
2

所有,我真的可以在這裏使用一些幫助。我的最終目標是能夠使用perl讀取xml文件,並將其插入數據庫以跟蹤CVE。在這個階段,如果我只能從我的代碼中的XML文件中引用變量,我相信我可以將它插入到數據庫中。現在我所要做的就是把它打印到屏幕上,但我無法使它正常工作。使用Perl XML解析XML與命名空間::簡單

這是我簡單的代碼和XML文件。

希望有人能讓我去這裏。

的Perl --start代碼 -

#!/usr/bin/perl 

# use module 
use XML::Simple; 
use Data::Dumper; 

# create object 
xml = new XML::Simple (KeyAttr=>[]); 

# read XML file 
#$data = $xml->XMLin("tms.xml"); 

# print output - used this to see if it was even reading it 
#print Dumper($data); 

# access XML data 
print "Here is the BugTrackID: $data->{'x:BugTraqID'}\n"; 

Perl代碼--end ---

的xml--

<?xml version="1.0" encoding="us-ascii"?> 
<Alerts xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:alerts.symantec.com https://alerts.symantec.com/vulalert.xsd"> 
<x:AlertDocument xmlns:x="urn:alerts.symantec.com" AlertStatusID="57982" Type="1" DetailLevel="25" Language="1"> 
<x:BugTraqID>57982</x:BugTraqID> 
<x:Title>Sonar Multiple Cross Site Scripting Vulnerabilities</x:Title> 
<x:StatusID>1</x:StatusID> 
<x:CVE>CVE-MAP-NOMATCH</x:CVE> 
<x:Published>Feb 12 2013</x:Published> 
<x:LastUpdated>2013-02-15T19:03:48</x:LastUpdated> 
<x:Remote>Yes</x:Remote> 
<x:Local>No</x:Local> 
<x:Credibility>Single Source</x:Credibility> 
<x:Classification>Input Validation Error</x:Classification> 
<x:Availability>User Initiated</x:Availability> 
<x:Ease>Exploit Available</x:Ease> 
<x:Authentication>Not Required</x:Authentication> 
<x:CVSS2_BaseScore>5.8</x:CVSS2_BaseScore> 
<x:CVSS2_TemporalScore>5</x:CVSS2_TemporalScore> 
<x:CVSS2_BaseVector>AV:N/AC:M/Au:N/C:P/I:P/A:N</x:CVSS2_BaseVector> 
<x:CVSS2_TemporalVector>E:F/RL:U/RC:UC</x:CVSS2_TemporalVector> 
<x:CVSS1_BaseScore>3.7</x:CVSS1_BaseScore> 
<x:CVSS1_TemporalScore>3.2</x:CVSS1_TemporalScore> 
<x:NVD_CVSS2_BaseScore>4.3</x:NVD_CVSS2_BaseScore> 
<x:NVD_CVSS2_ComponentString>AV:N/AC:M/Au:N/C:N/I:P/A:N</x:NVD_CVSS2_ComponentString> 
<x:ImpactRating>4</x:ImpactRating> 
<x:Severity>6.1</x:Severity> 
<x:EaseofExploit>8</x:EaseofExploit> 
<x:UrgencyRating>6.1</x:UrgencyRating> 
<x:LastChange>Initial analysis.</x:LastChange> 
<x:VulnerableSystems> 
    <x:VulnerableSystem> 
    <x:Title><![CDATA[SonarSource Sonar 3.4.1 cpe:/a:sonarsource:sonar:3.4.1 SYMC]]></x:Title> 
    </x:VulnerableSystem> 
</x:VulnerableSystems> 
<x:ShortSummary><![CDATA[Sonar is prone to multiple cross-site scripting vulnerabilities.]]></x:ShortSummary> 
<x:Impact>An attacker may leverage these issues to execute arbitrary script code in the browser of an unsuspecting user in the context of the affected site. This may allow the attacker to steal cookie-based authentication credentials and launch other attacks.</x:Impact> 
<x:TechnicalDescription><![CDATA[Sonar is the open source platform for code quality inspection.   

The application is prone to multiple cross-site scripting vulnerabilities because it fails to sanitize user-supplied input submitted to the following scripts and parameters:  

&apos;index.php &apos; : &apos;search&apos;, &apos;assignee_login&apos;,  
&apos;author_login&apos;  
&apos;sources.php&apos; : &apos;resource&apos;  

An attacker may leverage these issues to execute arbitrary script code in the browser of an unsuspecting user in the context of the affected site. This may allow the attacker to steal cookie-based authentication credentials and launch other attacks.             

Sonar 3.4.1 is vulnerable; other versions may also be affected.]]> 
</x:TechnicalDescription> 
<x:AttackScenario><![CDATA[1. An attacker scans for and locates a site running the affected application.  

2. The attacker crafts a URI link that includes malicious script code designed to leverage one of these issues.  

3. The attacker uses email or other means to distribute the malicious link and entices an unsuspecting user to follow it.  

4. When the user follows the link, the attacker-specified script code runs in their browser in the context of the affected site.  

A successful exploit may let the attacker steal cookie-based authentication credentials and launch other attacks.]]></x:AttackScenario> 
<x:Exploit><![CDATA[Attackers can exploit these issues by enticing an unsuspecting victim into following a malicious URI.   

The following example URIs are available: 

http://www.example.com/dependencies/index? search="&amp;gt;&amp;lt;script&amp;gt;alert(/devilteam.pl/)&amp;lt;/script&amp;gt; 

http://www.example.com/dashboard/index/41730? did=4&amp;amp;period=3"&amp;gt;&amp;lt;script&amp;gt;alert(/devilteam.pl/)&amp;lt;/script&am p;gt; 

http://www.example.com/reviews/index?review_id=&amp;amp;statuses[]=OPEN&amp;amp;statuses[]=REOPENED&amp;amp;severities[]=&amp;amp;projects[]=&amp;amp;amp;author_login=&amp;amp;assignee_login="&amp;gt;&amp;lt;script&amp;gt;alert(/devilteam.pl/)&amp;lt;/script&amp;gt;&amp;amp;false_positives=without&amp;amp;sort=&amp;amp;asc=false&amp;amp;commit=Search 

http://www.example.com/reviews/index?review_id=&amp;amp;statuses[]=OPEN&amp;amp;statuses[]=REOPENED&amp;amp;severities[]=&amp;amp;projects[]=&amp;amp;amp;author_login="&amp;gt;&amp;lt;script&amp;gt;alert(/devilteam.pl/)&amp;lt;/script&amp;gt;&amp;amp;assignee_login=&amp;amp;false_positives=without&amp;amp;sort=&amp;amp;asc=false&amp;amp;commit=Search 

http://www.example.com/api/sources?resource=&amp;lt;script&amp;gt;alert(/devilteam.pl/)&amp;lt;/script&amp;gt;&amp;amp;format=txt 

]]></x:Exploit> 
<x:MitigatingStrategies> 
    <x:MitigatingStrategy> 
    <x:Title><![CDATA[Block external access at the network boundary, unless external parties require service.]]></x:Title> 
    <x:Description><![CDATA[If global access isn&apos;t needed, filter access to the affected computer at the network boundary. Restricting access to only trusted computers and networks might greatly reduce the likelihood of a successful exploit.]]></x:Description> 
    </x:MitigatingStrategy> 
    <x:MitigatingStrategy> 
    <x:Title><![CDATA[Run all software as a nonprivileged user with minimal access rights.]]></x:Title> 
    <x:Description><![CDATA[Attackers may successfully exploit client flaws in the browser through cross-site scripting vulnerabilities. When possible, run client software as regular user accounts with limited access to system resources. This may limit the immediate consequences of client-side vulnerabilities. ]]></x:Description> 
    </x:MitigatingStrategy> 
    <x:MitigatingStrategy> 
    <x:Title><![CDATA[Do not follow links provided by unknown or untrusted sources.]]></x:Title> 
    <x:Description><![CDATA[Web users should be cautious about following links to websites that are provided by unfamiliar or suspicious sources. Filtering HTML from emails may help remove a possible vector for transmitting malicious links to users. ]]></x:Description> 
    </x:MitigatingStrategy> 
    <x:MitigatingStrategy> 
    <x:Title><![CDATA[Set web browser security to disable the execution of script code or active content.]]></x:Title> 
    <x:Description><![CDATA[Since exploiting cross-site scripting issues often requires malicious script code to run in browsers, consider disabling script code and active content support within a client browser as a way to prevent a successful exploit. Note that this mitigation tactic might adversely affect legitimate sites that rely on the execution of browser-based script code. ]]></x:Description> 
    </x:MitigatingStrategy> 
</x:MitigatingStrategies> 
<x:Solutions> 
    <x:Workaround><![CDATA[Workaround 
]]></x:Workaround> 
    <x:Solution><![CDATA[Currently, we are not aware of any vendor-supplied patches. If you feel we are in error or are aware of more recent information, please mail us at: [email protected]]]></x:Solution> 
</x:Solutions> 
<x:Credit>DevilTeam</x:Credit> 
<x:ChangeLogs> 
    <x:ChangeLog> 
    <x:Title><![CDATA[2013.02.15: Initial analysis.]]></x:Title> 
    </x:ChangeLog> 
</x:ChangeLogs> 
<x:References> 
    <x:Reference> 
    <x:Title><![CDATA[Web Page:Sonar Homepage (SonarSource) SonarSource]]></x:Title> 
    <x:URL><![CDATA[http://www.sonarsource.com/products/software/sonar/]]></x:URL> 
    <x:Description><![CDATA[http://www.sonarsource.com/products/software/sonar/]]></x:Description> 
    </x:Reference> 
    <x:Reference> 
    <x:Title><![CDATA[Web Page:Sonar v.3.4.1 =&amp;gt; XSS (CWE-79) (DevilTeam) DevilTeam]]></x:Title> 
    <x:URL><![CDATA[http://cxsecurity.org/issue/WLB-2013020088]]></x:URL> 
    <x:Description><![CDATA[http://cxsecurity.org/issue/WLB-2013020088]]></x:Description> 
    </x:Reference> 
</x:References> 
<x:URL>https://alerts.symantec.com/loaddocument.aspx?GUID=cffd18f0-7b75-4c6a-adc0-74f480808fff</x:URL> 
<x:OVALDefinitions /> 
</x:AlertDocument> 
</Alerts> 

的--end --start xml ---

+0

你有什麼問題? – ikegami 2013-02-16 03:42:20

+0

你提到了namesapces。 XML :: Simple知道關於namespsaces和前綴的事情。它只是假定前綴是節點名稱的一部分。 「XML :: Simple,您可以使用的最複雜的XML解析器。」 – ikegami 2013-02-16 03:43:34

+0

我無法讓它輸出任何值。具體來說,我只是試圖讓它從xml文件打印bugtraqid值。它回來了。 – 2013-02-16 03:45:46

回答

3

您是否在尋找$data->{'x:AlertDocument'}{'x:BugTraqID'},或許?


我喜歡XML ::的libxml。無論文檔中使用什麼前綴(如果有),以下都將起作用。 (您不應該在意文檔中使用了什麼前綴。)

#!/usr/bin/perl 

use strict; 
use warnings; 

use XML::LibXML    qw(); 
use XML::LibXML::XPathContext qw(); 

my $parser = XML::LibXML->new(); 
my $doc = $parser->parse_file("tms.xml"); 

my $xpc = XML::LibXML::XPathContext->new($doc); 
$xpc->registerNs(x => 'urn:alerts.symantec.com'); 

for my $alert_doc ($xpc->findnodes('/Alerts/x:AlertDocument')) { 
    my ($bug_traq_id) = $xpc->findnodes('x:BugTraqID', $alert_doc); 
    print $bug_traq_id->textContent(), "\n"; 
} 
+0

我仍然沒有返回任何價值。我得到這個: 這裏是CVE: – 2013-02-16 03:57:08

+0

我在發佈之前測試過。測試中的某些內容與您發佈的內容不同。 – ikegami 2013-02-16 03:57:22

+0

或者您的XML :: Simple可能使用了破解的XML解析器? XML :: Simple實際上不是一個解析器;它僅僅是許多解析器之一的前端。 – ikegami 2013-02-16 03:58:49

-1

您的XML沒有目標名稱空間。這不是問題,但你必須考慮到它。

您可以指定使用哪個解析器XML::Simple

這裏是一個代碼示例,其中XML::Simple可以獲得您期望的結果。

tvnshack$ ./a.pl 
Trying bugtrack.xml ... bugtrack.xml is indeed valid 
BugTrackID is: 57982 

該代碼是波紋管...要根據您的喜好進行調整(它基於我在生產中使用的一些實時代碼)。

#!/opt/perl/bin/perl -w 

use strict; 
use XML::Simple qw(:strict); 
use Data::Dumper; 

# Supported namespaces 
my $nspcBUGT = 'urn:alerts.symantec.com'; 
my $parsingfailed = 0; 
my $XMLdata; 

my $XMLfname = 'bugtrack.xml'; 

    print STDOUT "Trying $XMLfname ... "; 

    $XML::Simple::PREFERRED_PARSER = 'XML::SAX::Expat'; 
    my $simpleCstr = XML::Simple->new(
    Cache => [ 'memshare' ], 
    KeyAttr => [], 
    ForceArray => 1, 
    KeepRoot => 1, 
    ContentKey => 'value', 
    NSExpand => 1, 
    NormaliseSpace => 1); 
    eval { 
    $parsingfailed++; 
    # if the parsing fails, the module will terminate the process abruptly. 
    $XMLdata = $simpleCstr->XMLin($XMLfname); 
    # This line of code will not be executed, leaving $parsingfailed>0. 
    $parsingfailed = 0; 
    }; 
    if ($parsingfailed > 0) { 
    print STDERR "Error: That XML file <$XMLfname> can not be read, does not exist or is not a valid XML file (possible wrong namespace too).\n"; 
    } else { 
    if (defined($XMLdata->{"Alerts"})) { 
     print STDOUT "$XMLfname is indeed valid\n"; 
     print STDOUT " BugTrackID is: " . $XMLdata->{'Alerts'}->[0]->{"{$nspcBUGT}AlertDocument"}->[0]->{"{$nspcBUGT}BugTraqID"}->[0] . "\n"; 
     # print Dumper($XMLdata) . "\n"; 
    } 
    } 

__END__ 
+0

我想知道誰和爲什麼這個貢獻已被投票否定,並討論它。我在生產中運行此代碼的長期經驗,從事實中學習。我保證沒有采取上述預防措施的人遲早會面臨問題。我可能是錯的,或者不完全。這需要討論。 – TVNshack 2014-02-04 08:13:19