自己接过的一个项目,不过其实是客户自己在使用的一个SaaS平台,也就是对SaaS平台的测试本质上来说没有严格授权。

由于没有严格授权也就将测试范围局限在了单个网站上,并没有根据域名进行拓展。

Web应用信息

通过Burp发送一定请求包,可以得到服务器如下信息:

开发语言:ASP
开发框架:.NET 4.0.30319
由于使用的是ASP.NET开发框架,因此服务器中间件大概率是IIS了。
同理数据库可能采用的是MSSQL
中间件:Tengine
支持的请求方法:GET、POST、OPTIONS

使用asp与aspx的字典对网站进行目录扫描并没有新发现:

其实比较有意思的是网站请求的URI是以.do结尾的,网上搜到的相关介绍都是说该后缀的文件是Java的,但是根据前面收集到的信息显然是不合理的,结合后面一些遇到的URI,推测这是一种以.来分割的路由书写格式。

CSRF漏洞

跨站请求伪造漏洞发生在用户操作的时候,其原因在于没有对请求进行“行为发起”判断又或者允许跨域(不同链接的跳转请求自动携带上cookie)导致身份认证功能被滥用。

web应用中涉及用户操作的有:

微课上传
资源上传
文章发布
相册上传
视频上传
话题发布、回复、点赞、删除
私信功能
关注、取消关注功能
个人资料修改、头像修改、隐私设置功能
安全设置中的邮箱、手机绑定功能

漏洞复现:资料修改功能跨站请求伪造漏洞

这里开启虚拟机,利用两个账号进行试验,账号AID为“中文”,账号BID为“左卓”,利用BurpSuite拦截“中文”的个人资料修改请求:

这里仅修改UserName这个变量,因为后端会对UserNumb这个字段进行校验,因此需要知道受害者的UserNumb这个字段是多少,但是其他功能点并不一定有该限制。

利用BurpSuiteCSRF构造功能生成相应的CSRF页面:

构造相应页面,让受害者去访问该页面:

结果如下:

利用失败了,当然失败的原因也很简单,之前提过阻断CSRF的方式除了对请求的主动性进行验证之外,还有就是附加数据(cookie)是否设置了httponly属性来禁止跨域。

很不巧的是这里用于身份验证的cookie EDUSSO就设置了httponly属性来禁止跨域,不过这里还是有csrf漏洞。

前面在信息收集中我们也提到了,这个服务器是支持:getpostoptions三种http的请求头,此处我们利用BurpSuite的功能修改请求方式由postget,再生成csrfpoc

此时再去访问:

可以看到此时访问成功,但是提示修改的网校号不是自己的,后续只要修改一下网校号即可。

CSRF漏洞列表:

微课上传
资源发布
话题删除
私信
关注、取消关注
个人资料修改、隐私设置功能
安全设置中的邮箱、手机绑定功能
视频上传功能
不过这个视频上传功能处的CSRF利用局限性较大,需要知道视频专辑处随机生成的唯一识别ID才能够上传至指定的专辑。

以上功能点均存在类似的通过修改请求方式的CSRF漏洞。不过我也不清楚这里将post方式修改为了get方式之后就绕过了httponly限制的原理,这里标记一下,后面需要了解一下httponly的实现原理。

不存在CSRF的功能点大多都处理httponly的限制之外还手动添加了token 字段来验证请求的主动性。

2.1 文章功能测试

2.1.1 我的文章功能模块

在该功能模块下共有:1、发布文章 2、编辑 3、删除

1、文章发布功能测试

文章发布部分抓包情况如下:

GET方式的请求无法成功,其中TypeID为文章分类的ID识别发送人的是SESSION因此CSRF以及越权都没有此类漏洞。

注意到了请求的连接名称为:MyArticle.Post.data尝试修改其中的PostGet再发送请求,但请求失败证明了后台没有相关功能,不能通过Get请求来发布文章。

AddTime参数能控制前台显示的时间,但是时间格式有严格限制,无法实现存储型XSS。

文章的由唯一标识ID号来识别,无法通过参数来控制,故此处也无法实现存储型XSS

测试通过文章标题的二次注入均无特殊回显,删除各参数后页面回显均无报错,此处SQL注入漏洞不存在。

2、文章编辑功能测试

后台通过id的方式来确定修改的文章编号:

经尝试无法通过修改id的方式来实现越权,后续文章发布的接口与编辑文章相同,无更多漏洞。

3、文章删除功能测试

功能的实现同样是根据提供的文章ID来实现的,但是通过修改至他人的文章ID来测试越权功能发现文章删除失败。

同样是无法实现通过Get请求来删除文章,故此处希望CSRF的利用会失败。

2.1.2 分类管理功能测试

分类管理功能同样也三个主要功能:1、添加分类 2、编辑 3、删除

1、添加分类功能测试

添加分类数据包数据如下:

