渗透测试
渗透测试
本部分我们会讨论常见的综合渗透测试工具,常用的渗透测试流程,技巧等内容。
渗透测试可以从不同的维度进行分类,
按信息获取方式分类
黑盒渗透(BlackBox ) | 从目标网络的外部进行渗透模拟的,除了被测试目标的已知公开信息外,不提供任何其他信息 |
---|---|
白盒渗透(White Box ) | 渗透测试者可以通过正常的渠道,向请求测试的机构获得目标网络系统的各种资料,包括网络拓扑结构、用户账户、操作系统、服务器类型、网络设备、代码片段等信息 |
灰盒测试(Gray Box ) | 介于二者之间, |
按目标对象分类
主机操作系统渗透 | 对目标网络中的 Windows、Linux、Unix 等操作系统主机进行渗透测试 |
---|---|
数据库渗透测试 | 对 MS-SQL、Oracle、MySQL 等数据库系统进行渗透测试, |
网站程序渗透 | 渗透的目标网络系统都对外提供了 Web 网页、E-Mail 邮箱等网络程序应用服务 |
网络设备渗透 | 对各种硬件防火墙、入侵检测系统、路由器和交换机等网络设备进行渗透测试 |
按网络环境分类
外网 | |
---|---|
内网 |
渗透测试步骤
1. 分析目标网站内容及功能步骤
(1) 首先确定网站采用何种语言编写 . 或者是否有混用的情况 . 此处可以通过查看网站源文件, 观察网站链接, 捕获提交请求等方式获取 .
(2) 爬行网站目录, 使用工具对网站目录进行爬行, 可以辅助上一步让结果更加精准 . 将爬行结果存档, 如果可以, 此处应分析出网站是否使用通用程序, 如果是, 记录下来 . 进行下一步 .
(3) 根据上一步的爬行结果, 对网站根目录或者关键目录进行暴力目录探测, 如果网站为通用程序, 判读是否有过二次开发, 如非通用程序, 在探测到的目录中寻找关键目录及文件 .
此步骤详细测试方法
① 输入并访问一些不可能存在的文件或目录名, 再输入并访问一些通过目录爬行已知存在的目录及文件名, 从而得知服务器如何处理无效资源 .
② 使用网站爬行到的结果作为此步骤暴力目录探测的依据, 扫描关键目录或全部 .
③ 确定服务器如何处理文件无法找到的回应, 并使用关键字技术来处理这些回应 . 从而判断有效资源及无效资源 .
④ 收集此步骤暴力扫描得到的结果, 并手工检测探测到目录的有效性 .
⑤ 重复以上步骤, 得到更多更关键的目录及文件 .
(4) 通过上面步骤, 得到一个完整的网站目录结构, 以及枚举到的所有目录名称, 文件名称及文件扩展名 . 了解网站开发人员的命名思路, 确定其命名规则, 推测出更多的目录及文件名 .
此步骤详细测试方法
² 检查整个列表中的文件命名规则, 判读其命名依据, 如发现几个部分内容相同的文件名 ,addnews.php,viewnews.php, 那么我们就可以尝试是否存在 editnews.php,delnews.php, 通常只要查看几个文件名, 就可以推测出网站开发人员的命名习惯, 根据其个人风格, 开发者可能采用各种命名方法, 如冗长式 (addnewuser.php), 简洁式 (adduser.php), 缩写式 (addusr.php), 或者更加模糊的命名方式 (addu.php). 了解开发者使用的命名习惯有助于推测出尚未确定内容的准确名称 .
² 有些不同内容的命名方案使用数字和日期作为标识符, 通过他们可以轻易推测出隐藏的内容 . 静态页面经常采用这种命名方式 . 例如 PKAV.NET 的团队博客中, 文章里所展示的图片的文件名没有被重新定义, 采用了日期加数字递增的命名方案, 如 2012 年 12 月 12 号发布的文章中的图片分别为 1.jpg,2.jpg,3.jpg. 那么这些图片的路径就是 /2012-12-12/1.jpg,/2012-12-12/2.jpg, /2012-12-12/3.jpg, 此时我们在博客上发布了一篇内容加密的文章, 只有团队成员才知道密码, 但是黑客们根据博客以往发布文章的命名规则推测出了这些图片的准确地址, 从而通过图片内容泄漏了文章的大致概念 .
² 检查所有客户端代码, 如 HTML 及 JS 代码, 寻找任何隐藏了服务器端的线索, 以及隐藏的表单元素等 . 认证检查注释内容, 往往能带给我们惊喜, 如部分通用程序会在网站首页放置一个通向网站管理后台的链接, 但网站管理人员不希望这个链接被正常访问者所得知, 于是将内容注释, 我们可以通过查看 HTML 代码得知此具体地址, 还有大多数的管理后台中所调用的 JS 中常常会存储着后台所有功能模块的链接地址, 但在判断了当前用户权限后将其隐藏起来, 我们也可以通过直接查看 JS 代码的方式得知具体的内容, 还有一些开发者会在注释内容中记录一些敏感信息, 我多次从注释信息中得到数据库的名称, 甚至可以得到数据库的具体连接信息 ,SQL 查询语句等 .
² 把我们通过推测枚举出来的内容放在其他地方进行尝试。如文件 a.php 在 /111/ 这个目录下存在, 那么我们可以尝试在 /222/ 这个目录下尝试是否存在相同文件, 把所有枚举出来的文件名使用一些常规后缀来尝试访问, 如 index.php 这个文件已知存在, 我们可以使用 txt,bak,src,inc,tmp 等后缀进行尝试, 如尝试 index.txt,index.bak 或者添加在原有后缀基础上 ,index.php.bak 等 . 这样可以帮助我们获取这些文件的未编译版本, 开发版本或者备份文件, 还可以通过网站使用的语言来推测, 如 java 使用的 .cs 后缀等 .
² 搜索开发者使用的开发工具或者文本编辑器创建的临时文件。如 SVN 的 .svn/entries, 又或者 Ultraedit 这类文本编辑器的自动备份功能创建的 .bak 文件, 被大量使用的 .tmp 后缀, 以及 index.php~1 这样的遗留文件, 这些都是可能会发现重要线索的细节, 测试中一定不要遗漏这些步骤 .
² 将上述的步骤自动化, 提取所有存在的文件名以及目录, 后缀的词干信息, 在所有目录下进行自动化批量探测 .
² 如果通过以上步骤已经确定一种统一的命名方案, 那么就可以使用此命名规则在整个站点下进行测试 .
² 不断重复以上步骤, 获取更多的关键信息, 根据时间及个人想象力尽情发挥 !
(5) 利用公共信息, 如搜索引擎, 站点快照信息, 以及其网站所使用的程序开发商公布的一些使用文档等信息近一步获取目标站点更多信息 .
a. 使用几种不同的搜索引擎和网站快照来获取目标站点的索引和历史内容记录 .
b. 使用高级搜索技巧如
site:www.hao123.com ( 返回此目标站点被搜索引擎抓取收录的所有内容 )
site:www.hao123.com 关键词 ( 返回此目标站点被搜索引擎抓取收录的包含此关键词的所有页面 . 此处我们可以将关键词设定为, 网站后台, 管理后台, 密码修改, 密码找回等 .) site:www.hao123.com inurl:admin.php ( 返回目标站点的地址中包含 admin.php 的所有页面, 可以使用 admin.php,manage.php 或者其他关键词来寻找关键功能页面 )
link:www.hao123.com ( 返回所有包含目标站点链接的页面, 其中包括其开发人员的个人博客, 开发日志, 或者开放这个站点的第三方公司, 合作伙伴等 )
related:www.hao123.com ( 返回所有与目标站点 ” 相似 ” 的页面, 可能会包含一些通用程序的信息等 .)
c. 在搜索时不要只使用网页的搜索功能, 可以尝试如图片, 新闻等功能来定位具体信息 .
d. 从搜索引擎的快照中寻找一些关键信息, 如程序报错信息可以会泄漏网站具体路径, 或者一些快照中会保存一些测试用的测试信息, 比如说某个网站在开发了后台功能模块的时候, 还没给所有页面增加权限鉴别, 此时被搜索引擎抓取了快照, 即使后来网站增加了权限鉴别, 但搜索引擎的快照中仍会保留这些信息 .
e. 通过搜索引擎获取目标站点的子域名, 得到更多的功能, 如有些网站经常使用 admin 这个子域名作为其管理后台, 如 admin.hao123.com 等 .
(6) 收集网站开发者信息, 如网站的开发人员, 管理维护人员等在互联网上的一些信息 .
① 列出网站中得到的所有开发及维护人员的姓名和邮件地址及其他联系方式, 其中包含从网站联系功能中获取到的, 从 HTML 或 JS 中的注释信息中得到的, 已经内容页面上获取到的。
② 使用上面介绍的一些高级搜索技巧, 查找这些人在互联网上发布的与目标站点有关的一切信息, 分析并发现有用的信息, 如我曾经在用这个方法获取某国内大型网站的开发人员的信息时, 竟发现他把他开发过的所有功能页面的源代码都放在一个公开的网站中, 可以随意下载, 包含了这个网站的数据库链接信息等关键内容, 从而导致我轻松获取到这个大型网站的权限