安全测试经验和理解 – 作者:lidasimida

前言

关于本篇文章主要是我个人对于渗透的经验和理解,比较适合小白、想要转行的网络从业者以及一些迷茫了不知道方向的渗透测试工程师,技术有限,只能是那么多了。

测试流程

一、信息收集

信息收集是为了更好的进行渗透测试,目的有两个,一个是直接的,就是找Nday,从这个网站收集cms、语言、框架、中间件、系统等等信息,利用这些信息尝试已公布的漏洞,判断被测对象是否也存在该漏洞,第二就是寻找0day,尽可能收集网站泄露的信息查找被测对象可能存在的漏洞,其实很多网站的CMS都不一样,对应着属于自己的开发商,他们开发出来的架构被测试出来的漏洞其实就是0day了,这还是要熟悉漏洞的原理,比如sql注入漏洞出现的位置在于sql语句查询的地方,更多的是思路流程,要从一次次测试中获取经验,明白如何更好更快速的获取敏感信息。

1、浏览器插件篇

首先,要明白,被测对象范围太大,你不可能一个个去浏览页面,从页面来审计页面的信息,这样太慢。可以使用插件进行收集,比如wappalyer插件能更好的帮助你收集这个网站的中间件、语言、框架、cms等信息,这个准确率相当高的,也可以利用whatweb进行准确的识别,最好对子目录进行识别,不要完全相信它的判断,比如开发商经常使用的伎俩就是tomcat作为网站的中间件,但是使用了nginx作正反向代理,导致你看到nginx中间件,但是你利用页面404报错的方式却显示出来是apache-tomcat中间件的时候一脸懵逼。还有版本也不要过多去相信,有可能这个返回的版本已经被企业做了中间件加固,显示出错误的版本。不过中间件加固修改这个还是比较少的,一般是隐瞒版本信息的。

然后可以使用这个show server ip插件和这个server ip插件快速收集网页的ip,相对于政府、医院、学校等单位不会把金钱投入到cdn里面,从插件看到ip基本就是它真实ip了,有些是因为dns负载均衡的利用多弄了几个ip,而私企这种以营利性为目的多会购买cdn,绕过cdn的方法很多,子域名探测、探测相关联服务器、dns历史记录查询等等。

还有这个user-agent swich插件也不错,可以更改请求头的方式访问其他系统才能访问的页面,更改这个去收集比较费时,建议在登录点这些关键页面使用好。X-Forwarded-For Header插件可以帮助你尝试一些请求头的注入,hackbar和max hackbar两个插件可以帮助你在页面上进行手工注入。这些都是比较便捷的收集信息,当然你也可以使用awvs、Nessus等扫描工具进行收集,毕竟企业都是授权测试,为何不扫呢,空余时间开着扫描就可以了,要测试的时候就可以利用上了,很多敏感信息都是可以扫出来的。

2、浏览网页收集篇

以下是个人所使用的比较隐蔽的信息收集方式,不过就是比较耗时,建议对上线测试或者登陆点这些重要网站使用。打开目标网站,打开F12刷新页面,然后你会发现一个页面的刷新请求了很多个链接,其中很多js文件,还有就是调用了api接口,会代码审计的可以尝试看看,不过审计登陆点调用的js文件就可以了。

或者你可以打开页面源代码,直接审计页面源代码,我就通过审计页面源代码发现过泄露的内网地址,还有登陆点代码泄露了默认密码,还有页面源代码都有这个子目录连接,可以查看,爬虫也是通过这些连接去爬取页面的,只不过这样隐蔽,还要查审计出现的灰色部分目录,它不是引用的链接,但是它确实是网站的子目录,可以通过这个查看,甚至这个目录里面的二级目录就是后台的二级目录的。

还有页面报错也是信息最好的方式,刚刚页面源代码查看是可以最快速的查看,点一下就可以出现该网页,然后通过递减目录的方式查看报错,比如你在页面源代码打开了链接www.test.com/a/b/c/,你递减目录查看www.test.com/a/b,这样查看它报错,我试过通过这样的方式发现页面报错403返回内网地址,然后成功利用找到ssrf漏洞,就花了3分钟,还是和一群专家一起找的,页面报错很多可以反馈敏感信息,有一些awvs扫描未探测到的也利用这种递减目录方式发现页面暴露大量的物理路径信息。

