前面了解了 SQL 注入原理和步骤,现在来简单的上手体验一下。
如果还没有搭建 dvwa 的话移步 DVWA 的安装 进行搭建。
练习
把 dvwa 的难度调到 low,进入 SQL Injection
试着输入:1,点击 submit 后,页面上显示了 first name 和 surname,可见这里是根据输入的 id,返回该 id 对应的 first name 和 surname 两个字段,再随意输入一个很大的数字,比如 233,页面没有任何返回,猜测当数据库里不存在这个 id 时,不返回任何数据
判断是否存在注入,输入:1',页面返回异常,说明极有可能存在注入
输入:1' and '1' = '1,页面正常执行,输入 1' and '1' = '2,没有返回数据
输入: 1' or '1' = '1,返回了所有数据,说明确实存在 SQL 注入
开始获取数据:1' union select database(), user() # ,可以看到返回了两个数据库和对应的用户名。
这里有一个特别要注意的是如果输入:
1' union select database(), user(), version() #
或者:
1' union select database() #
都会返回报错,可以看到报错内容是:The used SELECT statements have a different number of columns,意思是 union 前后两条语句返回的列数不一样。
前面已经知道输入:1,返回了两个字段,那么 union 后面这条语句也需要返回两个字段,1个或者3个都会报错。获取当前数据库:1' union select 1,database() #
获取库名后就可以获取表名:1′ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
还想获取其他数据可以参考上一节的内容,这里只是简单体验一下,更多的详细的内容后面会细说。
上一节:一步一步学习 Web 安全 2.2 之 SQL 注入步骤
下一节:一步一步学习 Web 安全 2.4 之 mysql union 联合查询注入