渗透测试

一、基本流程

目标确认->信息收集->漏洞发现->漏洞利用->权限维持、内网渗透->目标获取、痕迹清理

1、目标确认

渗透测试的目标和深入程度

dns/cms侦查、子域名枚举、端口扫描、目录遍历、google

社工:弱口令、数据泄露、whois、邮箱、github、代码注释、钓鱼(邮件、网站)

公开漏洞:系统漏洞、web漏洞

漏洞挖掘:服务器、网站、公众号、小程序、app

2.信息收集

在信息收集中,最主要的就是收集服务器的配置信息和网站的敏感信息,其中包括域名及子域名信息、目标网站系统、目录扫描(御剑、/.git/.svn)、CMS指纹﹑目标网站真实IP、C段扫描、端口扫描、中间件版本。换句话说,只要是与目标网站相关的信息,我们都应该去尽量搜集。

通过脚本语言如idnex.php,判断出网站类型

.do、.action考虑Struts2漏洞

基础设施枚举(获取公司在互联网和内部网上的位置;确定公司的安全措施)

服务枚举(服务版本、服务信息;许多服务有版本历史记录,可以识别主机或服务器上安装的版本是否是真的或新的)

主机枚举(确定该主机或服务器扮演什么角色以及它与哪些网络组件通信。此外,确定所用服务及用途,以及端口。)

掠夺(获取敏感信息如员工姓名、客户数据【需要在目标主机上获取到访问权限】)

域名、IP、端口、服务端框架、语言、开源情报、防御措施等

2.1域名信息

正向记录(mx,ns,txt,spf,cname)

反向查询(whois信息反查:电话、邮箱、姓名)

备案信息

2.1.1 whois

Whois就是一个用于查询域名是否已被注册以及注册域名的详细信息的数据库(如域名所有人、域名注册商)。

注册人的姓名和邮箱信息通常对测试个人站点非常有用,因为我们可以通过搜索引擎和社交网络挖掘出域名所有人的很多信息。对中小站点而言,域名所有人往往就是管理员。

