「SQL注入入门篇」SQL注入(四)

为什么我是web安全菜鸡啊!!!

Posted by 许大仙 on July 1, 2016

一天不更就觉得是对生命的浪费啊 (,,・∀・)ノ゛【ps:现在果然老了,没以前那种激动人心的更新blog的感觉了】

使用 order by 查询字段

order by 语句会对查询结果进行排列,可以借此判断列数。+--+可以对后面内容进行注释,便利构造语句

联合查询获取当前数据库、用户、版本信息

可以构造union select语句,来查询正在使用中的用户user()、数据库database()、数据库版本version()、服务器操作系统等信息@@version_compile_os,例如:

union select user(),database()+--+

查询数据库用户名和密码

前面提到过,在 MySQL 5.0 及以上版本,information_schema存储着所有数据库下的表名和列名信息。

查询表名

information_schema.tables为数据库名下表名tables记录所有数据库名下所有表名信息的表。

union select 1, group_concat(table_name) from information_schema.tables where 
table_schema=0x64767741+--+&Submit=Submit

这条语句表示联合查询满足数据库名为information_schema的库中的tables这个表,将其所有符合条件的字段,即属于dvwa库的表的信息都列出来

其中0x64767741为十六进制数,表示数据库名dvwa,在我们实际操作时,应当在查询到数据库名之后将其转换为十六进制数填入这个位置,可以借此绕过过滤检测。

查询列名

同理information_schema.columns是记录数据库下所有列名信息的表

若已知表名users,想要查询其下面的列名,则需要用以下语句:

union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273+--+&Submit=Submit

其中0x7573657273users的十六进制形式

查询用户名密码

union select user,password from users+--+&Submit=Submit

其中 users 为上一步查到的表名