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

唐山快速建站公司网站开发工资山东

唐山快速建站公司,网站开发工资山东,线上购物平台,苏州市姑苏区建设局网站问题#xff1a;XMLDecoder注入 针对 xml 解码器的注入攻击 反序列化用户控制的 XML #xff0c;程序没有进行验证#xff0c; 会让攻击者有机会在服务器上执行恶意代 码。 例#xff1a;下面代码片段中#xff0c; XMLDecoder 处理不可信的输入。 ... XMLDecode…问题XMLDecoder注入 针对 xml 解码器的注入攻击 反序列化用户控制的 XML 程序没有进行验证 会让攻击者有机会在服务器上执行恶意代 码。 例下面代码片段中 XMLDecoder 处理不可信的输入。 ... XMLDecoder decoder new XMLDecoder(new InputSource(new InputStreamReader(request.getInputStream(), UTF-8))); Object object decoder.readObject(); decoder.close(); ... 如果输入以下 XML 文档会实例化 ProcessBuilder 对象并调用其静态 start() 方法以运行 Windows 计算器。 java object classjava.lang.ProcessBuilder array classjava.lang.String length1 void index0 stringc:\\windows\\system32\\calc.exe/string /void /array void methodstart/ /object /java 修复XMLDecoder注入 尽量避免将 XMLDecoder 与由用户控制的数据一起使用。如程序中不能避免需要验证输入的 XML 。 问题LDAP 注入 LDAP 轻量目录访问协议 |dn : 一条记录的位置 | dc : 一条记录所属区域 | |ou : 一条记录所属组织 | |cn/uid: 一条记录的名字 /ID| 此处我更喜欢把 LDAP 和 数据库类比起来我是直接把 LDAP 看成是一个主要用于查询的数据库。 数据库用 “ 表 ” 来存数据 LDAP 用 “ 树 ” 来存数据。数据库主要是三个 DB,TABLE,ROW 来定位一条记录而 LDAP 首先要说明是哪一棵树 dc 然后是从树根到目的所经过的所有 “ 分叉 ” ou group 最后就是目标的名 字例如 UID 等等。 具体到如何定义如下 dn:cnhonglv,oubei,ouxi,oudong,dcwaibo,dccom 其中树根是 dcwaibo,dccom 分叉 oubei,ouxi,oudong 目标 cnhonglv 注意要把 “cnstan,oulinux,oucomputer,dcourschool,dcorg” 看成是一个整体它只是属性 dn 的 值 具体的一条记录如下 dn:cnstan,oulinux,oucomputer,dcourschool,dcorg objectClass organizationalPerson cn:stan cn: 小刀 sn: 小刀 description:a good boy 保存成 LDIF 文件可以导入到 LDAP 数据库中 LDAP 基本语法 ( 等于 ) 查找 “ 名 “ 属性为 “ LDAP 注入是指客户端发送查询请求时输入的字符串中含有一些特殊字符导致 修改了 LDAP 本来的查询结构从而使得可以访问更多的未授权数据的一种攻击方式。 例如以下代码动态构造一个 LDAP 查询并对其加以执行该查询可以检索所有报告给指定 经理的雇员记录。该经理的名字是从 HTTP 请求中读取的因此不可信任。 ... DirContext ctx new InitialDirContext(env); String managerName request.getParameter(managerName); //retrieve all of the employees who report to a manager String filter (manager managerName ); NamingEnumeration employees ctx.search(ouPeople,dcexample,dccom,filter); ... 在正常情况下诸如搜索向 John Smith 经理报告的雇员该代码执行的筛选器如下 (managerSmith, John” 的所有对象可以使用 ) (givenNameJohn) 这会返回 “ 名 ” 属性为 “John” 的所有对象。圆括号是必需的以便强调 LDAP 语句的开始和结束。 ( 逻辑与 ) 如果具有多个条件并且希望全部条件都得到满足则可使用此语法。例如如果希望查找居住在 Dallas 并且 “ 名 ” 为 “John” 的所有人员可以使用 ((givenNameJohn)(lDallas)) 请注意每个参数都被属于其自己的圆括号括起来。整个 LDAP 语句必须包括在一对主圆括号中。 操作符 表明只有每个参数都为真才会将此筛选条件应用到要查询的对象。 !( 逻辑非 ) 此操作符用来排除具有特定属性的对象。假定您需要查找 “ 名 ” 为 “John” 的对象以外的所有对象。则应 使用如下语句 (!givenNameJohn) 此语句将查找 “ 名 ” 不为 “John” 的所有对象。请注意 ! 操作符紧邻参数的前面并且位于参数的圆括 号内。由于本语句只有一个参数因此使用圆括号将其括起以示说明 * 通配符 可使用通配符表示值可以等于任何值。使用它的情况可能是您希望查找具有职务头衔的所有对象。 为此可以使用 (title*) 这会返回 “title” 属性包含内容的所有对象。另一个例子是您知道某个对象的 “ 名 ” 属性的开头两个字 母是 “Jo” 。那么可以使用如下语法进行查找 (givenNameJo*) 这会返回 “ 名 ” 以 “Jo” 开头的所有对象。 高级用法 eg: 您需要一个筛选条件用来查找居住在 Dallas 或 Austin 并且名为 “John” 的所有对象。使用的语法 应当是 ((givenNameJohn)(|(lDallas)(lAustin))) LDAP 注入 LDAP 注入攻击和 SQL 注入攻击相似因此接下来的想法是利用用户引入的参数生成 LDAP 查询。一 个安全的 Web 应用在构造和将查询发送给服务器前应该净化用户传入的参数。在有漏洞的环境中这些参 数没有得到合适的过滤因而攻击者可以注入任意恶意代码。 使用得最广泛的 LDAP ADAM 和 OpenLDAP 下面的结论将会致代码注入 引入 (attributevalue) 如果过滤器用于构造查询单缺少逻辑操作符如 value)(injected_filter 瞬间导致产生了两个过滤器 (attributevalue)(injected\_filter) 通常在 OpenLDAP 实施中第二个过滤器会被忽略只有第一个会被执行。 而在 ADAM 中有两个过滤器的查询是不被允许的因而这个注入毫无用处。 (|(attributevalue)(second_filter)) or ((attributevalue)(second_filter)) 如果第一个用于构造查询的过滤器有逻辑操作符形如 value)(injected_filter) 的注入会变成如下过滤 器 ((attributevalue)(injected_filter)) (second_filter) 。 虽然过滤器语法上并不正确 OpenLDAP 还是会从左到右进行处理忽略第一个过滤器闭合后的任 何字符。 但是有的浏览器会进行检查检查过滤器是否正确这种情况下 value)(injected_filter))((10 于是 就出现了下述 payload ((attributevalue)(injected_filter))((10)(second_filter)) 既然第二个过滤器会被 LDAP 服务器忽略有些部分便不允许有两个过滤器的查询。这种情况下只 能构建一个特殊的注入以获得单个过滤器的 LDAP 查询如 value)(injected_filter 得到 ((attributevalue)(injected_filter)(second_filter)) AND 注入 这种情况应用会构造由 ”” 操作符和用户引入的的参数组成的正常查询在 LDAP 目录中搜索例如 ((parameter1value1)(parameter2value2)) 这里 Value1 和 value2 是在 LDAP 目录中搜索的值攻击者可以注入代码维持正确的过滤器结构但 能使用查询实现他自己的目标。 绕过访问控制 一个登陆页有两个文本框用于输入用户名和密码过滤器如下 ((USERUname)(PASSWORDPwd)) 如果攻击者输入一个有效地用户名如 r00tgrok 然后再这个名字后面注入恰当的语句 password 检查就会被绕过。输入 Unameslisberger)()) 得到如下 ((USER slisberger)()(PASSWORDPwd)) LDAP 服务器只处理第一个过滤器即仅查询 ((USERslidberger)()) 得到了处理。这个查询永真 , 故 成功绕过 权限提升 现假设下面的查询会向用户列举出所有可见的低安全等级文档 ((directorydocument)(security_levellow)) 这里第一个参数 document 是用户入口 low 是第二个参数的值。如果攻击者想列举出所有可见的高 安全等级的文档他可以利用如下的注入 **document)(security_level*))((directorydocuments** 得到 ((directorydocuments)(security_level*))((direcrotydocuments)(security_levellow)) LDAP 服务器仅会处理第一个过滤器而忽略第二个因而只有下面的查询会被处理 ((directorydocuments)(security_level*)) 结果就是所有安全等级的可用文档都会列举给攻击者 OR 注入 这种情况应用会构造由 ”|” 操作符和用户引入的的参数组成的正常查询在 LDAP 目录中搜索例如 (|(parameter1value1)(parameter2value2)) 这里 Value1 和 value2 是在 LDAP 目录中搜索的值攻击者可以注入代码维持正确的过滤器结构但 能使用查询实现他自己的目标。 具体的注入方式和 AND 差不太多不予详述。 AND 盲注 假设一个 Web 应用想从一个 LDAP 目录列出所有可用的 Epson 打印机错误信息不会返回应用发 送如下的过滤器 ((objectClassprinter)(typeEpson*)) 正确的过滤器为 ((objectClassprinter)(typeEpson*)) 而当注入 )(objectClass))((objectClassvoid 时得到 ((objectClass*)(objectClass*))((objectClassvoid)(typeEpson*)) 执行第一个过滤器 objectClass* 总是返回一个对象。当图标被显示时响应为真否则为假。 这样我们就可以猜第二个括号的 objectclass 字段有些什么内容了。 LDAP 盲注技术让攻击者使用基于 TRUE/FALSE 的技术访问所有的信息。 盲注深入 攻击者可以使用字母、数字搜索提取属性的值这个想法的关键在于将一个复杂的值转化为 TRUE/FALSE 列表。这个机制通常称为 booleanization 大意是二值化吧图十二概括了该机制可用于 不同的方式。 假设攻击者想知道 department 属性的值处理如下 ((idprinterHPLaserJet2100)(departmenta*))(objectprinter)) ((idprinterHPLaserJet2100)(departmentf*))(objectprinter)) ((idprinterHPLaserJet2100)(departmentfa*))(objectprinter)) 如此根据返回的不同结果猜解是否正确和 MYSQL 盲注类似。 同样攻击者可以使用字符集削减技术减少获得信息所需的请求数为完成这一点他使用通配符 测试给定的字符在值中是否为 anywhere ((idprinterHPLaserJet2100)(department*b*))(objectprinter)) ((idprinterHPLaserJet2100)(department*n*))(objectprinter)) 这样子可以看 department 中是否有 b 和 n 巧用可以加速猜解过程当然一般肯定都是写脚本猜解 但是由于筛选器是通过连接一个常数基本查询串和一个用户输入串动态构造而成的因此该查询只在 managerName 不包含任何 LDAP 元字符时才能正常运行。如果攻击者为 managerName 输入字符串 Hacker, Wiley)(|(objectclass*) 则该查询会变成 (managerHacker, Wiley)(|(objectclass*)) 根据执行查询的权限增加 |(objectclass*) 条件会导致筛选器与目录中的所有输入都匹配而 且会使攻击者检索到有关用户输入池的信息。根据执行 LDAP 查询的权限大小此次攻击的影响范围可能 会有所差异但是如果攻击者能够控制查询的命令结构那么这样的攻击至少会影响执行 LDAP 查询的用 户可以访问的所有记录。 修复LDAP 注入 LDAP 注入的根本原因是攻击者提供了可以改变 LDAP 查询含义的 LDAP 元字符。构造 LDAP 筛选器 时程序员应清楚哪些字符应作为命令解析而哪些字符应作为数据解析。为了防止攻击者侵犯程序员的 各种预设情况应使用白名单的方法确保 LDAP 查询中由用户控制的数值完全来自于预定的字符集合 应不包含任何 LDAP 元字符。如果由用户控制的数值范围要求必须包含 LDAP 元字符则应使用相应的编 码机制转义这些元字符在 LDAP 查询中的意义。 例如以下代码片段中使用 Spring 框架 EqualsFilter 类来构造一个编码得当的筛选器字符串。不 论请求参数中是否存在 LDAP 元字符这一字符串都可以保护指令的命令结构。 ... DirContext ctx new InitialDirContext(env); String managerName request.getParameter(managerName); //retrieve all of the employees who report to a manager EqualsFilter filter new EqualsFilter(manager, managerName); NamingEnumeration employees ctx.search(ouPeople,dcexample,dccom,filter.toString())
http://www.w-s-a.com/news/714340/

