Sql注入衔接
本文最后更新于1762天前,其中的信息可能已经有所发展或是发生改变。

Sql注入衔接

什么是sql注入?

所谓SQL注入,就是通过把SQL命令插入到 Web表单提交 或 URL 或 页面请求等的查询字符串中,最终达到欺骗服务器执行恶意的SQL命令。

注:从这句话看出常见的注入点在

a. web表单

b. URL链接中

c. 登录框(页面请求查询)

二、SQL注入原理

SQL注入(SQLInjection)是这样一种漏洞:当我们的Web app 在向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

SQL注入漏洞的本质是把用户输入的数据当做代码来执行,违背了“数据与代码分离”的原则。

SQL注入漏洞有两个关键条件,理解这两个条件可以帮助我们理解并防御SQL注入漏洞:

用户能控制输入的内容

Web应用执行的代码中,拼接了用户输入的内容

以sql万能密码为例(在登录框中注入)

(查表语句)select * from users(表名) where id='1' and paw='22'

在登录框中写入1' or 1='1

Sql注入衔接

在数据库底层实际上是做了个select操作:select * form users where id=' 1' or 1='1 ' and paw= 1 or 1 = 1

注意在用户名和密码两个地方的框中都要写

(2) 写入1’=’1’

select * from users where id='1’or 1!='1' and paw='22'

相当于or后都为假,要知道用户名就可以登录

从以上可以看出sql注入就是本来我只有我能操作数据库,只是让你输入内容就走,而你却输入命令,从而在我不知情下操作数据库

三、SQL注入的产生

动态字符串构建

不正确的处理转义字符(宽字节注入)

不正确的处理类型(报错泄露信息)

不正确的处理联合查询

不正确的处理错误(报错泄露信息)

不正确的处理多次提交(二次注入)

不安全的数据库配置

默认预先安装的用户

以root、SYSTEM 或者Administrator权限系统用户来运行

默认允许很多系统函数(如xp_cmdshell, OPENROWSET 等)

四、SQL注入的作用

绕过登录验证(万能密码等)

获取敏感数据(获取数据库中的信息)

文件操作(读取、写入文件等)

执行系统命令 
等等

五、常见的SQL注入分类

A.按照数据库执行结果是否显示到页面上分类

    a.SQL回显注入(数据库的执行结果直接显示到页面上)

       SQL回显注入又可以分为:

        01:union联合查询注入

        02:报错注入

       

    b.SQL盲注(不显示到页面上)

       SQL 盲注又可以分为:

        01:布尔盲注

        02:时间注入

     

B.按照注入点类型来分类

数字型注入点

在 Web 端大概是 http://xxx.com/news.php?id=1 这种形式,其注入点 id 类型为数字,所以叫数字型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where id=1。

字符型注入点

在 Web 端大概是 http://xxx.com/news.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name='admin'。有时候是是双引号:where name="admin",注意多了引号。

搜索型注入点

这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有“keyword=关键字”,有的不显示在的链接地址里面,而是直接通过搜索框表单提交。 此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like '%关键字%'。

C.按照数据提交的方式来分类

这种分类其实只是 HTTP 传递数据的方式不同,严格来讲和 SQL 没多大关系,但是在编写 PoC (漏洞验证程序)的时候,这会影响到我们的代码中发送数据的形式,所以我在这里提出来了。

GET 注入

提交数据的方式是 GET , 注入点的位置在 GET 参数部分。比如有这样的一个链接 http://xxx.com/news.php?id=1 , id 是注入点。

POST 注入

使用 POST 方式提交数据,注入点位置在 POST 数据部分,常发生在表单中。

Cookie 注入

HTTP 请求的时候会带上客户端的 Cookie, 注入点存在 Cookie 当中的某个字段中。

HTTP 头部注入

注入点在 HTTP 请求头部的某个字段中。比如存在 User-Agent 字段中。严格讲的话,Cookie 其实应该也是算头部注入的一种形式。因为在 HTTP 请求的时候,Cookie 是头部的一个字段。

 

 

六.联合查询(union)

数据库中查询语句: Select * from user where id=9999 union select 1,2,3;

Sql注入衔接

Sql注入衔接

select id,userName from user where id='1' union select 2,3

红色部分是我们注入的部分,select 后的2,3没有具体意思,只是用来占位,写成3,4也一样。

Select 后可以跟函数,比如version()等,就可以查版本信息或者用户名等。

1' union select 1,2version()

Sql注入衔接

如果union select后的查询列数与字段数不同,数据库就会报错(这里字段是id、username、password三个字段,而select后只有1、version()两列)

Sql注入衔接

七、查询数据核心语法

功能名称

查询语句

查库

select schema_name from information_schema.schemata

查表

select table_name from information_schema.tables where table_schema=’库名’

查列

Select column_name from information_schema.columns where table_name=表名

数据

select 列名 from 库名.表名

所有类型的SQL注入,都是基于查库、表、列语句

八、如果查询出的结果太多,网页上无法显示查询结果,有如下解决方法:

(1)group_concat()函数

Sql注入衔接

这里我们以查询有哪些库为例,上图报错显示超过一行

用法:select group_concat(查询内容,‘连接符’,‘查询内容’) from 表名 ;

Sql注入衔接

这样就可以显示出了

Limit( ,)和另外两个函数:

concat():没有分割符的连接字符串

concat_ws():含有分隔符的连接字符串

这三种方法都只能显示一行,而不能像group_concat()函数将所有查询信息连接到一行输入,如:

Sql注入衔接

这里介绍原因:

Sql注入衔接

在php代码中有这样一个函数规定了页面上显示的内容只能是一行,当查询到了数据就只返回一行,所以我们获取不了第二行的信息,当我们想获取所有用户名信息的时候,可以用msyql函数的group_concat()函数,用法:select group_concat(username) from users ;这样就可以把用户名连成一条来输出,若不使用此函数,会造成页面放不下而报错。至于函数concat_wa()函数的话,不会达到效果,只能看一行的信息。

 

用limit()限制的话,可以改起始行数,如limit(0,1)、limit(1,1)、limit(2,1)来获取我们想要查看的第几行的数据。

本文来源于互联网:Sql注入衔接

点击数:142

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