🌝博客主页:泥菩萨
💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具
第一章:web应用程序安全与风险
web攻击基础知识
1、什么是web应用攻击
web攻击的本质,就是通过http协议篡改应用程序
(永远不要相信用户的输入)
可利用点:请求方法、请求头、请求体
利用过程:认证、会话、授权
弱口令****强口令账号枚举认证不满足强口令条件密码长度至少8位
包含大小写字母、数字、特殊字符中的至少3类
密码和用户名无相关性尝试大量可能的账号名称,以找出系统中存在的有效账号
为了密码爆破做准备,节省攻击时间
判断下面属于什么口令:
admin@123#1 --弱口令,与用户名相关
P@ssW0rd --不建议使用,使用的用户太多已经可以被密码字典爆破出来
1qaz@wSx --不建议使用,键盘排序码可以被密码字典爆破
magedu5689065 --弱口令
session会话为保持与用户交互状态而创建的一个数据存储机制
保存用户的登录信息cookie越权未授权访问权限绕过提权授权能够进行原本账号不具备权限的操作不用输入账号密码,就能进行操作通过某种方法绕过不让做的操作将普通用户提权到管理员用户
利用途径:web、客户端、html、其他网络协议
(所有能让用户与系统产生交互的地方)
2、web攻击的特点
广泛性:大家都可以进行攻击
匿名性:顶多看到攻击源IP
利用难度低:不需要具备非常高深的技术能力就能实施一些攻击行为
3、常见的web安全问题
安全漏洞攻击手段web应用SQL注入、XSS、未授权访问、越权、弱口令、输入验证、程序逻辑漏洞、钓鱼等web客户端客户端软件漏洞、浏览器、APP、小程序等中间件针对应用服务器底层软件的攻击,如IIS、Apache、nginx、tomcat数据库SQL注入传输中间人攻击、窃听等可用性DDoS(分布式拒绝服务攻击)、CC攻击
Dos(拒绝服务攻击)
采用一对一的方式进行攻击,攻击者通过制造并发送大量没用的数据,耗尽被攻击方的资源,使其无法为用户提供服务==(也会消耗攻击者的大量资源)==
解决方法:将带宽、网络性能扩大
DDos(分布式拒绝服务攻击)
操纵大量的傀儡机去发起攻击,耗尽被攻击方的资源,使其无法为用户提供服务
解决方法:增加带宽、抗D设备(流量清洗)、IP过滤、CDN(分流)
CC攻击
模拟大量正常用户对目标网站频繁地进行特定的请求,耗尽目标服务器资源,使网站或服务瘫痪
4、web应用程序安全要点
输入验证:永远不要相信来自用户的输入
访问控制:网络层面、账号权限、白名单
安全配置:网络访问策略(子网划分)、账号密码策略、日志策略
强化代码安全性:DevSecOps(开发、安全和运营)、安全左移(shift-left)//让安全贯穿整个生命周期
web渗透测试测试学习框架
1、渗透测试流程
信息收集是基础(很重要)
2、渗透测试技术要点
一定要拿到授权才可以进行漏洞挖掘,否则这个行为是
违法
的
安全应急响应中心SRC
(1)信息收集
挖淘宝的漏洞:http://www.taobao.com
登陆网站,挖漏洞:
(1)端口
(2)子站 abc.taobao.com a.b.taobao.com
(3)新业务
(4)手机业务
(5)微信小程序
(6)友情链接
(7)旁站
(2)漏洞扫描
扫码攻击:AWVS、AppScan、Xray、Nessus、Metasploit...
扫描对象:应用层(url)、主机层(ip)
扫描方式:主动、被动
(3)漏洞利用——相当于渗透测试,点到为止,广度
(4)内网渗透——深度
(5)进阶学习
编程语言:JavaScript、PHP、python、Java
代码审计:白盒测试
应急响应:不是只有被攻击时才需要应急,一些核弹级漏洞爆出时也需要应急
渗透测试:黑盒测试(看不见具体代码)
灰盒测试:交互式分析工具,植入一个监控
第二章:web应用程序技术
1、HTTP协议
超文本传输协议,是一种规定了浏览器和万维网服务器之间互相通信的详细规则
渲染引擎:处理HTML和CSS代码
解析引擎:处理JavaScript代码
如何发起一个HTTP请求?
(1)在浏览器地址栏中输入一个URL,按下回车后就发起了HTTP请求
URL(统一资源定位符)的标准格式如下:
协议://服务器IP[:端口]/路径/[?查询]
● http:默认80端口
● https:默认443端口
(2)在windows中,也可以用curl.exe工具来发起请求
Get请求
curl.exe https://www.baidu.com
Post请求
curl -d "user=admin&password=admin" https:www.baidu.com
win+r打开cmd
(3)HackBar插件
点击Execute发起请求
2、HTTP协议详解
HTTP是一种无状态的协议,无状态是指浏览器与服务器之间不需要建立持久的连接(访问页面后断网,网页不会消失,除非有新的请求)
HTTP请求只能由客户端发起,而服务端不能主动向客户端发送数据
(1)HTTP请求
HTTP请求包括三部分,分别是请求行、请求头、请求体
<!-- 请求行 -->
POST /login.php HTTP/1.1
<!-- 请求头 -->
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/117.0
<!-- 请求正文 -->
Username=admin&password=admin
格式分析:
请求行由3部分组成:
- 说明请求方法是POST
- /login.php表示请求路径
- http协议版本
第二行至空白行:这部分称为HTTP中的请求头(也被称为消息头)
- Host:表示请求的主机地址
- User-Agent:代表浏览器的标识(简称UA)
- …
请求头可以自行修改
请求正文
- 请求正文是可选的,最常出现在POST请求方法中
- GET请求的请求正文在请求路径里
(2)HTTP响应
HTTP响应包括三部分,分别是响应行、响应头、响应正文(消息主体)
<!-- 响应行 -->
HTTP/1.1 200 OK
<!-- 响应头 -->
Date:Thu,28 Feb 2013 07:36:47 GMT
Server:BWS/1.0 //服务器信息
Content-Length:4199 //指响应数据包的长度
Content-Type:text/HTML;carset=utf-8 //返回的内容是文本格式的html代码
Cache-Control:private
Expires:Thu,28 Feb 2013 07:36:47 GMT //响应到期时间
Content-Encoding:gzip //响应包的格式
Set-Cookie:H_PS_PSSID=2022_1438_1944_1788;path=/;domain=.baidu.com //设置cookie值,但是有没有Set-Cookie参数取决于网站开发人员
Connection:Keep-Alive //保持连接
<!-- 响应正文/消息主体 -->
<html>
<head>
<title>Index.html</title>
</head>
.....
格式解析:
响应行
http协议版本 响应状态码(200) 消息(ok)
第二行至空白行:响应头
由服务器向客户端发送
响应正文
是服务器向客户端发送的HTML数据,也有可能是json数据
3、HTTP请求方法
HTTP请求方法有很多,最常见的是POST和GET
(1)GET
用于从服务器获取资源
请求参数通常附加在URL后面,以“?”分割,明文显示不安全
(2)HEAD
除了不能在响应里返回响应正文外,其它都和GET方法一样
(3)POST
用于向服务器提交数据,以创建或更新资源,常用于:表单提交、上传文件等
POST方法与GET方法相似,但最大的区别在于,GET方法没有请求正文,而POST方法有请求正文
当像浏览器发送大量的数据的时候,不能用GET要用POST,因为GET请求会将发送的数据显示在浏览器端(URL是有限制的),而POST请求则不会,所以POST安全性更高
在URL中的请求参数,POST密文显示,GET明文显示
(4)PUT
用于更新指定资源的全部内容
通常情况下,服务器会关闭PUT方法,因为它会为服务器建立文件,属于危险方法之一
(5)DELETE
用于请求删除指定的资源
服务器一般都会关闭此方法,因为客户端可以进行删除文件操作,属于危险方法之一
(6)TRACE
用于追踪请求—响应的传输路径
响应头的
via
字段会显示请求经过的中间服务器的地址,可能会引发
XST
(跨站追踪)攻击,不建议使用
(7)OPTIONS
帮助查看服务器开启了哪些功能,可用来做信息收集不建议使用
通常包含以下重要字段:
Access-Control-Request-Method
:告知服务器,接下来的请求将使用的方法。比如:POST、GET等
Origin
:请求的来源,即发送请求的域名
4、HTTP状态码
当客户端发出HTTP请求,服务端接收后,会向客户端发送响应信息。其中,HTTP响应中的第一行,最重要的就是HTTP的状态码
HTTP/1.1 200 OK
在HTTP协议中表示请求结果的状态码由三位数字组成,第一位数字定义了响应的类别,有以下5种:
1XX:信息提示,表示请求已被成功接受,继续处理。其范围为100~102
2XX:成功。其范围为200~206
3XX:重定向,用于告诉客户端,它们访问的资源已被移动,并告诉客户端新的资源地址位置。其范围300~307
4XX:客户端错误。其范围为400~415
5XX:服务端错误。其范围为500~505
常见的状态码描述如下:
100:客户端继续发送请求,这是临时响应
200:客户端请求成功
302:重定向
400:客户端有语法错误
401:请求未经授权
403:服务器收到请求,但是拒绝提供服务
404:请求资源不存在
500:服务器内部错误
503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
5、HTTP消息
(1)请求头
Host
:指定被请求资源的主机和端口号
User-Agent
:允许客户端把它的操作系统、浏览器和其它属性告诉服务器
Referer
:代表当前访问URL的上一个URL
Cookie
:表示请求者身份
Range
:表示请求实体的部分内容
X-forward-for
:即XFF头,它代表请求端的IP,可以有多个,中间以逗号隔开
Accept
:用于指定客户端接受哪些MIME类型的信息
Accept-Charset
:用于指定客户端接收的字符集
(2)响应头
Server
:服务器所使用的web服务器名称,如:
Server:Apache/1.3.6(unix)
攻击者通过查看此头,可以探测web服务器名称。所以,建议在服务端修改此头的信息以达到隐藏的目的
Set-Cookie
:服务端向客户端发送的Cookie信息
Last-Modified
:告诉浏览器资源的最后修改时间
Location
:新访问页面的路径,配合302状态码使用
Refresh
:告诉浏览器定时刷新
(3)普通头
Date
:消息产生的日期和时间
Connection
:连接的状态
alive:持续连接
close:不需要保持持续连接
Cache-Control
:用于指定缓存指令
(4)实体头
Content-Type
:传输的文件类型
Content-Encoding
:实体正文编码
Content-Length
:实体正文的长度
本身没有安全问题,但可以做安全校验,如果正文长度与Content-Length字段的值对不上就会被拦截,但bp会根据内容的修改自动更新Content-Length字段的值
Last-Modified
:资源的最后修改时间
6、HTTP协议与HTTPS协议的区别
- HTTP信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议
- 默认端口不同,HTTP默认80端口,HTTPS默认443端口
- HTTPS需要用到CA证书会产生一定的费用,HTTP不需要
7、web应用程序编码
(1)URL编码
处理特殊字符,格式:
<!-- %后加两位16进制数就是URL编码 -->
%HH
(2)HTML编码
处理html代码与JavaScript代码产生冲突的问题
为了规避同样字符带来的安全问题,使用HTML编码格式如下:
<!-- &开头;结尾 -->>
版权归原作者 泥菩萨^_^ 所有, 如有侵权,请联系我们删除。