kali可以在线查,在线Whois查询的常用网站有爱站工具网(https://whois.aizhan.com)、站长之家(http://whois.chinaz.com)和VirusTotal(https://www.virustotal.com),通过这些网站可以查询域名的相关信息,如域名服务商、域名拥有者,以及他们的邮箱、电话、地址等。

2.1.2 备案信息查询

网站备案是根据国家法律法规规定,需要网站的所有者向国家有关部门申请的备案,这是国家信息产业部对网站的一种管理,为了防止在网上从事非法的网站经营活动的发生。主要针对国内网站,如果网站搭建在其他国家,则不需要进行备案。

常用的网站有以下这两个。

● ICP备案查询网:http://www.beianbeian.com。

● 天眼查:http://www.tianyancha.com。

2.2 收集敏感信息

google搜索引擎

关键字 说明
site 指定域名
inurl url存在关键字的网页
intext 网页正文中的关键字
Filetype 指定文件类型
intitle 网页标题中的关键字
link link:xxx.ip,返回所有和xxx.ip做了链接的url
info 查找指定站点的一些基本信息
cache 搜索谷歌里关于某些内容的缓存

例如: site: edu.cn intext:后台管理,网页中正文含有intext,域名后缀为site

github(数据库连接信息、邮箱密码、uc-key、阿里的osskey,有时还可以找到泄露的源代码等。)

bp的repeater模块(go运行后,右侧的response模块中可以获取一些服务器的信息)

乌云漏洞表查看历史漏洞信息

2.3 收集子域名信息

主域攻不下来,那就转二级域名。

子域搜索方法:

1.子域名检测工具

用于子域名检测的工具主要有Layer子域名挖掘机、K8、wydomain、Sublist3r、dnsmaper、subDomainsBrute、Maltego CE等。

2.搜索引擎枚举

Google语法搜索子域名

比如site:baidu.com

3.第三方聚合应用枚举

很多第三方服务汇聚了大量DNS数据集,可通过它们检索某个给定域名的子域名。只需在其搜索栏中输入域名,就可检索到相关的域名信息

DNSdumpster网站(https://dnsdumpster.com/)、在线DNS侦查和搜索的工具挖掘出指定域潜藏的大量子域。

4.证书透明度公开日志枚举

证书透明度(Certificate Transparency,CT)是证书授权机构(CA)的一个项目,证书授权机构会将每个SSL/TLS证书发布到公共日志中。一个SSL/TLS证书通常包含域名、子域名和邮件地址,这些也经常成为攻击者非常希望获得的有用信息。查找某个域名所属证书的最简单的方法就是使用搜索引擎搜索一些公开的CT日志。

在线查询网站推荐:

crt.sh:https://crt.sh

censys:https://censys.io

子域名爆破网站(https://phpinfo.me/domain)

IP反查绑定域名网站(http://dns.aizhan.com)等。

2.4 收集常用端口信息

在渗透测试的过程中,对端口信息的收集是一个很重要的过程,通过扫描服务器开放的端口以及从该端口判断服务器上存在的服务,就可以对症下药,便于我们渗透目标服务器。

所以在端口渗透信息的收集过程中,我们需要关注常见应用的默认端口和在端口上运行的服务。

最常见的扫描工具就是Nmap,无状态端口扫描工具Masscan、ZMap和御剑高速TCP端口扫描工具。

下面是一些服务端口汇总。

文件共享服务端口

文件共享服务端口

远程连接服务端口

远程连接服务端口

Web应用服务端口

Web应用服务端口

数据库服务端口

数据库服务端口

邮件服务端口

邮件服务端口

网络常见协议端口

网络常见协议端口

特殊服务端口

特殊服务端口

2.5 指纹识别

指纹由于其终身不变性、唯一性和方便性,几乎已成为生物特征识别的代名词。这里所讲的指纹是指网站CMS指纹识别计算机操作系统及Web容器的指纹识别等。

应用程序一般在html、js、css等文件中多多少少会包含一些特征码,比如WordPress在robots.txt中会包含wp-admin、首页index.php中会包含generator=wordpress 3.xx,这个特征就是这个CMS的指纹,那么当碰到其他网站也存在此特征时,就可以快速识别出该CMS,所以叫作指纹识别。

对目标服务器进行指纹识别是相当有必要的,因为只有识别出相应的Web容器或者CMS,才能查找与其相关的漏洞,然后才能进行相应的渗透操作。

cms

CMS(Content Management System)又称整站系统或文章系统。在2004年以前,如果想进行网站内容管理,基本上都靠手工维护,但在信息爆炸的时代,完全靠手工完成会相当痛苦。所以就出现了CMS,开发者只要给客户一个软件包,客户自己安装配置好,就可以定期更新数据来维护网站,节省了大量的人力和物力。

常见的CMS有Dedecms(织梦)、Discuz、PHPWEB、PHPWind、PHPCMS、ECShop、Dvbbs、SiteWeaver、ASPCMS、帝国、Z-Blog、WordPress等。

代表工具有御剑Web指纹识别、WhatWeb、WebRobo、椰树、轻量WEB指纹识别等,可以快速识别一些主流CMS。

还有一些在线网站查询CMS

● BugScaner:http://whatweb.bugscaner.com/look/。

● 云悉指纹:http://www.yunsee.cn/finger.html。

● 和WhatWeb:https://whatweb.net/。

2.6 查找真实IP

在渗透测试过程中,目标服务器可能只有一个域名,那么如何通过这个域名来确定目标服务器的真实IP对渗透测试来说就很重要。如果目标服务器不存在CDN,可以直接通过www.ip138.com获取目标的一些IP及域名信息。如果有CDN,就需要绕过CDN寻找目标服务器的真实IP。

2.6.1.目标服务器存在CDN

CDN即内容分发网络,主要解决因传输距离和不同运营商节点造成的网络速度性能低下的问题。

就是一组在不同运营商之间的对接节点上的高速缓存服务器,把用户经常访问静态数据资源(例如静态的html、css、js图片等文件)直接缓存到节点服务器上,当用户再次请求时,会直接分发到在离用户近的节点服务器上响应给用户,当用户有实际数据交互时才会从远程Web服务器上响应,这样可以大大提高网站的响应速度及用户体验。

2.6.2 目标是否使用了CDN

通常会通过ping目标主域,观察域名的解析情况,以此来判断其是否使用了CDN。

ping命令

还可以利用在线网站17CE进行全国多地区的ping服务器操作,然后对比每个地区ping出的IP结果,查看这些IP是否一致,如果都是一样的,极有可能不存在CDN。如果IP大多不太一样或者规律性很强,可以尝试查询这些IP的归属地,判断是否存在CDN。(多地ping)

2.6.3 绕过CDN

内部邮箱源。一般的邮件系统都在内部,没有经过CDN的解析,通过目标网站用户注册或者RSS订阅功能,查看邮件、寻找邮件头中的邮件服务器域名IP,ping这个邮件服务器的域名,就可以获得目标的真实IP(注意,必须是目标自己的邮件服务器,第三方或公共邮件服务器是没有用的)。

扫描网站测试文件,如phpinfo、test等,从而找到目标的真实IP。

分站域名。很多网站主站的访问量会比较大,所以主站都是挂CDN的,但是分站可能没有挂CDN,可以通过ping二级域名获取分站IP,可能会出现分站和主站不是同一个IP但在同一个C段下面的情况,从而能判断出目标的真实IP段。

国外访问。国内的CDN往往只对国内用户的访问加速,而国外的CDN就不一定了。因此,通过国外在线代理网站App Synthetic Monitor访问,可能会得到真实的IP,

查询域名的解析记录。也许目标很久以前并没有用过CDN,所以可以通过网站NETCRAFT来观察域名的IP历史记录,也可以大致分析出目标的真实IP段。

如果目标网站有自己的App,可以尝试利用Fiddler或Burp Suite抓取App的请求,从里面找到目标的真实IP。

绕过CloudFlare CDN查找真实IP。现在很多网站都使用CloudFlare提供的CDN服务,在确定了目标网站使用CDN后,可以先尝试通过在线网站Cloud FlareWatch对CloudFlare客户网站进行真实IP查询

2.6.4 验证获取的ip

如果是Web,最简单的验证方法是直接尝试用IP访问,看看响应的页面是不是和访问域名返回的一样;或者在目标段比较大的情况下,借助类似Masscan的工具批扫描对应IP段中所有开了80、443、8080端口的IP,然后逐个尝试IP访问,观察响应结果是否为目标站点

2.7 收集敏感目录文件

探测Web目录结构和隐藏的敏感文件是一个必不可少的环节,从中可以获取网站的后台管理页面文件上传界面,甚至可能扫描出网站的源代码

针对网站目录的扫描主要有DirBuster、御剑后台扫描珍藏版、wwwscan、Spinder.py(轻量级快速单文件目录后台扫描)、Sensitivefilescan(轻量级快速单文件目录后台扫描)、Weakfilescan(轻量级快速单文件目录后台扫描)等工具。

或者在线网址:

WebScan(http://www.webscan.cc/)

2.8 社会工程学

攻击者通过操纵人的心理、社交工具或其他手段,诱使受攻击者泄露敏感信息、提供访问权限或执行恶意操作的一种攻击方式。这种攻击利用了人们的信任、好奇心、急迫性或其他心理因素,从而绕过技术安全防护措施。

常见方式有:

  • 钓鱼攻击:通过伪装成合法的通信或网站,诱使受害者提供个人信息、登录凭证、银行账号等。
  • 点击劫持攻击:将一个透明的层覆盖在正常网页上,欺骗用户点击某些看似无害的区域,实际上触发了恶意操作。
  • 假冒身份:冒充信任的个人或机构,通过电话、电子邮件或其他通信方式,欺骗受害者提供敏感信息。
  • 社交工具欺骗:通过社交媒体、即时通讯应用等,冒充朋友或熟人的身份,获取信息或诱导行为。
  • 垃圾邮件和钓鱼邮件:通过发送虚假的电子邮件,诱使受害者点击恶意链接、下载恶意附件或提供个人信息。

还有社工库。

具体方法,参考csdn思源湖的鱼

二、渗透攻击

专业的团队会综合以上所有的阶段收集回来的情报,特别是漏洞扫描结果,服务器的配置,防火墙的使用情况,通过分析确定可利用的和待挖掘的漏洞,选择针对性工具使用或开发。

漏洞挖掘和利用

验证漏洞是否存在,最终getshell或拿到管理后台

owasp top10,web基本漏洞。

SQL注入

what

直接作用对象是后端中和sql有关的代码,由于开发者没有对参数进行合格的校验,使得攻击者构造特定的sql语句,这些参数被代入到数据库,达到了获取数据库敏感数据的目的

原理

  1. 前端传给后端的参数,用户可控
  2. 传入的参数代入拼接到sql语句,带入数据库查询

当初学习sql语句,有一点讲究闭合,相当于故意引起报错吧

Mysql有一些固定的字段

information_schema库中有schemata、tables、columns

table_schema、table_name、column_name

几个函数: databse()、version()、user()

注释符:#、s--+、/**/

内联注释:/*! code*/ 用于整个sql语句

具体的sql语句使用可以去,b站鱼皮有一个开源的练习数据库网站

注入测试的话,这个网址 https://www.db-fiddle.com/f/mZ2ftcLLzZLbrEELn38hjQ/0

select * from users where id =~~1; 这是一种绕过技巧,取反的取反

基本的sql注入有:联合注入、布尔注入、报错注入

从代码来看:

联合注入:肯定有将查询结果输出的语句

布尔注入:语句只有yes或no,而不会返回数据

报错注入:代码中有 mysqli_error()返回错误

进阶有:时间注入、堆叠查询注入、二次注入、宽字节注入、Cookie注入、base64注入、xff注入

从代码来看:

时间注入:页面不返回数据,没有过滤sleep函数什么的

堆叠查询注入:代码中PDO方式进行数据查询,但仍然将参数ID拼接到查询语句,这样预编译没效果,所以多语句之间可以分号隔开

二次注入:注册的时候,代码可能拼接的时候,使用了函数过滤单引号,比如:

addslashes($username),$username=test’,然后插入数据库

那么username就为 **test’**;

然后你登录的时候,代码可能没有使用转义函数,导致输入用户名test’报错;这种一般是修改已知用户名的密码的漏洞,已知有个test,你注册个test’,到时候登录进去,修改的是test的密码

宽字节注入:比如转义函数,对拼接参数进行转义,而在查询数据库前,又设置了gbk编码,导致了宽字节注入

Cookie注入:获取参数时,可能是通过 $_COOKIE[‘id’]

base64注入:代码也许有decode解码语句

XFF注入:X-Forwarded-for。代表客户端真实IP,也许可以伪造成127.0.0.1访问url时,也会正常显示,那可以考虑闭合一下,之类的操作

防御

1.过滤危险字符

2.预编译,(不将变量直接拼接到sql语句,而是用占位符实现数据库的增删改查)

xss

what

构造特定的js语句,内嵌到前端页面上,触发

分类

dos不考虑了,一般就两种:

反射型:

攻击方式:让受害者访问包含xss代码的链接

存储性:

留言板、博客这种,存储在服务器上

常用语句、编码绕过

防御

1.过滤输入语句

2.对输出到页面的数据进行编码转换,比如htmlspecial实体

CSRF

what

跨站请求伪造,要说与xss的区别,它其实一般伪造成一个网站。

当受害者登录某个第三方网站的时候,它打开了新标签,去访问恶意网址,这个恶意网站里加载一些恶意的外部资源,使得受害者在第三方网站的信息,比如cookie啊,数据之类的就被攻击者拿到了。

csrf做的事情一般是借用目标用户的名义去执行些非法操作

比如转账

www.exmaple.com/pay.php?user=xx&&money=100,比如给xx转了100

但是访问了之后的链接:

www.exmaple.com/pay.php?user=hacker&&money=100,那就给hacker赚了100

可能会觉得傻逼,谁会这样点,如果我将上面这个链接弄成了短链接,我想问阁下如何应对,警惕性至少会少了些

原理

  1. 受害者登录了网站,能够执行该网站的功能
  2. 受害者同时访问了攻击者构造的恶意网站

利用

诱导用户,访问攻击者写好的网址,只要访问了,有些操作就执行完毕了

这个东西其实还牵扯到了跨域,可以了解下 jsonp、cors

防御

  1. 验证请求的Referer值
  2. token,也就是攻击者伪造不了的信息

SSRF

what

服务器主动发出请求访问了恶意网址

原理

服务端有访问其他服务器的能力,被攻击者用来尝试访问内部网络

主要攻击方式

  • 对外网、服务器所在内网、本地端口扫描,获取一些服务器的banner信息
  • 攻击运行在内网、本地的应用程序
  • 对内网Web应用指纹识别,识别企业内部的资产信息
  • 攻击内外网的Web应用,主要是Http Get请求就可以实现的攻击
  • 利用file协议读取本地文件等

利用

你比如有

http://exmaple.com/ssrf.php?url=192.168.0.2:3306

回显说

当前地址不允许连接到Mysql服务器

说明192.168.0.2是有Mysql服务的

代码分析

有访问外部请求的函数,比如curl_exec、file_get_contents

防御

限制协议为http(s)

限制端口

限制内网IP,屏蔽10.0,192.168,172.16开头的

统一错误消息

文件上传

原理

上传恶意脚本文件(webshell)到目标服务端上去,攻击端这边去访问的话,能够执行一些系统调用命令,从而获取到目标服务端信息

图片马的使用

绕过

1
2
3
4
5
1.js前端绕过
2.文件后缀绕过
3.文件类型绕过 Content-Type
4.文件截断绕过
5.竞争条件攻击:有的后端逻辑是允许,先将文件上传上来,再判断其是否合法,不合法就删除,这中间的非法文件就有一个短暂的停留过程

防御

1.白名单

2.重命名,比如(时间戳)

爆破

原理

字典攻击呗,猜解呗

防御

  1. 用户登录次数超过阈值,锁定账号
  2. 某个IP登录次数超过阈值,锁IP(但如果一个IP多个账号,那其他账号也不行了)

命令执行

以php为例,有些函数很强大,强大到执行系统命令

1
2
3
4
5
6
system
exec
shell_exec
passthru
popen
proc_popen

如果攻击者可以控制这些函数的参数的话,就会造成些攻击行为

防御

  • 尽量不用命令执行函数
  • 客户端交过来的数据要严格限制和过滤

逻辑漏洞

利用业务设计缺陷,获取敏感信息或者破坏业务完整性

一般出现在 密码修改、找回;越权访问、支付金额等

那越权呢,分为两种:水平和垂直

水平:同级别权限的用户可以越权访问、修改或删除其他用户信息的非法操作

垂直:一般表现为普通权限用户能够执行管理员权限的功能

分类

  • 支付订单:篡改金额

  • 越权访问:越权访问他人信息并修改

  • 重置密码:

  • 竞争条件:购物时,用户A有10元,商品B为6元,商品C为5元;A分别购买的话,不够买另一个,但如果多线程同时发送购买商品B和C的请求,可能出现:

    有一件商品失败

    商品都购买成功,但只扣了6元

    都购买成功,但余额变为-1

越权漏洞例子

打开我的pikachu靶场

1
2
3
4
/pikachu/vul/overpermission/op1/op1_mem.php?username=kobe&submit=点击查看个人信息

将kobe换成lili
就能查看lili的个人信息

越权防御

session,取数据从session里面取,防止篡改

xxe

xml外部实体有关的

提权和后门

CSDN思源湖的鱼

内网攻击

CSDN思源湖的鱼

防护

漏洞自查,周期性自扫;

权限的检查

代码审查

敏感函数的使用

WAF

渗透工具

sqlmap

SQLMap是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库是MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB。SQLMap采用了以下5种独特的SQL注入技术。

● 基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入。

● 基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已执行(即页面返回时间是否增加)来判断。

● 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中。

● 联合查询注入,在可以使用Union的情况下的注入。

● 堆查询注入,可以同时执行多条语句时的注入。

漏洞发现

传统漏洞

框架组件公开漏洞

口令漏洞

代码审计0day

漏洞利用

sql注入

拖库、提权(写文件webshell、MYSQL UDF、sqlserver xp_cmdshell)

xss

打管理员cookie、beef框架攻击管理员客户端

漏洞环境搭建

linux系统LANMP、vulhub

Windows系统WAMP

安装一个phpstudy之后,去github找以下靶场,安装进对应www文件夹即可

DVWA

sql-labs

xss-labs

pikachu

dorabox

还有在线靶场如hack the box

知识补充

kerberos

what

一种网络认证协议,通过密钥系统确认客户端与服务端间的认证安全

流程

分析一下客户端请求证书过程:

有三个东西,一个是客户端,一个是服务端,一个是证书颁发机构

类似于https的客户端与服务端的认证阶段

  • 首先客户端 请求 认证服务器AS,获取目标服务器证书
  • AS收到请求,将证书响应给客户端,这个证书呢,包含服务器ticket(加密了该客户端的身份和一份会话密钥)和一个临时加密密钥(会话密钥,session key),它也会给目标服务器一个证书,到时候认证登录的客户端身份
  • 客户端将ticket传到服务器上,服务器通过,就可以让客户端登录
  • 客户端登录成功,那么攻击者就可以去入侵服务器,获取客户端令牌
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2023-2025 是羽泪云诶
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信