网络安全之Sql注入、sqlmap

SQL注入

SQL注入基础

SQL注入漏洞从1998年圣诞节大火以来,长盛不衰,虽然开发人员想出各种方法对它进行围追堵截,却始终不能赶尽杀绝,sql注入的根本原因就是将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。

SQL注入是如何产生的

web应用程序对用户输入的数据没有进行过滤,或者过滤不严,就把SQL语句带进数据库进行查询。
以下图为例,假如用户传输的参数id没有过滤,union联合查询就可以改变这个sql语句。
在这里插入图片描述

SQL注入的危害

  • 绕过登录验证:使用万能密码登录网站后台等。
  • 获取敏感数据:获取网站管理员帐号、密码等。
  • 文件系统操作:列目录,读取、写入文件等。
  • 注册表操作:读取、写入、删除注册表等。

判断注入漏洞的依据是什么

根据客户端返回的结果来判断提交的测试语句是否成功被数据库引擎执行,如果测试语句被执行了,说明存在注入漏洞。

常见的SQL注入方式

在这里插入图片描述
—.根据注入的方式来分类:
1.get注入
2.post注入
3.cookie注入
二.注入方式来分类
1.有回显的注入
2.盲注
3.二次注入
4.报错注入
5.堆叠注入
6.宽字节注入

sql注入攻击流程

—.判断是否存在sql注入与sql注入的类型判断方法:
1.先看类型,第一种有报错注入的,用’先来判断,如果报错就说明有sql注入
2.遇到盲注需要用逻辑语句:and语句。例如and 1=1 and 1=2 ,OR 320=6 AND 000909=000909 – '等。
二、判断sql注入是字符型还是数字型进行闭合
三、利用order by爆出列数
在这里插入图片描述
在这里插入图片描述
(由此可以看出,users表仅有三列)

四、利用database ()获取数据库名
在这里插入图片描述
在这里插入图片描述

五、爆表名
union select 1,group_concat(table_name) ,3 from information_schema.tables where table_schema=database()%23
在这里插入图片描述
六、爆列
union select 1,group_concat(column_name),3 frominformation_schema.columns where table_name=‘users’%23

七、爆值
union select 1,2,group_concat (username, password) from users --+
在这里插入图片描述
在这里插入图片描述
注:concat、concat_ws、group_concat的区别:

  • concat用法
    功能∶将多个字符串连接成一个字符串。
    语法:concat(str1 , str2,…)
  • concat_ws用法
    功能︰和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符( concat_ws就是concat with separator )
    语法:concat_ws(separator, str1, str2,…)
  • group_concat用法
    功能︰将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
    语法︰group_concat( [distinct]要连接的字段[order by排序字段asc/desc ][separator ‘分隔符’])

sql注入靶场搭建(sqli-labs)

地址:https://github.com/Audi-1/sqli-labs

可使用工具 – sqlmap

sqlmap支持的注入模式

  • boolean-based blind(布尔型注入)
  • time-based blind(基于时间型盲注)
  • error-based(报错型注入)
  • UNION query-based(联合注入)
  • stacked queries and out-of-band(堆叠注入)

sqlmap常用命令

【可参考文章:https://blog.csdn.net/weixin_42902126/article/details/125172809】

  • 探测注入漏洞:sqlmap -u url
    -u:指定目标url
    在这里插入图片描述
    探测结果:
    在这里插入图片描述

【注:sqlmap还支持从以下类型文件中读取目标进行探测:
1、-l 从Burpsuite proxy 或 WebScarab proxy中读取http请求日志文件。
2、-x 从sitemap.xml站点地图文件中读取目标探测。
3、-m 从多行文本格式文件读取多个目标,对多个目标进行探测。
4、-r 从文本文件中读取http请求作为sql注入探测的目标。
5、-c 从配置文件 sql.conf中读取目标探测。】

  • 默认确认: --batch
    使sqlmap在需要用户输入选择时保持默认行为,强制执行。sqlmap作为批处理工具运行,不需要任何用户交互。
    在这里插入图片描述

  • 获取库名 --dbs
    在这里插入图片描述在这里插入图片描述

  • 获取表名 --tables
    在这里插入图片描述

  • 获取字段名 --columns
    在这里插入图片描述
    在这里插入图片描述

  • 获取枚举数据 --dump
    在这里插入图片描述在这里插入图片描述

  • 列举数据库管理系统中的用户 --users
    在这里插入图片描述

  • 检测当前用户是否是管理员 --is-dba

  • 获取当前用户 --current-user

  • 设置探测级别 --level
    在这里插入图片描述

  • 设置代理 --proxy =http: //

  • 指定sql注入点 -p

sqlmap tamper

sqlmap tamper是一个用于修改和欺骗SQL注入防御机制的工具。它通过对SQL语句进行混淆、编码、分割和替换等操作,使得SQL语句不被防御机制检测到,从而成功执行注入攻击。
sqlmap tamper的主要作用是对注入语句进行改写和欺骗,以绕过常见的防御机制,这样就能够更容易地发现和利用漏洞。它提供了多种预定义的tamper脚本,也可以自定义tamper脚本来满足特殊需求。

sqlmap -u "http://localhost/sqli-labs/Less-1/?id=1" --tamper "between.py,randomcase.py"