同样是通过POST传递参数,通过SESSION来确定用户,因此并且通过服务器自动参数的ID来标识文章分类,因此这里不会有越权以及XSS。

但是此处可以通过GET方式来发送请求,继续测试是否存在CSRF漏洞。

经测试,该处存在CSRF可以通过此种方式替他人创建文章分类。

2、编辑功能测试

编辑功能处的HTTP数据包请求如下:

是通过id来确定要修改的分类,同样通过修改ID发现无法实现越权修改功能。

不过同样,该功能点支持PostGet方式参数数据,经过测试此处存在CSRF,但实现CSRF还需要知道分类ID,限制较大。

分类处来提供了一些预设置的不可修改的分类,通过修改ID为这些分类的ID希望能实现越权修改功能,发现也是不可行的。

3、删除功能测试

删除处的功能同样是通过ID参数来定位数据的,依然支持通过Get方式发送请求,同样不支持通过修改ID来删除其他人的分类、删除系统分类。

同样具有CSRF漏洞。

2.2 微课功能测试

2.2.1 微课列表功能测试

此处功能包括:1、微课上传 2、微课修改 3、微课删除共三种功能

由于文件等静态资源全是存储在目标网站的CDN服务器上,故文件上传文件相关的漏洞就没有去测试了。

1、微课上传功能

微课上传功能的http数据包如下:

因为fileName[]这个属性的值会被展示在前台的DOM树当中且无过滤,故此处存在XSS漏洞:

这里使用console.log("b1ak2")来进行JS脚本运行判断,修改请求包相关字段如下:

控制台显示效果如下:

同样,该请求支持Get方式,经过测试此处同样存在CSRF漏洞。采用相同的方式,通过GET请求来完成CSRF,不过这次的功能点会弹出文件下载请求:

不过其中的内容是空的,此时不管是否下载CSRF攻击已经完成了:

2、微课修改功能

该功能点前台js代码存在问题,修改之后的提交无法完成。

3、微课删除功能

删除功能处的HTTP代码如下:

除了ID定位之外还加上了科目ID,必须要两者同时匹配才能够删除相关资源,同样支持Get方式传递http请求故同样存在csrf漏洞,但伪造难度过大。

尝试修改ID来删除他人资源,但是此处进行了权限校验,故不存在越权相关的逻辑漏洞。

2.3 资源功能测试

2.3.1 资源列表功能测试

同样功能如下:1、上传 2、修改 3、删除

1、上传功能测试

资源的功能同微课的功能及其相似,猜测大体功能框架是相同的,同样也存在XSS、CSRF漏洞,此处不展示类似的细节了。

2、修改功能测试

同样修改功能前端语句存在bug,功能无法正常运行。

3、删除功能测试

与微课功能相同,具有权限验证。不存在越权漏洞。

2.4 相册功能测试

2.4.1 我的相册

功能主要包括两个:1、上传图片 2、新建相册 3、编辑相册 4、删除相册

1、上传图片功能测试

文件上传功能的http请求包如下:

可以通过修改imgList属性值来达到修改显示名称的作用,且该段数据可以插入到DOM树当中,但是对双引号有一定限制措施,尝试了一下之后没有找到有效的利用方式,不在这个功能点上死磕了。

此处同样是通过categoryId来确定要上传的相册位置,替换为他人的相册ID之后服务端会报错,故此处并不存在越权漏洞,此处也支持Get方式传递数据故CSRF漏洞同样存在。

2、新建相册功能测试

新建相册功能不支持Get方式发送请求,故此处不像之前一样有CSRF漏洞

这里Name属性的值会出现在DOM树当中,同样可以通过修改来达到存储型XSS的目的,但是对这里有长度限制,不过这里出里共会在DOM当中出现3次,可以依靠这个来实现绕过也说不一定。

3、编辑相册功能测试

同样不支持Get方式发送请求,CSRF漏洞无望,数据包情况如下:

通过唯一身份识别的ID来定位相册,这里通过修改ID来定位到其他用户的相册,虽然服务器端没有报错但是功能并没有实现,越权漏洞失败。

同样存在类似的XSS注入点,可能存在XSS利用的情况。

4、删除相册功能测试

相册删除功能的http请求如下:

依靠的是唯一识别ID来定位相册。

同样,该功能支持Get形式传递请求则同样存在CSRF漏洞。而修改至他人ID后服务器端处理出错,也不存在逻辑漏洞。

2.5 视频功能测试

2.5.1 我的视频功能测试

该处包含三种功能:1、新建视频专辑 2、编辑 3、删除 4、上传视频

1、新建视频专辑功能测试

该功能处http请求如下:

该处存在XSS,CategoryNamePicURL两参数均存在存储型XSS,修改相应参数即可。不过PicURL会判断双引号是否成对出现,不过采用1">alert(1)<"类似的格式来绕过即可

同样,该处支持通过Get方式传递http请求故存在CSRF漏洞。

