0
点赞
收藏
分享

微信扫一扫

sql注入攻击1

一葉_code 2022-03-18 阅读 66

SQL注入攻击(回显注入-1)

实验目的

  • 学习并掌握SQL回显注入攻击的原理
  • 学习并掌握SQL回显注入攻击的过程

实验原理

  SQL Injection,即SQL注入,SQLi,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。SQL注入漏洞的危害巨大,常常会导致整个数据库被“脱裤”,如今SQL注入仍是现在最常见的Web漏洞之一。
  SQL 注入一般按照注入方式可以分为普通注入和盲注。普通注入就是注入的页面是直接显示数据库中的字段内容的,可以通过 SQL 注入一步一步把数据库中我们想要的内容显示在页面中。而盲注则要困难很多,页面并没有直接显示数据库字段内容,显示的可能只是一个判断结果(是或者否),页面只能告诉你你构造的 SQL 语句对还是错,你要查询的内容存在还是不存在。这种情况下,我们只能全部靠猜。更有甚者,连是否的结果都不显示,我们可能还需要通过返回数据的延迟来判断是否猜对。

实验步骤

1 打开DVWA

  在浏览器输入http://127.0.0.1/dvwa,输入用户名admin,密码password。
dvwa
2 设置DVWA安全级别

  打开搭建好的web环境dvwa,首先设置安全级别,点击submit保存。
security
  打开SQL注入页面,如下:
sql
3 SQL注入 low

  首先在文本框随便输入一个 ID 号,发现可以返回用户信息。同时发现 URL 中出现了提交的参数信息,说明该页面提交方式为 GET。
session
  结果:
res
  通过上面输出可以基本判断,该sql语句可能为select firstname, subname from table_x where userid = '1'。因此针对大概语句进行分析。
  为了猜测该是否存在sql注入漏洞,可以随意输入,检查是否有错误信息等。由于是实验环境,知道有sql注入漏洞,因此使用1'来测试输入后返回的结果,如下:
input
  可以看到输入如下错误:
error
  发现页面报错,说明单引号被执行,存在 SQL 注入漏洞(因为'在SQL语句中是有语义的,让我们输入'时出错,说明在该SQL语句中并没有将'视为用户输入的一部分,所以存在着SQL注入漏洞),并从报错信息中得知该站点的数据库为 MySQL。在输入框中输入其他内容,如1 and 1=1 或者 1 and 1=2,都能返回数据,说明可能注入漏洞不是数字型(如果注入漏洞时数字型的,那么在1 and 1=2输入中,条件1=2判断为否,因此查询的东西应该为空,而不会返回结果,而现在能返回结果,只能说明件1=2是一个字符串,而不是一个数学等式)。
1=1
  在文本框输入 1' and 1=1#,可以返回数据(此时sql语句可能为select firstname, subname from table_x where userid = '1' and 1=1#',#表示注释#号后的内容),输入 1' and 1=2#,没有数据返回,说明注入成功,确认漏洞为字符型。
1=1#
1=2#
  为了进一步判断该数据库中的其他内容,同样可以构造其他sql语句,如在文本框输入1' order by 1#1' order by 2#,有数据返回,输入 1' order by 3#,页面报错,说明本页面只查询了 2 个字段,
order1
order2
order3
  为了进一步搞清楚该表中的其他内容,可以构造如下语句1' union select 1,2#,此时完整的sql查询语句可以表示为select firstname, subname from table_x where userid = '1' union select 1, 2#',因此此时就可以通过union语句查询到该表内的所有内容.
union
  如果想获取到数据库的名字,同样可以构建1' union select database(),2#输入,即可查询到数据库的名字,如下:
database
  进一步,1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#,可以查询到所有的表名。
tables
  获取列名,1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
column
  到了这里就剩最后一步,猜测用户密码,直接输入1' union select group_concat(user_id,first_name,last_name,user),group_concat(password) from users#
pass
  获取的数据都是哈希值,可以使用之前学过的John the ripper攻击解密。

SQL注入漏洞修复建议

  • 对进入数据库的特殊字符(’"\尖括号&*;等)进行转义处理,或编码转换。
  • .严格限制变量类型,数据库中的存储字段必须对应为int型。
  • 数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。
  • 网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。
  • 严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。
  • 避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。
  • 在网站发布之前建议使用一些专业的SQL注入检测工具进行检测,及时修补这些SQL注入漏洞。
  • 确认PHP配置文件中的magic_quotes_gpc选项保持开启。
举报

相关推荐

0 条评论