3、使用burpsuite工具篇

其实我最满意的方式是使用burpsuite,对一个网页刷新,使用burpsuite拦截,刚才也说过了不仅仅是一个请求,有很多个请求,可以将拦截到的请求全部发送到repeater模块,然后重放一下。这也很隐蔽,我不就是抓包发包,当然有一些网站对于这个burpsuite代理拦截有拒绝的,可以尝试fiddler。

通过这种抓包发包的方式,我发现了请求包出现了物理路径、隐藏的参数、内网ip、个人信息等敏感信息,例子有:通过下载点抓包发现了物理路径成功发现了任意文件下载漏洞,在cookie出现了内网ip,在忘记密码点处抓包发现存在的账号对应的敏感信息,在登录点调用的api接口仅出现了username=null值然后更改了null值为存在的用户账号任意登陆用户包括管理员账号admin的任意用户登录漏洞,在二维码处发现url出现其他链接地址然后更改为其他任意页面链接都可以生成二维码而且扫码能成功跳转的任意跳转漏洞,等等。

还有我通过了返回包的方式发现了页面的内网地址,大量的敏感个人信息,大量的变量参数名,发现了错误页面和成功页面的返回包就只有false和success的区别然后利用修改返回包的方式成功利用跳转到后台,等等。其实,思路就是这么个思路,抓包发包,关键在于你是否小心谨慎,对于数据是否敏感,对于漏洞原理是否熟悉,你才能更好的发现漏洞,经验是一部分不是全部,我也没有发现过这些位置可能暴露出来的漏洞不也成功发现了,并且我还会利用。

二、漏洞个人理解

1、漏洞判断个人技巧

对于漏洞,不要看这些漏洞那么多,其实很多都是相通的,要理解。比如fastjson和shiro,说白了就是反序列化漏洞,因为对这个反序列化函数没有做限制,导致我们可以调用这个函数,造成了反序列化漏洞。还有各种缓冲区溢出漏洞,不也是因为没有限制字节,导致你可以利用这个EIP指向内存地址,执行你存入ESP的shell。注入类是,它们只是出现的位置不一样,以下分享一下我判断一些漏洞的便捷方式。

首先后台查找,刚刚有提到各种收集信息了,但是页面不一定有这个后台的链接,隐藏的有点深。这时候要从人性的角度去判断,你想想开发人员那么辛苦弄一个网站,要想网页功能的实现,又要调试,还有解决bug,他对于这个后台的隐藏只是他仅有的一丝时间做出来的而已。比如常见的二级目录就一个a,人家都懒得想了,起了个a就可以了,麻烦的也就是起一下不知名的名字,但是也会要有关联,比如这个uploaddba,admin_ab,其中ab为域名里面的内容,可以靠猜,人家会隐藏后台常见的也就隐藏到三级目录了,对于起名字也是废脑力的,省下的就是看谁的字典好用,谁快速爆出后台了,有时间的可以针对性的划分不同的字典,或者临时组合字典。

2、用户名枚举漏洞

接下来说说用户名枚举漏洞,这个漏洞其实是枚举存在用户名的意思,很多人都只看到登录页面的报错,也就是那个点击登录提交按钮报错提示该用户不存在和密码错误,然后通过burpsuite的intruder的爆破成功的用户名。其实还有更多的利用基础,页面在忘记密码处和注册页面处是不是也会提示你用户存不存在,我经常利用的就是这种页面账号位置处右边弹出这个提示了,这个提示弹出也是可以使用burpsuite进行抓包,发送到repeater模块查看返回包是不是不一致,利用存在用户和不存在用户的返回包不同来枚举用户名,而且还没有验证码。我记得有一次想利用这种方式枚举用户名的,没想到在页面输入存在的用户名的时候还给我匹配了对应的手机号和密码了,我直接利用爆破一个用户名就可以遍历所有的账号密码了,多好的方式。

3、暴力破解漏洞

