目录遍历漏洞概述
在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能变的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。 在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。
? 看到这里,你可能会觉得目录遍历漏洞和不安全的文件下载,甚至文件包含漏洞有差不多的意思,是的,目录遍历漏洞形成的最主要的原因跟这两者一样,都是在功能设计中将要操作的文件使用变量的 方式传递给了后台,而又没有进行严格的安全考虑而造成的,只是出现的位置所展现的现象不一样,因此,这里还是单独拿出来定义一下。
? 需要区分一下的是,如果你通过不带参数的url(比如:http://xxxx/doc)列出了doc文件夹里面所有的文件,这种情况,我们成为敏感信息泄露。 而并不归为目录遍历漏洞。(关于敏感信息泄露你你可以在"i can see you ABC"中了解更多)
? 你可以通过“../../”对应的测试栏目,来进一步的了解该漏洞。
其实在我们的测试过程当中,关键点就是用…/…/,这样的操作去进行目录跳转,从而去获取我们想要的文件
在linux里面,我们可以用…/…/来做跳转,比如说,
cd ../../../../../../../../../../../../../../../
最终会跳到根目录下面去,然后我们在以根目录为起始点,去拼接一些,我们要的东西,
cd ../../../../../../../../../../../../../../../etc
这是一个操作,在目录遍历下面,我们可以来看一下
这边有个超链接,我们点一下,其实是传了个文件名到后台,后台呢,去对这个文件进行读取,我们可以通过…/让它去读其它的文件,多敲…/,因为最终你敲的越多,它最终都会跳到根路径下面去,然后我们在以根路径为起始点,去读其它的文件
http://192.168.42.236/pikachu/vul/dir/dir_list.php?title=../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../1.txt
这里就可以把password文件给读出来,这种情况,我们就称为目录遍历,目录遍历实际上也是前端传进来的文件或者路径,到后端之后,后端没有进行严格的处理,然后直接拼接到路径里面,然后导致我们通过…/…/来让后台访问一些非预期的目标文件,这跟我们之前讲的文件包含,还是文件下载,都有点像
实际上,它形成的原因都是一样的,都是我们前端将对应的参数,传到后台之后,后台没有进行严格的处理,只是说,目录遍历问题,强调的是,我们可以通过…/…/来进行相关的目录跳转,所以说,这里还是单独拿出来定义了一下
我们接下来看一下敏感信息泄露
由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到。 比如:
---通过访问url下的目录,可以直接列出目录下的文件列表;
---输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版本或其他信息;
---前端的源码(html,css,js)里面包含了敏感信息,比如后台登录地址、内网接口信息、甚至账号密码等;
类似以上这些情况,我们成为敏感信息泄露。敏感信息泄露虽然一直被评为危害比较低的漏洞,但这些敏感信息往往给攻击着实施进一步的攻击提供很大的帮助,甚至“离谱”的敏感信息泄露也会直接造成严重的损失。 因此,在web应用的开发上,除了要进行安全的代码编写,也需要注意对敏感信息的合理处理。
敏感信息起源于后台的敏感数据,所有这些重要数据,比如用户信息,原始代码,或者账号密码这样的东西,都不应该公开到互联网上去,但是因为我们的开发人员在开发的时候,一些相关的配置,写的不够恰当,或者说,没有对相关的数据进行处理,导致一些信息通过页面,通过接口,暴露到前端,这样就导致了,我们后端的敏感信息泄露,这里,我们把它拿出来定义,主要是为了大家在安全测试当中,可以从这个角度,发现一些问题,然后属于不该暴露的信息,被暴露到了前端,其实是属于一个漏洞,敏感信息泄露泄露出来的信息,有可能对企业造成比较大的危害
我们通过一个案例来了解一下
首先这边有个登录选项,我们可以看一下源代码,一般来说,我们开发人员在写完代码之后,他应该把前端的相关注释给去掉的
如果说,他把重要的信息写到了代码里面,有可能就会被前端用户发现,搜索测试
这里写了个测试账号,有可能是为了自己备注用的,但是他没有想到前端的测试代码是可以直接被看到的,这样就把测试账号密码给泄露出来了,这只是一个方面,那另外就是前端的cookie信息,cookie设计不当也会导致我们信息泄露,比如说,我们下面进行登录
登录之后,我们看一下会有个登录页面,在网络里面,我们重新载入一下,看一下对应的请求,cookie
在cookie里面,会有密码字段,虽然是hash之后的密文,但是他直接把他显示到了前端,这样其实也是不妥的做法,如果说,刚好你的hash算法,密码是比较弱的,就是md5,拿这个值直接去破解一下,就会拿到lili的明文密码
刚刚我们举了一个相关的例子,让大家知道说,从那些角度去看,我们后台的一些相关敏感信息有没有泄露出来
还有一个常见的是,我们的中间键导致的
这台机器后台是用apache搭的,然后这个apache的配置是有问题的,它采用了默认配置,会导致它相关的目录,可以直接访问,这种情况,它会把后端的目录结果直接列出来,虽然说你点这个php代码,它会返回到页面上面来
如果说下面有敏感信息,攻击者,可以直接通过目录访问的方式,获取到对应的信息,同时在页面上,它还会把中间键的版本、操作系统的版本、openssl的版本、php版本等等这些信息全部给打出来,这样攻击者,就可以去找一下这些版本有没有公开的漏洞,然后针对性的做一些攻击,这些都是属于敏感信息泄露
我们主要是通过前端的一些相关信息,cookie或者对应的报错里面,然后来查找有没有泄露相关的敏感信息
我们可以把所有的错误信息给屏蔽掉,只返回一些标准的错误页面,然后对注释进行统一的处理,像后台登录地址、内网接口等等这些我们不要向互联网开放,做好对应的访问控制,还有我们企业内部的源代码,比如源代码里面包含连接数据库的地址账号等等,像这些源代码,我们不要轻易的把它公布到互联网上去,比如说,把它放到github这些平台上去,这些都是不合理的做法,会给攻击者留下相关的信息,然后扩大攻击面
主要是为了让大家知道这两个漏洞的操作,让大家主动的去测试和发现
|