相关文章:

  • 个人工作室注册条件温州seo结算
  • 360免费建站系统中国建设银行官网站黄金部王毅
  • 罗源福州网站建设个体户可以网站备案吗
  • 网站开发 专有名词pc网站建设和推广
  • 上海部道网站 建设conoha wordpress
  • 手机测评做视频网站宝塔可以做二级域名网站么
  • 代理公司注册济南重庆seo优化效果好
  • 佛山市骏域网站建设专家徐州网站建设价格
  • 公司做网站多济南好的网站建设公司排名
  • 网站维护的方式有哪几种该网站在工信部的icp ip地址
  • 中小企业服务中心网站建设做考勤的网站
  • 大连网站建设报价wordpress实用功能
  • 学校网站建设自查报告电脑网站制作教程
  • 适合推广的网站世界搜索引擎公司排名
  • 合肥网站建设费用ppt在哪个软件制作
  • 湖南省住房和城乡建设厅门户网站网站建设课程性质
  • 如何设计公司网站公司网站空间要多大
  • 建筑公司网站排名5G网站建设要多少个
  • seo怎样新建网站弹簧东莞网站建设
  • 在线做爰直播网站石家庄房产
  • 建筑网站哪里找拓者设计吧首页
  • 广州网站的建设wordpress注册数学验证码
  • 装修平台自己做网站有几个黄页名录网站开发
  • php网站的安全优势平面设计师培训
  • 乐清市网站建设设计重庆沙坪坝区
  • 什么是seo站内优化开发网页的工具有哪些
  • 文化类网站是不是休闲娱乐类网站青州市建设局网站
  • 网站的中英文切换代码做现货黄金网站
  • 万江区网站建设公司前端如何根据ui设计写页面
  • 宿迁公司做网站手机免费创建网站的软件