说说这个验证码存在的漏洞吧,这个验证码可以让你判断能否进行暴力破解。我总结利用的方式还是使用burpsuite的repeater模块,抓包发包再发包,因为有些页面使用了前端javascript的判断,repeater模块可以帮助你快速的绕过这种方式,快速验证这个验证码是否失效。有一次测试的时候,测试某一个站点登录的地方,我打开这个网页发现此时页面是不存在验证码的,然后输错两次账号才出现验证码,而这个验证码是有失效处理的,我是通过再次打开页面的时候还没输错验证码没有跳出来,此时抓包进行爆破绕过了验证码机制,有一些验证码是可以进行删除尝试页面是否对验证码这个变量进行验证的。还有就是pkav这个工具帮助我很多,可以自动识别验证码,还是比较好用,还可以尝试ip伪造和报错重试,burpsuite也有recaptcha插件自动识别验证码,简单的验证码能识别,复杂点的或许充钱购买第三方识别库就可以了。

4、弱口令漏洞

再谈谈弱口令这个漏洞吧,暴力破解似乎被评为低危,而弱口令被评为高危,因为暴力破解是存在,但是你没爆破出来就利用不大,弱口令这个漏洞是成功利用能够进入后台的,威胁比较大,用户名枚举漏洞是中危,毕竟不是所有的应用后台管理都会用admin的,我见过很多各种千奇古怪的管理员账号,所以用户名枚举能够帮你拿到用户名是很有用的,当然用户名是ID card的这种大浪淘沙的建议少花时间。弱口令不仅仅是常见的123456和888888,只要是我可以猜解的也算是弱口令,毕竟我都猜出来了,人家也可以猜出来。可以从防守的等保策略来看待,应用层口令复杂度必须满足数字、字母、特殊符号等至少两种组合以上的8位以上长度才符合。从我经历那么多企业的巡检和测试中,看过了很多他们的口令配置策略,复杂的都会按照字母加特殊符号加数字的组合,还是从人性的角度去思考,虽然要求复杂了,但是人毕竟是懒的,人家运维又不是记一个口令,要记住几十个应用或者服务器的口令,当然你说用文档记下来,但是要想想不背下来岂不是要在每次输口令的时候去看吗。

所以口令是有规律的,可以猜解的,字母方面一般是子域名或者单位系统首字母的缩写,有一些会出现部分大写的,特殊符号一般是@或者英文的句号,也会出现多个特殊符号,不过一般不会超过三个,毕竟输入特殊符号我还要按着shift键,多麻烦,即使是多个特殊符号也是有规律的,一般为数字6之前的特殊符号,毕竟能一个手输特殊符号,我为何要用两个手来输特殊符号呢,前面字母和特殊符号已经占用很多了,数字可能就会3个数字或者4个数字的组合,这个生成个字典组合就可以了,实在不行蒙个年份上去试试。这个可以利用burpsuite的intruder模块里面,选择payload的时候可以选择payload type里面的第三个选项custom iterator,这个可以帮助你组合字典,不需要字典生成器也是可以。

5、漏洞利用个人经验

就一个登陆点就可以有那么多利用方式,我比较喜欢去专研,而不是傻傻的来来去去就那么几种方式,别人说burpsuite爆破就可以了,爆破不到就放弃了,不应该这样,我喜欢去发现,去总结。我记得有一次我测试的时候爆破用户名的时候失误回车添加了空账号,在查看爆破结果的时候,我发现空账号的返回包出现了success的字样,然后我去尝试,再一次抓包去掉用户名发包,成功利用跳转到了后台,我把它命名为未验证用户名漏洞。在接下来的日子里我在我的账号密码字典里添加了空的一行,这是延伸的利用,我喜欢的不仅仅是研究漏洞,更是想从中获得了什么,怎么样利用这次发现的漏洞方法。至于其他的漏洞,一些注入型、任意文件上传、任意文件下载的漏洞,我有发现,但是更多是一种页面遗漏的点,也有一些绕过成功的方式,不过都是学习别人的,就不献丑了。

三、攻防相生

1、前言

其实在我看来不仅仅要去学习渗透测试,也要从防守的角度去看攻击。虽然由于企业的要求,我要学习等保,还给我塞了等保项目,我其实更喜欢渗透测试,更喜欢去研究,我喜欢和别人技术交流,不是和客户进行沟通,在我看来那是浪费我的时间,我会全身心投入工作中,因为工作在我观念中就是学习,这样我白天学渗透,晚上回去花时间学编程或逆向,可是工作不尽人意,一个等保项目一天就可以浪费我3小时在沟通上了,而且还经常打断我渗透的思路,所以我建议喜欢渗透的不要去做项目经理,我是因为公司项目经理不够凑上的。