而此处定位用户通过的是Session即无法测试相关的越权漏洞。

2、编辑功能测试

编辑功能处http请求如下:

是通过CategoryID来确定相册的,本身功能页面是和创建相册相同的,相同漏洞此处不重复测试。

而相册编辑功能中可以通过CategoryID来定位到其他用户的相册,故相册编辑功能处存在逻辑越权漏洞。

3、删除功能测试

相册删除处http请求如下:

是通过CategoryID来定位相册的,可以通过Get方式发送http请求,推测此处同样存在CSRF漏洞,经测试确实存在。

删除功能同样存在越权逻辑漏洞。

4、上传视频功能测试

上传视频功能处http请求如下:

同样支持Get方式传递http请求,经测试存在CSRF漏洞。

此处识别相册是通过CategoryID来识别的,同样存在越权逻辑漏洞。

修改数据至如下:

前端共发型存储型DOMXSS四个:

补充:功能疏忽

访问其实也是一种功能,这里碰巧发现了:

相册访问页面也是通过CategoryID来识别的,将该ID修改为他人相册后可以成功访问,此处存在水平越权逻辑漏洞。

2.6 动态功能测试

动态这里会展示自己关注的用户上传的资源,之前测试到的资源功能里的存储型XSS会在这里生效:

动态功能如下:1、发布微博 2、点赞 3、评论 4、回复 5、分享 6、删除

1、发布微博功能测试

微博发布处的http请求如下:

此处添加了token作为请求验证,故CSRF漏洞失效,而评论数据是通过JSON格式来进行传输的,其中会过滤<>之前的全部内容,暂未想到有什么好的利用方法。

2、点赞功能测试

http请求包如下:

同样是有token,且身份识别依靠的是SESSION故无CSRF及越权漏洞。

3、评论功能测试

同样,身份识别是依靠SESSION且存在token对请求的唯一性进行验证:

同样,评论会过滤两个尖括号之间的内容,并未想到好的过滤方式。

4、回复功能测试

回复功能采用相同的功能架构,不作赘述了。

5、回复删除功能测试

同样存在token对请求唯一性进行验证,同时删除他人回复会进行权限检测:

6、分享功能测试

功能存在问题,不能正常执行

7、删除功能测试

删除功能http请求包如下:

同样支持Get方式传输http请求,同样存在CSRF漏洞。

对删除功能进行了权限校验,不存在越权漏洞。

2.7 话题功能测试

话题功能和动态采取的是同一套框架,这里不作赘述了。

2.8 私信功能测试

私信功能有两个功能:1、回复消息 2、清除记录

1、回复消息功能测试

回复的http请求如下:

能够自主控制的只有接收方和发送内容,不过好在这里同样可以通过Get方式传递http请求,故此处存在CSRF漏洞。

而回复的内容不在DOM树当中,且尖括号中的内容会被过滤,暂未想到好的绕过方法。

2、清除记录功能测试

请求的http数据包如下:

同样支持Get方式发送请求,故此处同样存在CSRF漏洞。而发送者由SESSIOIN来确定,无法伪造发送人。

2.9 关注功能测试

关注功能主要有:1、关注 2、取消关注 3、查找用户

关注和取消关注功能之前测试过,存在CSRF漏洞,身份识别依靠的是SESSION,故也不存在越权漏洞

3、查找用户

查找用户方面最直接的联想就是SQL注入,这里查找的关键词只有一个keyword,对该参数使用fuzz排查之后并未发现有特殊的回显,故判断此处没有SQL注入漏洞。

2.10 设置功能测试

2.10.1 个人资料功能测试

个人资料功能之前提到过csrf漏洞,此处不在赘述。

在测试相关功能中,会很自然的想到此处是否存在SQL注入漏洞,不过根据排查其他功能时候对SQL注入的测试,这个网站还是对相关漏洞防护功能做的挺不错的,但是这个地方的SQL注入功能没有关闭报错信息,这导致虽然只能获取少部分信息,但是一些异常操作还是能够获取到信息的。

该功能的http请求如下:

我们这里将UserName这个字段删去之后数据库会返回如下错误信息:

2.10.2 修改头像功能测试

由于上传的文件会被上传至CDN服务器,且自动对文件进行重命名,所以这里针对文件名的XSS漏洞尝试就失败了。

2.10.3 安全设置功能测试

安全设置主要的功能有:1、安全邮箱 2、绑定手机 3、密码

经过测试,邮箱、手机绑定存在逻辑漏洞,这两处功能即使密码错误的情况下也能够修改绑定的邮箱、手机号,同时支持Get方式发送http请求,也就造成了逻辑漏洞。两者配合即可在验证码有效期内修改受害人绑定的手机、邮箱账号。

2.10.4 隐私设置功能测试

隐私设置功能主要用于设置各个功能他人的访问权限,此处存在CSRF漏洞。