渗透测试一般思路和手法

 [toc]

# 一.信息搜集

## 1.1 端口

扫描是否开放其他端口

## 1.2 目录

扫描是否存在敏感路径,尝试发现管理登陆入口

## 1.3 域名查询

扫描是否存在其他子域名

## 1.4 常规漏洞扫描

使用漏扫工具查看扫描结果

## 1.5 默认查询

查看是否有后台,数据库的默认登录密码,查看默认的配置文件路径。

## 1.6 前台功能

查看使用的语言类型,对业务功能进行基本使用测试,最好能发现url跳转,用户评论,文件引用,文件上传,文件下载等交互性强的功能点。

## 1.7 登陆口功能

查看验证码是否可绕过,查看用户登录检查是否可枚举,注册查看密码规则(大小写,数字字母组合),查看密码重置功能,分析其逻辑以及认证方式。

## 1.8 后台功能

如果能注册进入,后台主要查看3种功能,上传功能(上传webshell),查询功能(sql注入),命令功能(命令注入),系统配置(在配置文件中写入shell)。

## 1.9 前端JS分析

使用F12打开控制台,分析其前端JS功能,尝试找到可能使用js来编写的前端逻辑并分析。

## 1.10 抓包分析

使用burp的时候,一定要注意每处参数的意义,多思考为什么这个参数会出现在这里,结合cookie、session、token的原理机制,多分析账号认证的流程。

## 1.11 编码分析

在请求包中很多消息不会明文传递,编码方式主要有url,unixtime,hash,base64,自定义编码等等,前4个我们应该尽量去还原编码内容,最后一种可以多观察逻辑,尝试分析编码算法。

# 二.漏洞利用

## 2.1 已知exp使用

根据信息搜集结果,直接网上寻找对应开发框架或CMS的成熟漏洞利用工具,如struts2的全家桶。

## 2.2 暴力破解

适用于验证码可绕过,使用top1000,中国人名全拼等字典,也可以根据搜集到的密码规则匹配相应账号使用hashcat自行创建字典。burpsuite的暴力破解模块也提供了多样化的字典生成功能。

## 2.3 逻辑漏洞

尤其是密码重置,很关键。根据经验来看,至少可从七个方面攻击密码找回功能:重置凭证接收端可篡改、重置凭证泄漏、重置凭证未校验、重置凭证可暴破、用户混淆、应答中存在影响后续逻辑的状态参数、token 可预测。在逻辑漏洞的找寻中,重点观察跟你用户名有关的请求,尝试在各种请求中将你的用户名或身份认证替换成他人的。

## 2.4 JS信息泄露

一般内部系统的网站JS可能会存有用户接口,我们可以通过接口发现用户信息。也可以分析js的代码,构造出后台路径和参数逻辑。

## 2.5 后台WEB漏洞

除了在信息搜集中提到的上传功能(上传webshell)、查询功能(sql注入)、命令功能(命令注入)外,其他web安全漏洞都最好根据功能逐一尝试。

## 2.6 代码审计

如果拿到源码,可以根据审计结果构造payload

# 三.建立据点

## 3.1 反弹shell

漏洞利用成功时,通常会在目标机上获得一个webshell,但是webshell虽然能执行命令和管理文件,但毕竟不是真正的shell,而且也不稳定,因此就需要反弹shell到一个稳定的环境中。

## 3.2 反弹shell时候可能遇到的问题

反弹命令不存在、禁止出口流量、限定向外访问端口、流量审查

- 反弹命令不存在:命令有很多,常用命令有nc/nc.openbsd/nc.traditional、bash/sh/dash、python/perl/PHP/ruby、exec,因此命令不存在的概率很小;在服务器上使用'whereis nc bash php perl python ruby' 就能知道命令是否存在;
- 禁止出口流量:某些目标在防火墙上限制了出口流量,禁止目标主动向外发起网络请求,可以通过带外(Out Of Band)的方式进行验证。大致逻辑是,在攻击者自己的 VPS 上监测某种协议的网络请求,在目标上用这种协议访问 VPS,若在 VPS 上看到该协议的请求日志,则可推断出目标允许出口流量;
- 限定向外访问端口:某些目标限定访问外部端口,常见黑名单和白名单两种方式。黑名单,比如,禁止目标机器向外访问 MSF 默认的 4444 端口;白名单,比如,只允许向外访问 web 常见的 80 端口。黑名单的情况好绕过,随便指定一个端口号就行,白名单的话就只能探测可允许端口,常见就是80和443,需要想办法利用。
- 流量审查:目标环境会对所有流量进行检查,检查的时候会发现流量中的恶意代码信息。这种情况可以结合上面的443端口,使用攻击者的VPS创建ssl证书公钥/私钥对,VPS开启openssl监听,然后使用openssl对反弹shell的流量进行加密,这样就能防止流量审查反弹成功。

## 3.3 使用python建立真正的交互式shell

```python
python -c 'import pty; pty.spawn("/bin/bash")'
```

# 四.权限提升

webshell中的90%都是www-data权限,需要想尽办法提升至root权限,可以用的办法有利用内核栈溢出提权、搜寻配置文件中的明文密码、环境变量劫持高权限程序、不安全的服务、借助权能(POSIX capabilities)提权、sudo 误配、SUID 滥用等等。这些可以查阅网上相关资料和方法,下载对应的exp完成。