2、巡检加固

接下来,让我们先从巡检加固的方向去看攻击。比如这个windows系统对这个策略进行加固,考虑人的懒惰,会设置密码复杂度,这样设置密码就不能设置弱口令了,这样你可以利用刚才所推荐的组合方式去猜,需要设置这个最短使用密码期限,这样你不会频繁更改密码,最长使用期限是为了提醒你不要一直用那个密码,强制密码记住历史也是提醒你不要重复使用以前的密码。其实这个设置也是可以很大的可以利用的,想想一个企业几十台服务器,有的几百台服务器,人家运维哪里想的了起那么多不一样的名字,还是要时长更改,这不是折磨别人,所以这个撞库的可能性很大,甚至应用管理后台和服务器的口令会撞库。从加固的很多方面都可以看问题的,不说太多了,说说巡检吧。

巡检的时候其实就是到客户的真实环境了,你可以看到更多客户怎么配置这个环境的,甚至利用巡检下的思路进行攻击。比如我巡检的时候,打开运行一看上面还有记录着其他服务器的地址呢,这是其他服务器开启了共享,方便传输文件,有些企业感觉服务器多,专门弄了个FTP共享服务器,那个服务器连密码都不用输了,直接可以访问,这个是不是一个内网攻击的时候可以信息收集的点。之前应急响应的时候发现了服务器因为这个rdp保存了另外一台服务器的账号密码,直接可以成功登录另外一台服务器,这个rdp远程登录是不是也是内网渗透信息收集的一个点,所以为什么要加固“交互式登录:不显示最后的用户名“”这个选项了,活生生的加固举例。由攻知防,由防知攻,攻防相生。

3、等级保护测评

对等保我也简单说一下吧,等保其实就是给你的环境堆护甲,在别人攻进来的时候要先布置好防御,至于1到5级只是护甲的厚度区分。等保可以从5个层面进行考虑,分别为物理、网络、应用、系统和管理。物理方面无非就是对设备的保护,一个是从人为攻击的角度进行保护,对环境进行监控设置之类的,一个是从环境影响的角度进行保护,对设备做好防潮、防雨、防火、防震等等措施。网络层面,可以从攻防来看,比如为什么要限制用户并发量以及线程并发量,这是防止DDOS攻击;为什么要对网络环境进行隔离,这是防止被入侵之后直接整个网段的服务器被弄了;等等。应用层面,从攻防来看,设置管理后台的口令复杂度和登录失败次数过多锁定机制也是防止别人暴力破解,开启审计模块也是为了能溯源分析攻击者,不设置这个的话,别人登录了你后台一直在使用你都不知道,至于日志定时备份和防止增删改也是为了溯源。系统层面,和应用层面大相径庭,主机加固就是对应系统层面的策略配置,中间件加固对应应用层面的一部分策略配置。管理层面,主要是为了做好保密等措施,再好的防御不还也是可以通过密码可以登录入侵吗,所以社工钓鱼等手段层出不穷,毕竟这是最简单也是最直接的手段,很看个人资质,至于那些社工库在我看来属于信息收集一类,社工是欺诈的艺术,在于心理学。

4、防御

还有最后就是防御了,在我看来防御可以分为堆甲和阻断。堆甲就是将防御堆起护甲,让攻击连攻都攻不破,一是对常见注入做好过滤防御,二是做好这个策略配置,三是实时更新这个版本防御Nday,等等。堆甲是从攻击的角度来去思考如何提升防御,避免被攻破的可能。当然要是堆甲就可以起绝对作用的话,也不会整天出现服务器被攻破的安全事件了,所以要进行阻断。阻断是为了避免攻击影响扩大,一是利用态势感知等设备监控服务器实时查看分析是否存在攻击入侵事件,可以在最短时间内有效阻断攻击范围,二是利用本地杀毒软件、防病毒网关等防止病毒的传播入侵扩散,三是定期进行人工巡检排查隐患,避免被别人利用口令等方式隐蔽登录了服务器,等等。

以上仅为我个人一些经验和理解,希望对你有帮助。

来源:freebuf.com 2020-09-28 22:21:23 by: lidasimida

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论