什么是渗透测试
渗透测试 (penetration test),是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析,这个分析是从一个攻击者可能存在的位置来进行的,并且从这个位置有条件主动利用安全漏洞。
渗透测试可以测试网络、应用程序、操作系统和其他计算机系统的安全性,以评估其能否抵抗未经授权的访问和攻击。渗透测试可以使用多种工具和技术,包括端口扫描、漏洞扫描和渗透测试工具,如Nmap和Burp Suite等。
渗透测试需要注意安全、法律和伦理问题。在渗透测试过程中,渗透测试人员必须确保所做的一切都在法律和道德的范围内。此外,测试人员必须将所有发现的漏洞和弱点保密,并确保没有未经授权的访问或数据泄漏风险。
渗透测试流程
渗透测试的流程要从明确目标,然后进行信息收集、漏洞扫描、漏洞利用、权限维持,最后编写报告。
信息收集
信息收集(Information Gathering),是指通过各种方式获取所需要的信息。信息收集对于渗透测试来说非常重要,只要掌握目标程序足够多的信息,才能更好地进行漏洞检测。
当我们拿到确定了目标后,可以从以下几个方面来对其进行信息收集:
- 站点基础信息:站点的域名、IP以及IP所开放的端口等;站点使用的框架、编写语言等,以及WEB中间件等;
- 站点文件:使用目录扫描工具查看是否有后台;是否有未授权的敏感文件;收集站点的JS文件看其中是否有敏感信息;
- 站点子域名:使用子域名扫描工具查找所有子域名;
- 站点Whois信息:域名注册查询,注册登记的信息(姓名,地址,电话,邮箱,网络ip等)
- 旁站信息:很多网站都是被托管在云主机上,一个服务器中可以运行多个网站,可以查询同IP对应的网站或者C段的站点信息。
漏洞扫描
漏洞扫描是指基于漏洞数据库,通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,发现可利用漏洞的一种安全检测的行为。
漏洞扫描也分为自动化测试与手动测试两种:
自动化
这里我们可以利用一些自动化的漏洞扫描工具,例如AWVS、XRAY、goby等,将收集到的站点进行批量化扫描,这些工具带有POC库会对站点进行探测,自动测试站点是否存在漏洞,并生成相应报告供我们查看。
自动化扫描批量化、自动化,速度快,但因为是根据人为写好的POC来进行探测的,所以会有误报的情况,我们需要对照报告去验证这些漏洞是否存在;产生的流量会很大,可能导致站点崩溃或被安全设备拦截。
手动测试
部分漏洞是无法被扫描器扫出来的,例如逻辑漏洞和一些SQL注入、存储型XSS漏洞,这时候就需要我们进行手动测试。
漏洞利用
漏洞利用(Exploit)是计算机安全术语,指的是利用程序中的某些漏洞,来得到计算机的控制权(使自己编写的代码越过具有漏洞的程序的限制,从而获得运行权限)。
通过手工或自动化工具收集到了漏洞后,我们需要验证这些漏洞的真实性与危害性。例如文件上传漏洞,我们可以利用来上传一句话木马并使用蚁剑等工具连接目标站点所在服务器;利用命令执行(RCE)漏洞来反弹shell;利用文件包含来获取站点服务器上的敏感文件与敏感信息等。
提权与权限维持
提权
提权指的是提高自己在服务器中的权限,主要针对网站入侵过程中,当入侵某一网站时,通过各种漏洞提升WEBSHELL权限以夺得该服务器权限。
也可以是我们拿到站点低权限账号后,通过垂直越权漏洞升级为高权限账号。
权限维持
简单来讲就是我们获取到目标服务器权限后,如何维持住该权限,例如通过ssh密码成功登录到服务器了,如果所有者修改了密码,就无法再进行登录了,因此就需要进行权限维持。
如果是Windows服务器,我们可以使用net user catalyze$来创建隐藏账号等;Linux的话可以写入不死码等。
报告编写
不管是项目还是挖掘SRC等,最后我们都需要编写报告来记录渗透测试的全流程,并明确的写出哪里存在漏洞,以及漏洞修补的方法。以便于网站管理员根据我们的渗透测试报告修补这些漏洞和风险。