Web渗透-SQL注入知识总结

SQL注入、数据库知识总结

  • 数据库相关概念
  • SQL注入相关概念
    • SQL注入简介
    • SQL注入作用
    • 漏洞本质
    • 漏洞成因
    • 漏洞危害
  • 注入漏洞分类
    • 按照注入点分类
  • SQL手动注入
  • SQL注入利用工具
  • SQL注入漏洞如何防御

数据库相关概念

  1. 数据Data:在计算机系统中,各种字母、数字、符号的组合,语音、图形、图像等统称为数据
  2. 数据库Database:数据库是按照数据结构来组织、存储、管理数据的“仓库”
  3. 数据库管理系统DBMS::一类操纵和管理数据的软件,用于建立、使用、维护数据库。它能对数据库进行统一管理和控制,以保证数据库的安全性和完整性
    典型:Access、MSSQL、Oracle、SQLite、MySQL等
  4. 结构化查询语句SQL:是一种数据库查询和程序设计语言,用于数据的增删改查
  5. SQL语言包含的六大部分

DQL数据查询语句,如:select * from tb_name;
DML数据操作语句,如:inset插入,update更新,delete删除 from tb_name where name=“user”
DCL数据控制语句,如:grant授权,revoke
DDL数据定义语句,如:create,drop
CCL指针控制语句,如:declare,cursor,fetch
TPL事务处理语句,如:commit,rollback

SQL注入相关概念

SQL常见语句

  1. 查询语句

Select * from tb_name;

  1. 插入语句

Insert into tb_name values(“name”,“password”,“phone”);

  1. 更新语句

Update tb_name set password="cj991212"where name=“chenj”;

  1. 删除语句

Delete from tb_name where name = “chenj”;

排序语句:order by 默认升序,但在SQL注入里面,用来判断表有多少列
联合查询:union

select * from tb1union all select * from tb2

  • 静态页面 :html/htm,不需要服务器解析脚本
    不依赖数据库
    灵活性差,交互性差
    安全,不存在sql注入漏洞
  • 动态页面 :asp/php/jsp等,根据指令来生成静态网页
    依赖数据库
    灵活性好,维护简单,交互性好,功能强大
    存在sql注入等安全风险

SQL注入简介

SQL注入介于客户端Browser向脚本引擎请求这一步。

注入就是把SQL命令插入到Web表单递交或域名或请求查询的字符串中,
最终达到欺骗服务器执行恶意命令。

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,
攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,
在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,
从而进一步得到相应的数据信息。

SQL注入作用

绕过登录验证        获取敏感数据     文件系统操作
注册表操作          执行系统命令

漏洞本质

代码与数据不区分

漏洞成因

服务器未对用户提交的参数数据进行校验和有效过滤,
直接进行SQL语句的拼接,改变原意,传进数据库解析引擎中执行

漏洞危害

包括但不限于 :敏感信息泄露   篡改网站内容     网页植入木马   
			  数据库恶意操作   服务器远程控制

注入漏洞分类

按照注入点分类

  1. 数字型注入

http:www.example.com/12.php?id=1
类似这种结构,基于此种形式的注入构造出类似如下的sql注入语句进行爆破:
select * from 表名 where id1 and 1=1
http:www.example.com/12.php?id=1 and 1=1

  1. 字符型注入

http://xwww.example.com/users.php?user=admin
类似这种结构
SQL 语句原型大概为 select * from tb_name where user=‘admin’
构造出类似与如下的sql注入语句进行爆破:
select * from 表名 where user=‘admin’ and 1=1 ’
我们需要将这些烦人的引号给处理掉

SQL手动注入

基本步骤:
带猜测性质,考验经验

  1. 判断能否注入:通过url后加上 and 1=1,如果现实正常说明有漏洞
    and 1=2会报错,那是因为1=2语句本身就报错的,但实际上这条语句还是成功执行了

  2. 爆字段长度:用order by + 数字 这个语句检测关键字id所在表有多少列

  3. 检测表存在:id=1 and exists(select * from admin),显示正常说明存在名为admin的表

  4. 检测字段存在:id=1 and exists(select username/password from admin),显示正常说明存在名为username/password的列

  5. 匹配字段(union 联合查询:id=1 and 1=2 union select 1,2,3,…,x 回显出错列,可能就是username/password

  6. 将回显的列替换成username/password 显示管理员账号密码

  7. 登录后台,一般为ip/admin 或者ip/login

SQL注入利用工具

1.测试连通性(ping)
2.使用sqlmap工具利用具有sql注入漏洞的页面链接(http://192.168.88.135/ProductShow.asp?ID=114)

Sqlmap -u “http://192.168.163.143/ProductShow.asp?ID=114”-dbs
猜解出数据库,数据库名(back-end),数据库类型(Microsoft ACCESS)
在这里插入图片描述

Sqlmap -u “http://192.168.163.143/ProductShow.asp?ID=114” -D back-end DBMS --tables
查看数据库中存在哪些表Web渗透-SQL注入知识总结_第1张图片

sqlmap -u “http://192.168.163.143/ProductShow.asp?ID=114” –D back-end DBMS -T admin --columns
查看admin表中有哪些列Web渗透-SQL注入知识总结_第2张图片

sqlmap -u “http://192.168.163.143/ProductShow.asp?ID=114” –D back-end DBMS -T admin -C username,password --dump
猜解username和password这两列的值
Web渗透-SQL注入知识总结_第3张图片
字典爆破出账号admin,密码是admin888的md5加密值

SQL注入漏洞如何防御

完善过滤对象

  • 用户的输入字符串
  • 提交的URL请求中的参数部分
  • 从cookie中得到的数据
  • 部署防SQL注入的系统或脚本

过滤特殊字符

  • 单引号、双引号、斜杠、反斜杠、冒号、空字符等
  • 使用str_replace方法把特殊字符替换成空格
  • Web渗透-SQL注入知识总结_第4张图片

你可能感兴趣的:(Web安全,安全,数据库,web)