要解析的xml:
<?xml version="1.0" encoding="utf-8"?>
<advisory>
<name>activeWeb contentserver 跨站点脚本编制</name>
<testDescription>基础结构测试</testDescription>
<threatClassification>
<name>跨站点脚本编制</name>
<reference>http://projects.webappsec.org/Cross-Site+Scripting</reference>
</threatClassification>
<testTechnicalDescription>
<text>在返回给用户之前,activeWeb contentserver 不会适当清理传递给“msg”参数(rights.asp)的输入。</text>
<text>可将其开发,以在整个站点上安装“跨站点脚本编制”攻击。</text>
<br />
<text>利用的样本:</text>
<text>http://[SERVER]/errors/rights.asp?awReadAccessRight=True&msg=[XSS]</text>
</testTechnicalDescription>
<causes>
<cause>未安装第三方产品的最新补丁或最新修订程序</cause>
</causes>
<securityRisks>
<securityRisk>可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务</securityRisk>
</securityRisks>
<affectedProducts>
<affectedProduct>activeWeb contentserver(5.2964 以下的版本)</affectedProduct>
</affectedProducts>
<cve>
<link target="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-3014">CVE-2007-3014</link>
</cve>
<references>
<link target="http://www.active-web.de/aw/home/Produkte/~gf/contentserver/">供应商站点</link>
<link target="http://online.securityfocus.com/bid/24895">BugTraq BID: 24895</link>
<link target="http://secunia.com/advisories/26063/">Secunia 咨询</link>
</references>
<fixRecommendations>
<fixRecommendation type="General">
<text>升级至 activeWeb contentserver 的最新版本。</text>
</fixRecommendation>
</fixRecommendations>
</advisory>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
解析上面的xml只需两个类即可:
package com.wk.common;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import com.wk.parser.XMLContentHandler;
/**
* 这个类的作用是:
* 对解析好的xml文件信息怎样处理
* @author Administrator
*
*/
public class ManagerImport {
/**
*
* @param filePath
* @throws SAXException
* @throws IOException
* @throws ParserConfigurationException
*/
public static void saveXMLData(String filePath) throws SAXException, IOException, ParserConfigurationException{
//建立SAX对象工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//建立SAX对像
SAXParser parser = factory.newSAXParser();
XMLContentHandler x = new XMLContentHandler();
InputStream stream=new FileInputStream(filePath);
InputSource source = new InputSource(stream);
parser.parse(source, x);
}
public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {
saveXMLData("D:/activeWebcontentserverXSS.xml");
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.wk.parser;
import java.io.IOException;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
/**
* 解析xml的公共类
* @author wk
*/
public class XMLContentHandler extends DefaultHandler {
StringBuffer sb = new StringBuffer();
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
* 该方法是:接收元素中字符数据的通知。在这里你可以用new String(ch, start, length)
* 把你想得到的信息得到
* 参数:
* ch - 字符。
* start - 字符数组中的开始位置。
* length - 从字符数组中使用的字符数。
*/
public void characters(char[] ch, int start, int length)
throws SAXException {
if(new String(ch, start, length).toString().trim().length()!=0){
System.out.println(new String(ch, start, length));
sb.append(new String(ch, start, length));
}
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#endDocument()
* 当一个xml文件解析完成以后会执行这个方法。
* 默认情况下,不执行任何操作。应用程序编写者可以在子类中重写此方法,以便在文
* 档的结束处采取特定的操作(如,结束树或关闭输出文件)。
*/
public void endDocument() throws SAXException {
System.out.println("【文件解析完成!】");
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
* 接收元素结束的通知
* 默认情况下,不执行任何操作。应用程序编写者可以在子类中重写此方法,以便在每个
* 元素的结束处采取特定的操作(如,结束树节点或将输出写入文件)。
*
* 参数:
* uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。
* localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。
* qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。
*
*/
public void endElement(String uri, String localName, String qName)
throws SAXException {
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#endPrefixMapping(java.lang.String)
* 接收名称空间映射结束的通知。
* 默认情况下,不执行任何操作。应用程序编写者可以在子类中重写此方法,以便在每个前缀映射的
* 结束处采取特定的操作。
*
* 参数:
* prefix - 正在声明的名称空间前缀。
*/
public void endPrefixMapping(String prefix) throws SAXException {
super.endPrefixMapping(prefix);
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#error(org.xml.sax.SAXParseException)
* 接收可恢复的解析器错误的通知。
* 默认实现不执行任何操作。应用程序编写者可以在子类中重写此方法,以便对每个错误采取特定的措施,
* 如在日志文件中插入消息,或者将它打印到控制台。
*
* 参数:
* e - 被编码为异常的警告信息。
*/
public void error(SAXParseException e) throws SAXException {
super.error(e);
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#fatalError(org.xml.sax.SAXParseException)
* 报告严重的 XML 解析错误。
* 默认的实现抛出 SAXParseException。如果应用程序编写者需要对每个严重的错误采取特定的措施
* (如将所有的错误收集到一个报告中),则可以在子类中重写此方法:当调用此方法时,无论哪种情况,
* 应用程序都必须停止所有的常规处理,这是因为文档已不再可靠,并且解析器再也不能报告解析事件
*
* 参数:e - 被编码为异常的错误信息。
*/
public void fatalError(SAXParseException e) throws SAXException {
super.fatalError(e);
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#ignorableWhitespace(char[], int, int)
* 接收处理指令的通知
*
* 默认情况下,不执行任何操作。应用程序编写者可以在子类中重写此方法,以便对每个处理指令
* 采取特定的措施,如设置状态变量或调用其他的方法。
*
* 参数:
* target - 处理指令目标。
* data - 处理指令数据,如果未提供,则为 null。
*/
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {
super.ignorableWhitespace(ch, start, length);
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#notationDecl(java.lang.String, java.lang.String, java.lang.String)
* 接收注释声明的通知。
* 默认情况下,不执行任何操作。如果应用程序编写者希望跟踪在文档中声明的注释,
* 则可以在子类中重写此方法
*
* 参数:
* name - 注释名称。
* publicId - 注释公共标识符,如果没有可使用的则为 null。
* systemId - 注释系统标识符。
*/
public void notationDecl(String name, String publicId, String systemId)
throws SAXException {
super.notationDecl(name, publicId, systemId);
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#processingInstruction(java.lang.String, java.lang.String)
*
* 接收处理指令的通知
* 默认情况下,不执行任何操作。应用程序编写者可以在子类中重写此方法,以便对每个
* 处理指令采取特定的措施,如设置状态变量或调用其他的方法。
*
* 参数:
* target - 处理指令目标。
* data - 处理指令数据,如果未提供,则为 null。
*/
public void processingInstruction(String target, String data)
throws SAXException {
super.processingInstruction(target, data);
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#resolveEntity(java.lang.String, java.lang.String)
* 解析外部实体。
*
* 将始终返回 null,因此解析器将使用 XML 文档中提供的系统标识符。此方法实现 SAX 默
* 认的行为:应用程序编写者可以在子类中重写它以便进行诸如目录查找或 URI 重定向之类的特定转换。
*
* 参数:
* publicId - 公共标识符,如果没有可用的,则为 null。
* systemId - 在 XML 文档中提供的系统标识符。
*
* 返回:
* 新的输入源,或返回 null,以要求默认的行为。
*/
public InputSource resolveEntity(String publicId, String systemId)
throws IOException, SAXException {
return super.resolveEntity(publicId, systemId);
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#setDocumentLocator(org.xml.sax.Locator)
* 接收文档事件的 Locator 对象。
* 默认情况下,不执行任何操作。如果应用程序编写者希望存储定位器以用于其他的文档事件,
* 则可以在子类中重写此方法。
*
* 参数:
* locator - 用于所有 SAX 文档事件的定位器。
*/
public void setDocumentLocator(Locator locator) {
super.setDocumentLocator(locator);
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#skippedEntity(java.lang.String)
* 接收跳过的实体的通知。
*
* 默认情况下,不执行任何操作。应用程序编写者可以在子类中重写此方法,以便对每个处理指
* 令采取特定的措施,如设置状态变量或调用其他的方法。
* 参数:
* name - 跳过的实体的名称。
*/
public void skippedEntity(String name) throws SAXException {
super.skippedEntity(name);
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#startDocument()
* 接收文档开始的通知。
* 默认情况下,不执行任何操作。应用程序编写者可以在子类中重写此方法,以便在文档的开始采
* 取特定的措施(如分配树的根节点或创建输出文件)。
*
*/
public void startDocument() throws SAXException {
super.startDocument();
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
* 接收元素开始的通知。
* 默认情况下,不执行任何操作。应用程序编写者可以在子类中重写此方法,以便在每个元素的开始
* 处采取特定的操作(如,分配新的树节点或将输出写入文件)。
*
* 参数:
* uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。
* localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。
* qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。
* attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。
*/
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#startPrefixMapping(java.lang.String, java.lang.String)
* 接收名称空间映射开始的通知。
* 默认情况下,不执行任何操作。应用程序编写者可以在子类中重写此方法,以便在每个名称空间前缀
* 范围的开始处采取特定的操作(如存储前缀映射)。
*
* 参数:
* prefix - 正在声明的名称空间前缀。
* uri - 映射到前缀的名称空间 URI。
*/
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
super.startPrefixMapping(prefix, uri);
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*
* 接收未解析实体声明的通知。
* 默认情况下,不执行任何操作。应用程序编写者可以在子类中重写此方法,以便跟踪在文档中声明的未
* 解析实体。
*
* 参数:
* name - 实体名称。
* publicId - 实体公共标识符,如果不可用,则为 null。
* systemId - 实体系统标识符。
* notationName - 相关联的注释的名称。
*/
public void unparsedEntityDecl(String name, String publicId,
String systemId, String notationName) throws SAXException {
super.unparsedEntityDecl(name, publicId, systemId, notationName);
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#warning(org.xml.sax.SAXParseException)
* 接收解析器警告的通知。
*
* 默认实现不执行任何操作。应用程序编写者可以在子类中重写此方法,以便对每个警告采取特定的措施,
* 如在日志文件中插入消息,或者将它打印到控制台。
*
* 参数:
* e - 被编码为异常的警告信息。
*/
public void warning(SAXParseException e) throws SAXException {
super.warning(e);
}
}
这个类只把xml文件的信息读出来了
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
结果:
activeWeb contentserver 跨站点脚本编制
基础结构测试
跨站点脚本编制
http://projects.webappsec.org/Cross-Site+Scripting
在返回给用户之前,activeWeb contentserver 不会适当清理传递给“msg”参数(rights.asp)的输入。
可将其开发,以在整个站点上安装“跨站点脚本编制”攻击。
利用的样本:
http://[SERVER]/errors/rights.asp?awReadAccessRight=True
&
msg=[XSS]
未安装第三方产品的最新补丁或最新修订程序
可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务
activeWeb contentserver(5.2964 以下的版本)
CVE-2007-3014
供应商站点
BugTraq BID: 24895
Secunia 咨询
升级至 activeWeb contentserver 的最新版本。
【文件解析完成!】
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------