天天看点

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

DVWA实战篇-sql injection(工具篇)

SQL Injection(SQL注入)

一.漏洞描述

当应用程序使用输入内容来构造动态SQL语句以访问数据库时,如果对输入的参数没有进行严格的过滤或者过滤不完整将会导致SQL注入攻击的产生。恶意用户通过构造特殊的SQL查询语句把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。从而可以获取到数据库的相关信息,包括数据库账号密码信息,甚至可上传木马,从而控制服务器。

二.漏洞验证

Low

1.输入1' or  1=2 # 判断发现存在注入点
           
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

2.使用sqlmap 直接探测,可以发现数据库的版本

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

3.使用sqlmap 探测数据库

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

4.使用sqlmap 跑当前数据库和表

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

5.使用sqlmap直接拖库到本地

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

Medium

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

提交方式变成post

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

Medium 在Low的基础上加了

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

1.使用sqlmap –r 读取请求头和form  直接探测数据库版本

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

2.直接加参数跑表名,拖库

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

High

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

加上LIMIT 1,只要找到了对应的一条记录,就不会继续向下扫描了,效率会大大提高。 LIMIT 1适用于查询结果为1条(也可能为0)会导致全表扫描的的SQL语句。 

如果id是索引的话,就不需要加上LIMIT 1,如果是根据主键查询一条记录也不需要LIMIT 1,主键也是索引。 

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

1.发现提交页面和响应页面不在一个页面 使用—second-order +”响应URL”

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

2.使用sqlmap 直接+参数 拖库

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

三.漏洞进阶

-smart   启发式快速判断,节约时间

--sql-shell  执行指定sql命令 (寻找文件绝对路径)

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

--is-dba 查看当前注入点数据库权限是否为dba:True

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

--os-shell 获取系统交互shell

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

提权后,执行系统命令

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

创建用户名为789密码为789的用户

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

查看用户组,寻找管理员组

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

为789用户提权

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

检查用户

DVWA实战篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

四.修复建议

  1. 建议使用统一的规则库对用户的所有输入进行安全性验证,验证不通过的应直接拒绝;
  2. 建议所有应用与数据库交互处均使用参数化查询,严禁将用户输入直接与SQL查询语句进行拼接;
  3. 对进入数据库的特殊字符('"\尖括号&*;等)进行转义或编码转换;
  4. 严格限制变量类型,数据库中的存储字段必须对应为int型;
  5. 数据长度应该严格限制,这能在一定程度上防御比较长的SQL注入语句;
  6. 网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过;
  7. 严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害;避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。