web安全的基础知识
基本定义
Web安全,也称为网络安全或在线安全,是指保护网站、网页和Web服务免受各种威胁和攻击的技术和实践。这些威胁可能来自恶意软件、网络攻击、数据泄露、身份盗窃、服务中断等。Web安全的目标是确保Web应用程序和用户数据的安全、完整和可用性。
一般流程
安全评估:识别和评估系统的安全漏洞。
安全测试:对系统进行渗透测试,以发现潜在的安全问题。
安全加固:修复发现的安全漏洞,并增强系统的安全性。
安全监控:持续监控系统的安全状态,及时发现并响应安全事件。
常见端口:
20/21:FTP(文件传输协议)用于文件传输,其中20端口用于数据传输,21端口用于控制命令。
22:SSH(安全外壳协议)用于安全的远程登录和文件传输。
23:Telnet用于不安全的远程登录。
25:SMTP(简单邮件传输协议)用于发送电子邮件。
53:DNS(域名系统)用于将域名解析为IP地址。
80:HTTP(超文本传输协议)用于Web服务器和客户端之间的非加密通信。
110:POP3(邮局协议版本3)用于接收电子邮件。
143:IMAP(互联网消息访问协议)用于管理电子邮件。
443:HTTPS(HTTP安全)用于Web服务器和客户端之间的加密通信。
3389:RDP(远程桌面协议)用于Windows远程桌面服务。
3306(MySQL),1433(SQL Server)、5432(PostgreSQL):数据库服务的默认端口。
6379(Redis)、27017(MongoDB):NoSQL数据库的默认端口。
基本的工具
主要功能 : 主机发现 ( -sP ,不用ping检测-Pn) , 端口扫描 (-sS -sT -sU), 版本侦测 ( -sV ) , 系统侦测 ( -O )
常用的有 : 代理模块 重发器 测试器 编码器 对比器 插件有wafpass sqlmap检测等
如何抓https的包:把BP的证书导出 , 然后添加到浏览器信任的证书机构中
Sqlmap:
-u //网址
--dbs //获取所有数据库名
--current-db //获取当前数据库
--table -D "数据库" //获取某数据库的所有表
--columns -T "数据表" -D "数据库" //读取指定字段内容
--is-dba //看数据库权限-0
--os-shell //系统交互的shell 生成俩个文件 一个正常文件 一个有shell-
-r xxx.txt //注入HTTP请求
-d "mysql://admin:[email protected]:3306/testdb" //直接连接到数据库
--tamper xxx //指定绕waf脚本
-v 0-6 //
0:只显示python错误以及严重的信息。
1:同时显示基本信息和警告信息。(默认)
2:同时显示debug信息。
3:同时显示注入的payload。
4:同时显示HTTP请求。
5:同时显示HTTP响应头。
6:同时显示HTTP响应页面。
--level=1-3 //默认是1,2的时候会测试cookie,3的时候会测试ua和referer,
--threads=10 //设置线程
--batch //卡顿自动回车
SQL注入
定义与原理
由于对用户的输入没做严格的过滤和限制,攻击者通过在Web应用的输入字段中插入恶意SQL代码,从而影响数据库的操作。(我们知道web网站分为前端和后端,前端会像后端提供用户所需要的请求,而后端则需要根据前端所提供的请求做出响应,传递资源,这个资源就可能是sql数据库,因为没有严格的过滤,就给了黑客机会去对我们的sql语句(即对数据库的操作)进行修改,拼接,从而获取数据库中的信息,并进行一系列的操作)
危害
数据泄露、数据篡改、被留后门、甚至控制整个数据库系统。
sql语句的提交方式
GET : http://example.com/page?query=SELECT * FROM table
GET请求通常用于请求服务器发送数据。在URL后面附加的查询参数中提交SQL语句,
GET请求的参数会暴露在URL中,因此不适用于提交敏感或机密信息。
POST:
POST请求用于向服务器提交数据,数据通常在HTTP消息体中发送。
POST请求不会像GET请求那样将参数暴露在URL中,因此更适合提交敏感数据。
Cookie: Set-Cookie: sql_query=SELECT * FROM table
Cookie是在浏览器中存储的小型文本文件,用于存储用户信息
Cookie可以用于跟踪用户的会话状态,但也可能被恶意利用,例如通过跨站脚本攻击(XSS)窃取用户的Cookie信息。
http头(X-Forwarded-For): X-Forwarded-For: 192.0.2.1
X-Forwarded-For是一个HTTP扩展头,用于识别通过HTTP代理或负载均衡器传递过来的客户端原始IP地址。
它通常用于记录用户的真实IP地址,而不是代理服务器的IP地址。
Referer: Referer: http://example.com/source_page
Referer头用于标识请求的来源,即用户在点击链接或提交表单之前所在的页面。
Referer头可以用于分析用户的行为和流量来源,但也可能暴露用户的浏览历史,因此涉及到隐私问题
User-Agent: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
User-Agent头是一个字符串,用于标识发起HTTP请求的浏览器或客户端类型。
User-Agent头可以用于服务器端进行浏览器兼容性处理或统计分析
sql注入的基本过程
判断注入点:
首先,攻击者会尝试识别Web应用程序中的注入点。这通常是通过在输入字段中输入特殊的字符或SQL代码,然后观察应用程序的响应来完成的。
注入类型:
一旦发现了潜在的注入点,攻击者会尝试确定注入的类型。
暴库暴表暴字段:
获取数据库信息,获取表名,获取表中的列名与数据
sql注入的类型
联合注入:联合查询适合于有显示位的注入,即页面某个位置会根据我们的输变化而变化 。
报错注入:报错注入适合用于数据库错误的信息会回显到前端页面的时候。
布尔盲注:布尔盲注就是在页面没有错误回显时候就完成注入。
延时注入(延时盲注):攻击者使用sql语句中的延时函数,根据数据库的响应实践来推断信息。
宽字节注入(%df/):利用了字符集编码的特性来绕过某些过滤机制。
堆叠注入:用分号同时注入多条sql语句进行注入。
二次注入:
(1) 先构造语句(有被转义字符的语句)
(2)我们构造的恶意语句存入数据库
(3)第二次构造语句(结合前面已经存入数据库的语句,成功。因为系统没有对已经存入数据库的数据做检查)
(4)二次注入更加难以被发现
数据库的权限
低级的普通用户,
中级的管理员用户,
高级的超级用户,
mysql4与mysql5区别
mysql4 存在字符转义和不支持子语句 靠猜解 , 但是mysql4不存在。
mysql5有information_schema这个库 , 里面存在着所有的库名,表名,字段名等 , mysql4没有。
mysql5支持load_file , into outfile 这些读写文件的函数 , mysql4不支持。
防御手段
函数过滤,如!is_numeric 涵数 //判断变量 id 是否为数字
直接下载相关防范注入文件,通过 incloud 包含放在网站配置文件里面,如 360、阿里云、腾迅提供的防注入脚本
XSS攻击
定义与原理
XSS攻击是指攻击者在网页中注入恶意的客户端脚本,当其他用户浏览该网页时,这些脚本会在他们的浏览器上执行,从而实现攻击者的目的。
web程序没有对用户的输入做严格的过滤和限制 , 对输出没有进行html实体编码。
XSS攻击的原理基于浏览器对网站的信任。当用户访问一个网站时,浏览器会执行来自该网站的所有合法脚本。如果网站中的某个页面包含来自攻击者的恶意脚本,浏览器会将其作为该网站的一部分来执行,从而使攻击者能够访问用户的会话信息和执行其他恶意操作。
危害
窃取用户的会话cookie,从而实现身份盗窃。
劫持用户会话,执行未授权操作。
窃取或篡改用户数据。
在用户浏览器上执行恶意操作,如恶意软件下载。
网站钓鱼,欺骗用户输入敏感信息。
一般过程
攻击者发现漏洞:攻击者寻找可以注入恶意脚本的输入点,如表单输入、URL参数、访客留言等。
注入恶意脚本:攻击者将恶意脚本注入到网页中。
用户触发脚本:当其他用户访问该网页时,恶意脚本在他们的浏览器上执行。
执行恶意操作:脚本可能窃取用户信息、操纵用户会话或执行其他恶意操作。
xss攻击的分类
反射型XSS:恶意脚本来自于当前的HTTP请求,通常是通过URL参数直接注入的。
存储型XSS:恶意脚本存储在目标服务器上,如数据库、消息论坛、访客留言等,当用户访问包含恶意脚本的页面时,脚本会被执行。
DOM型XSS:攻击发生在客户端,通过恶意脚本修改页面的DOM结构,实现攻击。
(DOM树:网页在浏览器中解析后,会形成一个DOM树,它代表了页面的结构。)
(DOM操作:JavaScript可以通过DOM API来动态修改DOM树,如添加、删除、修改节点等。)
防御手段
输入验证:对用户输入进行严格的验证,仅允许合法的输入。
输出编码:对输出到浏览器的内容进行编码,如HTML实体编码,以防止脚本执行。
使用HTTP-only Cookie:设置Cookie为HTTP-only,防止JavaScript访问Cookie。
内容安全策略(CSP):实施CSP,限制资源加载,减少XSS攻击的风险。
安全的编程实践:避免使用动态生成的HTML,使用安全的API和框架。
CSRF与SSRF(对比着理解与学习)
定义与原理
CSRF漏洞攻击原理:客户端请求伪造,
在我看来,假如我是黑客,我想访问网站A,但是这个网站A要付费,我没钱呀,我就找到一个人他要访问两个网站分别是A网站和B网站,我就黑了网站B,在他同时访问这两个网站时,我就偷偷发送一个有危害的请求,来获取A网站的cookie从而用他的账号密码来访问这个A网站。
SSRF跨站请求伪造:服务端请求伪造,
在我看来,就是操作服务器骗取客户端数据信息。
防御手段
csrf:
使用CSRF令牌:在表单中添加一个CSRF令牌,并在提交时验证。
设置HTTP-only Cookie:防止JavaScript访问Cookie。
实施内容安全策略(CSP):限制资源加载。
ssrf:
限制URL解析:不允许解析本地host或私有IP地址。
限制URL长度和格式:避免构造复杂的URL。
限制请求频率:限制请求的发送频率,以防止DoS攻击。
XXE攻击
定义与原理:
外部实体注入,是一种利用XML解析器处理XML文档时的安全漏洞进行的攻击。这种攻击允许攻击者通过在XML文档中注入外部实体引用,从而影响解析器的处理流程,甚至执行外部系统命令。
危害:
xxe攻击的修复方式
对关键字进行过滤 <!DOCTYPE、<!ENTITY SYSTEM、PUBLIC
CSRF 和 XSS 和 XXE 有什么区别
XSS 是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。修复方式:对字符实体进行转义、使用 HTTP Only 来禁止 JavaScript 读取 Cookie 值、输入时校验、输出时采用 html 实体编码。
CSRF 是跨站请求伪造攻击,XSS 是实现 CSRF 的诸多手段中的一种,是由于没有在关键 操作执行时进行是否由用户自愿发起的确认。修复方式:筛选出需要防范 CSRF 的页面然后嵌入Token、再次输入密码、检验 Referer
XXE 是 XML 外部实体注入攻击,XML 中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。修复方式:XML 解析库在调用时严格禁止对外部实体的解析。
未授权访问漏洞
定义:指攻击者可以访问未受保护的资源或功能。
常见的未授权访问漏洞:
Redis 未授权访问漏洞
MongoDB 未授权访问漏洞
Jenkins 未授权访问漏洞
Memcached 未授权访问漏洞
JBOSS 未授权访问漏洞
VNC 未授权访问漏洞
Docker 未授权访问漏洞
ZooKeeper 未授权访问漏洞
Rsync 未授权访问漏洞
Atlassian Crowd 未授权访问漏洞
CouchDB 未授权访问漏洞
Elasticsearch 未授权访问漏洞
Hadoop 未授权访问漏洞
Jupyter Notebook 未授权访问漏洞
漏洞
需要了解的漏洞:
jboss
JBoss 5.x/6.x 反序列化CVE-2017-12149
Boss JMXInvokerServlet反序列化4.x 5.x 6.x
JMX Console HtmlAdaptor Getshell利用 4.x及以下
shiro
shiro550和721区别:550条件较低,只要有足够的密钥,进行撞库就可以,721的ase加密的key是系统自动生成的,基本猜不到即撞库达不到目的。可使用登录后rememberMe去爆破正确的key值,即利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,然后精心构造 RememberMe Cookie 值来实现反序列化漏洞攻击,难度高
log4j
中间件漏洞
文件夹目录解析 xxx.asp/1.jpg 只要在 xxx.asp 目录下面的任意文件都会当脚本解析特殊后缀名会当做脚本解析 123.asa 123.cer 123.cdx
文件包含
原因:程序员开发的时候,未对包含的文件进行严格过滤,攻击者可构造自己的图片木马文件当作脚本文件执行
php中文件包含的函数:
include() //文件不存在或者包含出错,会发出警告信息,但脚本会继续执行。
include_once() // 会检查是否已经被包含过,如果已经被包含过就不再包含,不会重复包含
require() //如果文件不存在或者包含出错,会导致脚本停止运行,不会再往下执行。
require_once()
本地包含与远程包含的区别:
本地包含只需找个上传点,把图片木马上传到对方服务器,通过本地包含漏洞直接包含木马脚本木马就 可以运行 webshell,但是远程包含需要服务器 php 关闭魔术符号与开启远程包含功能才行。
流量特征
主要是菜刀,蚁剑,冰蝎,哥斯拉
ua头为百度爬虫,请求体中存在eavl,base64等特征字符,payload为base64编码,请求体中执行结果响应为明文,格式为X@Y 结果 X@Y
默认模式:@ini_set(“display_errors”, “0”);@set_time_limit(0)开头。并且存在base64等字符,响应包的结果返回格式为 随机数 结果 随机数
其他模式编码器特征:含eval关键字,有明显的base64或者chr等编码特征
响应包的结默认果返回格式特征为 随机数 编码后的结果 随机数,如果加密有明显的base64或者chr等编码特征
动态:Accept: application/json, text/javascript, /; q=0.01
其他若特征:Content-type: Application/x-www-form-urlencoded以及默认的10种ua头
动态:所有请求中Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
所有响应中Cache-Control: no-store, no-cache, must-revalidate,同时在所有请求中Cookie中后面都存在;特征
标签:脚本,访问,攻击,数据库,中间件,用户,漏洞,注入 From: https://blog.csdn.net/TuYHAAAAAA/article/details/140291451