本文来自作者 Mr.time 在 GitChat 上分享「Web 渗透测试入门」,「阅读原文」查看交流实录
「文末高能」
编辑 | 嘉仔
写在前面,特别说明:
本文技术内容具备一定的攻击性,请勿非法攻击他人网站!!!
渗透测试基本环境搭建
基本环境搭建
目前主流的渗透测试环境是Kali Linux系统,可能大家知道许多其他的 Linux 版本,例如 Ubuntu Centos Fedora Red hat 等。
这些都是 Linux 的发行版,可以根据自己的喜好和需求自行选择。这里我们选择使用 kali Linux 来作为渗透测试的基础环境。
系统环境
可能目前大家用得 Windows 比较多,那么如何在 windows 里再安装一个系统呢,来实现双系统呢?
现在就来实现搭建双系统这个基本功能。让大家同时玩转 kali Linux 和 Windows。“一机多用”。
windows 下如何安装kali Linux
所需软件下载:
步骤说明
为方便新手使用,本次演示的安装过程使用中文简体语言,这也为之后熟悉 kali Linux 里的工具有所帮助,在基本了解 kali 后可以安装英文版本,过程类似。
安装步骤中,如果只有图片没有文字说明,则选择图片中所选项即可,如果有文字则一般文字在前,图片在后,并且选择内容以文字说明为准。
打开 VMware Workstation ,选择“创建新的虚拟机”。
选择“自定义”。
点击“下一步”。
选择“稍后安装操作系统”。
选择“Debian8.x64位”。
输入“虚拟机名称”和“存放路径”,点击下一步。
配置处理器数量和核心数,因为我的cpu是i7 所以选择大一点,根据自己的机器来选择即可。然后点击下一步。
这里是配置虚拟机的内存,我的内存是8G,我给虚拟机配置一个2G,这个也根据自己机器的内存来选择即可。然后点击下一步。
接下来是配置虚拟机的网络,为了方便学习,这里直接选择“桥接模式”,点击下一步。
默认选择,下一步。
默认选择,下一步。
这里选择“创建新的虚拟磁盘”,然后下一步。
这里为了虚拟机有足够的空间我直接配置了100G虚拟空间,这个根据自己的硬盘大小来配置,选择“将虚拟磁盘拆分成多个文件”然后下一步。
然后选择磁盘文件存放位置,然后下一步。
下一步。
点击完成。
点击“编辑虚拟机设置”。
点击”CD/DVD”这里设置,选择使用ISO映像文件,然后浏览选中我们之前下载好的Kali Linux 的ISO镜像。点击确定。
点击“开启此虚拟”,开始安装系统。
选择“Graphical install” 开始安装kali。
选择“简体中文”, 点击continue。
选择“是”,点击继续。
等待安装。。。
等待安装。。。
点击 继续。
继续。
继续。
继续。
继续。
这里选“否”,在这里不要使用网络镜像功能,如果使用网络镜像会从国外网站下载最新版本软件,如果网络不好会很慢或下载的软件是破损的。
这一步一定要选“是” 。
等待安装。。。
安装结束,点击 继续 。
等待,结束安装进程,它会自动重启。
重启之后,如图所示,出现登录页面:
输入用户名:root
密码:你设置的密码
登录成功:
现在看起来界面比较小,所以我们来设置下分辨率,让它看起来完整一点,点击右上角和左下角这里,如图所示:
现在就可以享受一下大屏的快感了,背景图为kali Linux的logo标志:
接着我们来看看虚拟机的ip和网络是否连通,能否上网:
我们先打开终端,执行Linux 命令,查看ip:
ifconfig
结果如图所示:
可以看到我虚拟机的ip是:192.168.1.142。
接着查看是否网络连通,执行Linux命令,ping网络:
ping baidu.com
结果如图所示:
可以看到它返回里 baidu 的ip,和响应时间,说明我们的网络已经连通!
注意:我们执行ping命令返回结果之后,按住“ctrl+c”键 ! 来结束ping命令,否则它会一直ping下去!
我们再打开火狐浏览器,访问网页试试:
访问百度,结果如图所示:
小结:至此web渗透测试的基础环境搭建完成,实现了在Windows下“一机多用”的功能,当然只要你的机器配置和性能够高的话,理论上可以安装任意多个系统。
渗透测试基本流程
什么是渗透测试?
渗透测试(penetration test)是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。
这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析,这个分析师从一个攻击者可能存在的位置来进行的,并且从这个位置有条件主动利用安全漏洞。
渗透测试还具有的两个显著特点是:渗透测试是一个渐进的并且逐步深入的过程。渗透测试是选择不影响业务系统正常运行的攻击方法进行的测试。
渗透测试的目的是什么?
渗透测试能够通过识别安全问题来帮助一个企业理解当前的安全状况,这使促使许多企业开发操作规划来减少攻击或误用的威胁。使受测企业的网络和应用系统更加安全。
渗透测试的基本流程是什么?
如图所示:
渗透测试基本流程
渗透测试的基本流程主要分为以下几步:
明确目标
信息收集
漏洞探测(挖掘)
漏洞验证(利用)
提升权限
清除痕迹
事后信息分析
编写渗透测试报告
明确目标
主要是确定需要渗透资产范围;确定规则,如怎么去渗透;确定需求,如客户需要达到一个什么样的效果。
信息收集
信息收集阶段主要是收集一些基础信息,系统信息,应用信息,版本信息,服务信息,人员信息以及相关防护信息。
信息收集大多是工具加手工进行收集信息,工具如nmap,包括Google Hacking, Whois查询, DNS等信息(如果考虑进行社会工程学的话,这里还可以相应从邮件列表/新闻组中获取目标系统中一些边缘信息如内部员工帐号组成,身份识别方式,邮件联系地址),相关终端命令,浏览器插件,在线工具等。
漏洞探测(挖掘)
主要是探测(挖掘)系统漏洞,web服务器漏洞,web应用漏洞如以及其他端口服务漏洞,如telnet,ssh,vnc,远程桌面连接服务(3389)等。
漏洞验证(利用)
漏洞验证主要是利用探测到的漏洞进行攻击,方法主要有自动化验证(msf),手工验证,业务漏洞验证,公开资源的验证等。
总的来说就是工具加手工,为了方便,可以将自己渗透常使用的工具进行封装为工具包。
提升权限
提升权限主要是在当前用户权限不是管理员的时候需要进行提升权限,提升权限可以是提升系统权限,web应用权限或是数据库权限等。
清除痕迹
清楚痕迹主要是清除渗透过程中操作的一些痕迹,如添加的测试账号,上传的测试文件,清除日志等。
事后信息分析
主要是对整个渗透过程进行信息分析与整理,分析脆弱环节,技术防护情况以及管理方面的情况进行一个现状分析以及提出相关建议。
编写渗透测试报告
根据渗透测试具体情况编写渗透测试报告,渗透测试报告必须简洁明了,说清楚渗透清单(范围),攻击路径,渗透成果,以及详细的漏洞详情(相关描述、漏洞危害等)及可行的修复建议。
最后对整改渗透情况进行简单的总结和分析,说清楚目前资产的一个状况是什么样的,应该从哪些方面进行加强和提升。另外根据渗透测试报告可让第三方相对容易复现成功!
小结:至此渗透测试的基本流程我们已经有了一定的了解,在公司里web安全渗透人员的做的工作也大多是这样的流程。
渗透测试的类型
实际上渗透测试并没有严格的分类方式,即使在软件开发生命周期中,也包含了渗透测试的环节,但根据实际应用,普遍认同的几种分类方法如下:
黑盒测试
黑盒测试又被称为所谓的“Zero-Knowledge Testing”,渗透者完全处于对系统一无所知的状态,通常这类型测试,最初的信息获取来自于DNS、Web、Email及各种公开对外的服务器。
白盒测试
白盒测试与黑盒测试恰恰相反,测试者可以通过正常渠道向被测单位取得各种资料,包括网络拓扑、员工资料甚至网站或其它程序的代码片断,也能够与单位的其它员工(销售、程序员、管理者……)进行面对面的沟通。这类测试的目的是模拟企业内部雇员的越权操作。
隐秘测试
隐秘测试是对被测单位而言的,通常情况下,接受渗透测试的单位网络管理部门会收到通知:在某些时段进行测试。因此能够监测网络中出现的变化。但隐秘测试则被测单位也仅有极少数人知晓测试的存在,因此能够有效地检验单位中的信息安全事件监控、响应、恢复做得是否到位。
渗透测试相关原则
最小影响原则
非破坏性原则
全面深入原则
保密性原则
网站基础与信息搜集
浏览器地址栏里的URL
当我们在火狐浏览器里访问一个页面的时候通常是这样的:
http://gitbook.cn/gitchat/activity/59fa8480dba16b1bb5d17d85
我们访问的是网站中哪个网页?这是一个静态页面还是动态页面??id是什么意思?这个网站采用的是哪种脚本语言?这个网站所采用的后台数据库最有可能是什么?这个网站所采用的Web容器最有可能是什么?
我们访问的是网站中一个名为gitchat的网页;activity是网页中的一个参数,客户端通过这个参数将数据 59fa8480dba16b1bb5d17d85传递给网页;网页去数据库中查找符合activity = 59fa8480dba16b1bb5d17d85 这个条件的数据,并将之传递到客户端显示出我们所看到的页面。
传值方法
网站服务器端从客户端获取数据的方法主要有两种:
组成格式
http://gitbook.cn/gitchat/activity/59fa8480dba16b1bb5d17d85
protocol 协议,常用的协议是http
hostname 主机地址,可以是域名,也可以是IP地址
port 端口 http协议默认端口是:80端口,如果不写默认就是:80端口
path 路径 网络资源在服务器中的指定路径
parameter 参数 如果要向服务器传入参数,在这部分输入
query 查询字符串 如果需要从服务器那里查询内容,在这里编辑
fragment 片段 网页中可能会分为不同的片段,如果想访问网页后直接到达指定位置,可以在这部分设置
URL,Internet上标准的资源地址表示方法,一般格式
协议名: //主机FQDN名(IP):端口/路径
协议名一般为HTTP协议或FTP协议。端口号通常可以省略。如果使用的是HTTP协议,默认端口为80;如果使用FTP协议,默认端口为21。
在URL中如果指明路径,则是打开一个具体的网页或是某个具体的文件,如果路径省略,则是打开相应网站的首页。
这是一个静态页面还是动态页面?
静态网页:内容固定不变,文档扩展名通常为 .htm、.html、.shtml 等。
动态网页:可以与后台数据库进行交互和数据传递。同一个网页文件能根据不同的请求显示不同的内容。根据所使用的网页语言不同,一般以.asp、.php、.jsp、.aspx等作为扩展名。
静态网页由HTML语言编写
这是一个HTML网页
这是一个段落