Sqlmap学习

Sqlmap 安装环境
Sqlmap 下载
Sqlmap 版本查看   python sqlmap.py --version
Sqlmap 高级帮助命令  python sqlmap.py -hh


sqlmap 直连数据库

服务型数据库(前提知道数据库用户名和密码):
DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME(MySQL,Oracle,Microsoft SQLServer,PostgreSQL,etc.)

例如:python sqlmap.py -d “mysql://admin:[email protected]:3306/testdb” -f --banner --dbs --users

文件型数据库(前提知道数据库绝对路径):
DBMS://DATABASE_FILEPATH(SQLite,Microsoft Access,Firebird,etc.)

sqlmap URL探测

sqlmap 直接对单一URL探测,参数使用-u或–url
URL格式: http(s): //targeturl[:port]/[…]
例如:python sqlmap.py -u “http://www.target.com/vuln.php?id=1” --banner

sqlmap 文件读取目标

sqlmap支持从不同类型的文件中读取目标进行sql注入探测
1、-l 从Burpsuite proxy或WebScarab proxy中读取Http请求日志文件(burp->project options ->logging 打勾Requests 保存文件到sqlmap目录下)
例如:python sqlmap.py -l test
2、-x 从sitemap.xml站点地图文件中读取目标探测
例如:python sqlmap.py -x ip/sitemap.xml
3、-m 从多行文本格式文件读取多个目标,对多个目标进行探测
例如:
4、-r 从文本文件中读取HTTP请求作为sql注入探测的目标
例如:
5、-c 从配置文件sqlmap.conf中读取目标探测
例如:

sqlmap google批量注入

通过-g 自动利用google获取指定Google hack的目标,然后利用交互向导模式进行sql注入探测。
例如:(fq)
python sqlmap.py -g “inurl:”.php?id=1""

sqlmap设置HTTP方法:

sqlmap会自动在探测过程中使用适合的HTTP请求方法。但是在某些具体情况下,需 要强制使用具体的HTTP请求方法。
例如:PUT请求方法。HTTP PUT请求方法不会自动使用,因此需要我们强制指定。使用 --method=PUT。

sqlmap设置POST提交参数:

默认情况下,用于执行HTTP请求的HTTP方法是GET,但是可以通过提供在POST请求中发送的数据隐式地将其改为POST。这些数据作为参数,被用于SQL注入检测。
python sqlmap.py -u “http://www.target.com/vuln.php” --data=“id=1” -f --banner --dbs --users
-f fingerprint 指纹

sqlmap设置参数分隔符:

在某些情况下,sqlmap需要覆盖默认参数分隔符(例如& in GET和POST数据),才能正确地分割和单独处理每个参数。
python sqlmap.py -u “http://www.target.com/vuln.php” --data=“query=foobar&id=1” --param-del=“&” -f --banner --dbs --users

sqlmap设置Cookie头:

sqlmap中用来设置cookie的参数:–cookie ;–cookie-del,–load-cookie,–drop-set-cookie
使用场景:
1、Web应用程序具有基于Cookie验证的过程
2、想利用Cookie值上的SQL注入漏洞
sqlmap使用Cookie过程
1、登录或浏览页面
2、打开审计工具或代理截断,复制cookie
3、在sqlmap中使用 --cookie 粘贴cookie

如果在通信过程中,web应用程序使用Set-Cookie标头进行响应,sqlmap将在所有进一步的HTTP请求中自动使用其值作为Cookie标头。sqlmap还将为SQL注入自动测试这些值。这可以通过提供–drop-set-cookie sqlmap将忽略任何即将到来的Set-Cookie头来避免
反之亦然,如果提供了一个带有选项的HTTP Cookie报头 Cookie和目标URL在任何时候发送一个HTTP Set-Cookie报头,sqlmap将询问要为以下HTTP请求使用哪组Cookie.
load-cookie,可以用来提供包含Netscape/wget格式的cookie的特殊文件
注意:如果需要对HTTP Cookie值进行SQL注入探测,需要设置 --level 2以上(3)

sqlmap设置User-Agent

默认情况下:sqlmap使用以下用户代理头值执行HTTP请求:
sqlmap/1.0-dev-xxxxxxx(http://sqlmap.org)
防护可以检测到sql注入
然而,通过提供自定义用户代理作为选项的参数,可以使用选项——User-Agent来伪造它
此外,通过–random-agent ,sqlmap将从./txt/user-agent中随机选择一个用于会话中的所有HTTP请求。
一些站点在服务端检测HTTP User-Agent值,如果不是一个合法的值,就会中断连接。同时sqlmap也会爆出错误。
注意针对User-Agent的值探测sql注入,需要设置–level值为3

sqlmap设置Referer头

伪造HTTP Referer值是可能的。默认情况下,如果没有显式设置,HTTP请求中不会发送HTTP引用头。
注意:–level设置为3或以上,将针对HTTP引用头进行SQL注入测试

sqlmap设置Host头

可以手动设置HTTP主机头值。默认情况下,从提供的目标URL解析HTTP主机头。
注意:如果–level设置为5,将对HTTP主机头进行SQL注入检测。

sqlmap设置额外HTTP头

通过设置选项–header,可以提供额外的HTTP标头。每个标头必须用换行符分隔,从配置INI文件中提供他们要容易得多。可以查看实例sqlmap.conf文件
python sqlmap.py -u “http://192.168.21.128/sqlmap/mysql/get_int.php?id=1” --headers=“Host:www.target.com\nUser-agent:Firefox 1.0” -v 5

sqlmap设置HTTP协议认证

sqlmap中设置HTTP协议认证参数:–auth-type和–auth-cred
其中–auth-type支持Basic、Digest、NTLM
–auth-cred认证语法为:username:password
例如:python sqlmap.py -u “http://url/arit.php?id=1” --auth-type Basic --auth-cred “testuser:testpass”

sqlmap设置HTTP代理

sqlmap中设置代理的参数:–proxy,–proxy-cred,–proxy-file,–ignore-proxy
其中–proxy用来设置HTTP代理服务器位置 格式:–proxy http(s): //ip[:端口]
–proxy-cred用来设置HTTP代理服务器认证信息 格式:–proxy-cred username:password
–proxy-file用来设置多条代理在文件中
–ignore-proxy当希望通过忽略系统范围内的HTTP(S)代理服务器设置来针对本地网络的目标部分运行sqlmap时,应该使用这种方法。

sqlmap设置Tor隐藏网络

sqlmap中设置Tor网络参数:–tor,–tor-port,–tor-type,–check-tor
kali安装tor: apt install tor

sqlmap设置延迟

sqlmap探测过程中会发送大量探测Payload到目标,如果默认情况过快的发包速度会导致目标预警。为了避免这样的情况发生,可以在探测设置sqlmap发包延迟。默认情况下,不设置延迟。
–delay 0.5 设置延迟0.5秒

sqlmap设置超时

在考虑超时HTTP(S)请求之前,可以指定等待的秒数。有效值是一个浮点数,例如10.5表示10秒半。默认设置为30秒。
例如:–timeout 10.5

sqlmap设置重试次数

–retries count 设置对应重试次数,默认情况下重试3次

sqlmap设置随机化参数

sqlmap可以指定要在每次请求期间随机更改其值得参数名称。长度和类型根据提供的原始值保持一致
–randomize 参数名称

sqlmap设置日志过滤目标

与使用选项-l使用。从提供的日志解析的所有主机不同,可以指定有效的python正则表达式,用于过滤所需的日志。
python sqlmap.py -l burp.log --scope="(www)?.target.(com|net|org)"

–skip-urlencode 不进行URL加密

sqlmap设置忽略401

–ignore-401 参数用来忽略未验证错误
如果想测试偶尔返回HTTP错误401(未经授权的)的站点,而想忽略它并不提供适当凭证的情况下继续测试,可以使用–ignore-401

sqlmap设置安全模式

避免在多次请求失败后销毁会话
有时,如果执行了一定数量的不成功请求,则在此期间的web应用程序或检查技术会销毁会话。这可能发生在sqlmap的检测阶段或利用任何盲注sql注入类型时。原因是SQL有效负载不一定返回输出,因此可能会向应用程序会话管理或检查技术发出信号。
–safe-url,–safe-post,–safe-req,–safe-freq

sqlmap设置HTTP协议私钥

当web服务器需要适当的客户端证书和用于身份验证的私钥时,应该使用此选项。提供的值应该是一个PEM格式的key_file,其中包含证书和私钥。
–auth-file 文件名
通过这种方式,sqlmap将访问每个预定义数量的请求,而不对某个安全url执行任何类型的注入。
sqlmap设置忽略URL编码
根据参数的位置(例如GET),默认情况下它的值可以是URL编码。在某些情况下,后端web服务器不遵循RFC标准,需要以原始的非编码形式发送值。在这种情况下使用–skip-urlencode.
–skip-urlencode 不进行URL加密。

sqlmap设置持久HTTP连接

sqlmap中可以设置连接为持久连接。HTTP报文中设置Connection:Keep-Alive
参数:–keep-alive

sqlmap设置不接受HTTP Body

sqlmap中设置空连接,表示不接受HTTP当中的Body.常用在盲注过程中
参数:–null-connection

sqlmap设置多线程

sqlmap中设置同时发送多少个HTTP请求的多线程
–thread默认是3个多线程。为了不影响目标站点服务器的性能,sqlmap可以设置最大的线程数为10

sqlmap设置预测输出

sqlmap中的预测输出,在推理算法中用于检索值字符的顺序统计预测。
参数:–predict-output
注意这个参数与–thread参数不兼容

sqlmap注入介绍

所谓SQL注入,就是通过吧SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,他可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
由此可见,SQL注入发生在HTTP数据包中任意位置
1、-o 可以开启所有性能优化参数
2、–thread 默认线程数为1
3、–null-connection 检索没有body响应的内容。

sqlmap设置指定注入参数

-p,–skip ,–param-exclude,–skip-static
-p:指定具体探测的参数。例如:-p"id,user-agent"
–skip:忽略探测具体的参数。
例如:–level 1~5 --skip “user-agent,referer”
–param-exclude:忽略包含具体内容的参数。
例如:–param-exclude="token|session"不对包含token或session的参数进行探测
–skip-static:忽略非动态参数

sqlmap设置URL注入位置

当注入点位于URL本身内部时,会出现一些特殊情况。除非手动指定URI路径,否则sqlmap不会对URI路径执行任何自动测试。必须在命令行中添加星号(*)来指定这些注入点。
例如:当使用Apache web服务器的mod_rewrite模块或其他类似的技术时,这就显得特别有用了。

sqlmap设置任意注入位置

与URL注入点类似,星号()(注意:这里也支持Havij样式%INJECT%)也可以用来指向GET、POST、或HTTP头中的任意注入点。注入点可以通过在带有选项-u的GET参数值、带有选项-数据的POST参数值、带有选项-H的HTTP头值、带有选项-头、用户代理、引用和/或cookie的HTTP头值中指定,或者在带有选项-r的文件中加载的HTTP请求的通用位置指定。
例如:
python sqlmap.py -u “http://targeturl” --cookie="param1=value1
;param2=value2"

sqlmap强制设置DBMS

默认情况下sqlmap会自动识别探测目标web应用程序的后端数据库管理系统(DBMS),以下列出sqlmap完全支持的DBMS种类
Mysql ,Oracle,Microsoft SQL Server,IBM DB2,SQLite,Firebird,Sybase,SAP MaxDB,HSQLDB,informix
–dbms 数据库管理系统名称【版本号】
例如:
–dbms mysql5.0、–dbms microsoft sql server 05

sqlmap强制设置OS系统

默认情况下sqlmap回自动识别探测目标web应用程序的后端操作系统(OS),以下列出sqlmap完全支持的OS种类。
Linux,Windows
注意,此选项不是强制性的,强烈建议只在完全确定底层操作系统的后端数据库管理系统时才使用它。如果不知道它,让sqlmap自动识别
–os windows 或 --os linux

sqlmap关闭负载转换机制

在检索结果时,sqlmap使用一种机制,在这种机制下,所有条目都被转换为字符串类型,并在NULL值得情况下用空格字符替换。这样做是为了防止出现任何错误状态(例如:将空值与字符串值连接起来),并简化数据检索过程本身。尽管如此,还是有报告的案例(例如MySQL DBMS的旧版本)由于数据检索本身的问题(例如没有返回值)需要关闭这种机制(使用此开关)。
–no-cast

sqlmap关闭字符转义机制

z在sqlmap需要在有效负载中使用(单引号分隔)字符串值(例如,选择‘Foobar‘)时,这些值将自动转义(例如,选择CHAR(102)+CHAR(111)+CHAR(111)+CHAR(98)+CHAR(97)+CHAR(114))。这样做的原因有两个:混淆有效负载内容和防止后端服务器上查询转义机制(例如magic_quotes和/或mysql_real_escape_string)的潜在问题。用户可以使用这个开关关闭它(例如减少有效负载大小)。
–no-secape

sqlmap强制设置无效值替换

在sqlmap需要使原始参数值无效(例如id=13)时,它使用经典的否定(例如id=-13)。有了这个开关,就可以强制使用大整数值来实现相同的目标(例如id=9999999)。
–invalid-bignum
在sqlmap需要使原始参数值无效(例如id=13)时,它使用经典的否定(例如id=-13)。有了这个开关,就可以强制使用布尔操作来实现相同的目标(例如id=13 and 18=19)。
–invalid-logical
在sqlmap需要使原始参数值无效(例如id=13)时,它使用经典的否定 (例如id=-13)。有了这个开关,就可以强制使用随机字符串来实现相同的目标(例如id=akewmc)
–invalid-string

sqlmap自定义注入负载位置

在某些情况下,只有当用户提供要附加到注入负载的特定后缀时,易受攻击的参数才被利用。当用户已经知道查询语法并希望通过直接提供注入有效负载前缀和后缀来检测和利用SQL注入时,这些选项就派上用场了。
–prefix 设置SQL注入Payload前缀
–suffix 设置SQL注入payload后缀

sqlmap设置Tamper脚本

sqlmap本身不会混淆发送的有效负载,除了单引号之间的字符串被CHAR()类似的表示形式所取代之外。sqlmap通过Tamper脚本来绕过WAF等防御措施,可以在tamper文件夹下找到所有sqlmap自带的tamper脚本。
sqlmap.py -u “http://ip/sqlmap/mysql/get_int.php?id=1” --tamper"between.py,randomcase.py,space2comment.py" -v 3

sqlmap设置DBMS认证

–dbms-cred = username:password

sqlmap设置探测等级

–level此选项需要指定要执行的测试等级的参数。有五个层次。在执行有限数量的测试(请求)时,默认值为1。1~5探测复杂度逐步提升。
sqlmap使用的有效负载在文本文件xml/payload.xml中指定。按照文件顶部的说明,如果sqlmap错过了注入,也应该能够添加自己的有效负载来进行测试。
这个选项不仅会影响到哪个有效负载sqlmap尝试,还会影响到在探测中取哪个注入点:GET和POST参数总是被测试,HTTP Cookie头值从第2级测试,HTTP用户代理、引用头值从第3级测试。
总之,检测SQL注入越困难,必须设置的级别就越高。
在显示无法探测时,可以设置 --level 5 来进行更强大的探测。

sqlmap设置风险参数

–risk num num范围1~3
此选项需要指定要执行测试的风险的参数。有三个风险值。默认值为1,这对于大多数SQL注入点来说是无害的。风险值2增加了大量基于查询时间的SQL注入测试的默认级别,值3页增加了基于or的SQL注入测试。
在某些情况下,比如UPDATE语句中的SQL注入,注入基于or的有效负载可能导致表的所有条目的更新。引入–risk这个选项:用户可以控制测试的有效负载,用户可以任意选择使用也有潜在危险的负载。

sqlmap设置页面比较参数

默认情况下,通过比较注入的请求页面内容和未注入的原始页面内容,可以区分真查询和假查询。这种观念并不总是起作用是因为在每次刷新页面内容的变化有时甚至没有注入,例如当页面有一个计数器,一个动态广告横幅或任何其他HTML的一部分呈现动态和可能改变时间不仅因此用户的输入。为了绕过这个限制,SQLMAP努力识别响应体的这些片段并进行相应处理。
–string 指定包含字符串 查询为true
–not-string 指定包含字符串查询为false
–regexp 指定通过正则表达式匹配字符串,查询为true
–code 指定匹配HTTP状态响应码,查询为true

sqlmap设置内容比较参数

–text-only 设置页面内容中包含文本
例如:–text-only = “welcome for true and forbidden for false”

–titles 设置页面title中包含文本。前提需要知道如何区分查询的真与假。根据返回字符串内容不同。
例如:–titles=“login”

sqlmap设置具体SQL注入技术

–technique 参数用来设置具体SQL注入技术。以下列出sqlmap支持的SQL注入技术。
B:Boolean-based blind 基于布尔的盲注
E:Error-based 报错注入
U:Union query-based 联合查询注入
S:Stacked queries 堆叠注入
T:Time-based blind 基于时间的盲注
Q:Inline queries 内联查询注入
例如:sqlmap -u "存在注入点的URL” --technique B --current-db
利用基于布尔的盲注对注入点进行SQL注入探测。

sqlmap设置时间盲注延迟时间

在测试基于时间的盲SQL注入时,可以设置秒来延迟响应,方法是提供–time-sec选项,后面跟着一个整数。默认情况下,值设置为5 秒。
例如:sqlmap -u “存在注入点的URL” --time-sec 3 --current-db

sqlamp设置UNION字段数

默认情况下,sqlmap测试使用1到10列的UNION查询注入技术。但是,通过提供更高–level值,可以将此范围增加到50 列。
可以手动告sqlmap使用特点范围的列来测试这种类型的SQL注入,方法是为该工具提供–union-cols后跟一系列整数。
例如:12-16表示使用12到16个列队union查询SQL注入进行测试。
例如:sqlmap -u “存在注入的URL” --union-cols 12-18 --current-db

sqlmap设置UNION字符

默认情况下,sqlmap测试使用空字符的联合查询SQL注入技术。但是,通过提供更高级别的值SQLMAP,还将使用随机数执行测试,因为在某些情况下,UNION查询测试使用NULL会失败,而使用随机整数则会成功。
可以手动告诉sqlmap使用特定字符测试这种类型的SQL注入,方法是使用带有所需字符值的选项–current-char(例如–union-char 123)

sqlmap设置union查询表

某些情况下,sqlmap需要设定union查询SQL注入的具体数据表才可以得到数据。
–union-from 表名

sqlmap设置DNS露出攻击

针对目标网络很有可能对外部流量进行限制,或者设置WAF。
通过设置DNS流量来突破限制 --dns-domain "dns服务器“ 需要用户自身具有一个开放53端口的DNS服务器,通过DNS流量来获取Web应用程序中数据内容。

sqlmap设置二次注入

sqlmap中可以设置二次注入的结果页面。
–second-order url

sqlmap识别指纹 

–fingerprint -f 探测目标指纹信息。(–banner或-b)

sqlmap检索DBMS Banner

获取后端数据库Banner信息
–banner或者-b

sqlmap检索DBMS当前用户

获取DBMS当前用户
–current-user

sqlmap检索DBMS当前数据库

获取当前数据库名
–current-db

sqlmap检索DBMS当前主机名
--hostname

sqlmap探测当前用户DBA

–is-dba 探测当前用户是否是数据库管理员

sqlmap枚举DBMS用户

获取DBMS所有用户
–users

sqlmap枚举DBMS用户密码

–password 获取用户密码

sqlmap枚举DBMS权限

–privileges --role

sqlmap列举数据库名

–dbs 列举数据库名称

sqlmap列举数据库表

–tables 枚举表名 -->指定具体数据库 -D 数据库名
–exclude-sysdbs

sqlmap枚举数据表列

–columns -D 指定数据库 -T指定数据表 -C指定具体字段

sqlmap枚举数据值

–dump

sqlmap枚举schema信息

用户可以使用此开关–schema检索DBMS模式。
模式列表将包含所有数据库、表和列,以及它们各自的类型。
与–exclude-sysdb结合使用时,只会检索和显示包含非系统数据库的模式的一部分。
python sqlmap.py -u “http://192.168.48.130/sqlmap/mysql/get_int.php?id=1” --schema–batch --exclude-sysdbs

sqlmap检索数据表数量

如果只想知道表的条数,则可以使用此开关
–count
python sqlmap.py -u “http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1” --count -D testdb

sqlmap获取数据信息

–start
–stop
–first
–last
–start 1 --stop3 获取第二张到第三张表的名字
–stop 1 获取第一张表的名字
–first 3 --last 5 获取从第三出发到第五个字符

sqlmap设置条件获取信息

–pivot-column=id 设置独一无二的列
–where=“id>3"设置条件

你可能感兴趣的:(sqlmap,sqlmap)