SQLmap介绍:
Sqlmap是一个开源的渗透工具,它可以自动化检测和利用SQL注入缺陷以及接管数据库服务器的过程。他有一个强大的检测引擎,许多适合于终极渗透测试的小众特性和广泛的开关,从数据库指纹、从数据库获取数据到访问底层 文件系统和通过带外连接在操作系统上执行命令
官方网址: http://sqlmap.org/
官网下载地址: http://sqlmap.org/
所谓SQL注入,就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串, 最终达到欺骗服务 器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将SQL命令注入 到后台数据库引擎执行的能力,它可以 通过在web表单中输入SQL语句得到一个存在安全漏洞 的网站上的数据库,而不是按照设计者意图去执行SQL语句
参数: -v
解释: Sqlmap的输出信息按从简到繁共分为7个级别依次为0、1、2、3、4、5和6。使用参数-v 来指定某个等级,如使用参数-v 6来指定输出级别为6。默认输出级别为1。
作用:
支持连接的数据库:
python sqlmap.py -d "mysql://用户名:密码@地址:端口/数据库名字" f --banner --dbs --users
参数: -u 或者 --url
** 解释:** sqlmap直接对单一URL探测
URL格式:http(s)://targetur\[:port\]/
# 示例:
python sqlmap.py -u "http(s)://targetur\[:port\]/" --banner
参数 | 作用 |
---|---|
-x | 为便于搜索引擎收录,许多网站专门为搜索引擎生成了xml格式的站点地图 |
-m | 从多行文本格式文件读取多个目标,对多个目标进行探测 |
-r | 可以将一个HTTP请求保存在文件中 |
-c | 从配置文件sqlmap.conf中读取目标探测 |
介绍:
HTTP请求有很多种方法(method),可以在不同位置(GET、POST、cookie和User-Agent等)携带不同参数。往往只有在特定位置携带了特定参数以特定方法发起的请求才是合法有效的请求。Sqlmap运行时除了需要指定目标,有时还需要指定HTTP请求的一些细节。
一般来说,Sqlmap能自动判断出是使用GET方法还是POST方法,但在某些情况下需要的可能是PUT等很少见的方法,此时就需要用参数–method来指定方法。
参数: --data=" "
作用: 默认情况下,用于执行HTTP请求的HTTP方法是GET,但是可以通过提供在POST请求中发送的数据隐式的将其改为 POST。这些数据作为参数,被用于SQL注入检测
用法示例:
python sqlmap.py -u "url地址" --datta="data数据" --banner
参数 | 作用 |
---|---|
--cookie | 设置cookie值 |
--cookie-del | 删除cookie值 |
--load-cookies | 从文件中加载 |
--drop-set-cookie | http响应(Set-Cookie) |
使用场景: web应用程序具有基于cookie验证的过程,要测试的页面只有在登录状态下才能访问,登录状态用 cookie识别想利用cookie值上的SQL注入漏洞,想要检测是否存在cookie注入
用法示例:
python sqlmap.py -u "url地址" --cookie "cookies值" --level2 --banner
tips:
1.默认的user-agent:
sqlmap/1.0-dev-xxxx(http://sqlmap.org)
2.指定user-agent:
使用参数 --user-agent = '指定的user-agent'
3.随机选择user-agent:
使用参数 --random-agent
设置sqlmap参数: --proxy
设置HTTP代理服务器位置 格式: --proxy http(s): //ip[端口]
用法示例:
python sqlmap.py -u "URL地址" --proxy "代理ip" --banner
参数: --delay 0.5
作用: sqlmap探测过程中会发送大量探测Payload到目标,如果默认情况过快的发包速度会导致目标预警。为了避免这样的情况发生,可以在探测设置sqlmap发包延迟。默认情况下,不设置延迟
参数: --timeout 10.5
作用: 在考虑超时HTTP请求之前,可以指定等待的秒数。有效值是一个浮点数,比如10.5秒。默认是30秒
参数: --retries count
作用: 设置对应充实次数,默认情况下重试3次
参数: --randomize 参数名称
作用: sqlmap可以指定要在每次请求期间随机更改其值得参数名称。长度和类型根据提供的原始值保持一致
用法参考:
pyhon sqlmap.py -u "url地址" --randomize id --banner
参数: --ignore-401
作用: 如果测试偶尔返回HTTP错误401的站点,而你想忽略它并在不提供适当凭证的情况下继续测试,可以使用–ignore- 401
介绍: 有时服务器检测到某个客户端错误请求过多会对其进行屏蔽,而Sqlmap的测试往往会产生大量错 误请求,为避免被屏蔽,可以时不时的产生几个正常请求以迷惑服务器。
参数 | 作用 |
---|---|
--safe-url | 隔一会就访问一下的安全URL |
--safe-post | 访问安全URL时携带的POST数据 |
--safe-req | 从文件中载入安全HTTP请求 |
--safe-freq | 每次测试请求之后都会访问一下的安全URL |
参数: --keep-alive
参数: --null-connection
作用: sqlmap中设置空连接,表示不接受HTTP当中的Body。 可以直接获得HTTP响应的大小而不用获得HTTP响应体,常用在盲注过程中
参数: --thread=3
作用: sqlmap中设置同时发送多少个HTTP请求的多线程[最大10个,默认1个]
参数: -o
作用: 添加此参数相当于同时添加下列三个优化参数
参数: --level 1
作用: 此参数用于指定检测级别,有1~5共5级。默认为1,表示做最少的检测,相应的,5级表示做最多的检测。
参数: --risk 2
作用: 此参数用于指定风险等级,有1~3共3级。默认风险等级为1,此等级在大多数情况下对测试目标无害。 风险等级2添加了基于时间的注入测试,等级3添加了OR测试。
参数: -p "需要探测的参数, ','隔开 "
作用: 默认情况下Sqlmap会测试所有GET参数和POST参数,当level大于等于2时会测试cookie参数,当level大于等于3时会测试User-Agent和Referer。实际上还可以手动指定一个以逗号分隔的、要测试的参数列表,该列表中的参数不受level限制。这就是“-p”的作用
不想测试某一参数的时候: --skip
参数: *
作用: 当注入点位于URI本身内部时,会出现一些特殊情况。除非手动指向URI路径,否则sqlmap不会对URI路径执行任何自动测试。必须在命令行中添加星号(*)来指定这些注入点。
使用示例:
python sqlmap.py -u "http://targeturl/param1/value1*/param2/value2/" --banner
介绍: 默认情况下sqlmap会自动识别探测目标web应用程序的后端数据库管理系统(DBMS)。
sqlmap支持 的DBMS种类:
参数: --dbms 数据库类型
作用: 可以指定数据库来进行探测
参数: --os 系统类型
作用: 默认情况下sqlmap会自动探测目标web应用程序的后端操作系统,sqlmap完全支持的OS种类Linux、Windows
参数: --invalid-bignum
作用: 在sqlmap需要使原始参数值无效(例如id=13)时,它使用经典的否定(例如id=-13)。有了这个参数,就可以强制使用大整数值来实现相同的目标(例如id=99999999)。
使用示例:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --invalid-bignum --banner
参数: --invalid-logical
作用: 强制使用布尔操作来实现相同的目标(例如id=13 and18=19)。
参数: --invalid-string
作用: 有了这个参数,就可以强制使用随机字符串来实现相同的目标(例如id=akewmc)。
介绍: 在某些情况下,只有当用户提供要附加到注入负载的特定后缀时,易受攻击的参数才可被利用。当用户已经知道查询语法并希望通过直接提供注入有效负载前缀和后缀来检测和利用SQL注入时,这些选项就派上用场了。
设置SQL注入Payload前缀: --prefix
设置SQL注入Payload后缀: --suffix
$query = "SELECT * FROM users WHERE id=('.$_GET['id'].') LIMIT 0, 1";
python sqlmap.py -u "http://ip/sqlmap/mysql/get_str_brackets.php\?id=1" -p id --prefix "')" --suffix " AND ('abc'='abc"
$query = "SELECT * FROM users WHERE id=('1') AND ('abc'='abc') LIMIT0, 1" ;
sqlmap本身不会混淆发送的有效负载,除了单引号之间的字符串被CHAR()类似的表示形式所取代之外。sqlmap通过Tamper脚本来绕过WAF等防御措施,可以在tamper文件夹下找到所有sqlmap自带的tamper脚本。
python sqlmap.py -u "http://ip/sqlmap/mysql/get_int.php?id=1" --tamper "between.py,randomcase.py,space2comment.py" -v 3
参数: --dbms-cred = username:password
使用示例:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-3/?id=1" --dbms-cred = "root:root" --banner
参数: --technique
作用: 此参数用于指定检测注入时所用技术。默认情况下Sqlmap会使用自己支持的全部技术进行检测。此参数后跟表示检测技术的大写字母,其值为B、E、U、S、T或Q
各子母值含义如下:
其它参数:
参数: --time-sec
作用: 用此参数设置基于时间延迟注入中延时时长,默认为5秒
参数: --union-cols 12-16 (会让Sqlmap的列数检测范围变成 12到16)
作用: 在进行联合查询注入时,Sqlmap会自动检测列数,范围是1到10。当level值较高时列数检测范 围的上限会扩大到 50。
参数: --union-char
作用: 默认情况下Sqlmap进行联合查询注入时使用空字符(NULL)。但当level值较高时Sqlmap会生 成随机数用于联合查询注入。 因为有时使用空字符注入会失败而使用随机数会成功。
参数: --union-from
作用: 有些情况下在联合查询中必须指定一个有效和可访问的表名,否则联合查询会执行失败。
参数: -f或者–fingerprint
作用: 探测目标指纹信息
参数: --banner 或者 --b
作用: 获取数据库基本信息
参数: --current-db
作用: 获取当前数据库名
参数: --hostname
作用: 获取主机名
参数: --d-dba
作用: 探测当前用户是否是数据库管理员
参数: --passwords
作用: 获取用户密码Hash值
参数: --users
作用: 获取DBMS所有用户
参数: --provoleges
作用: 当前用户有读取包含了数据库管理系统中用户信息的系统表的权限时使用这一参数可以列举数据库管理系统中用户的权限。通过用户权限可以判断哪些用户是管理员。
更多参数: 若想只枚举特定用户的权限使用参数"-U"指定用户,可用"CU"来代表当前用户。
使用示例:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --privileges U root
参数: --dbs
作用: 列举数据名称
参数: --tables
作用: 列举数据库表名
更多参数: -D 数据库名字 指定具体数据库
参数: --columns
作用: 枚举数据库列
参数: --dump
作用: 枚举数据值
参数: --schema
作用: 用户可用此选项列举数据库管理系统的模式。模式列表包含所有数据库、表、列、触发器 和他们各自的类型。
更多参数: --exclude-sysdbs 排除系统数据库
参数: --count
作用: 获取表的条目数
参数: --start--stop
作用: 获取数据信息
更多参数: --start 1 --stop 3 返回当前数据表的前三条记录
]
参数: --where
作用: 设置条件获取信息
参数: --common-tables
作用: 暴力破解表名
tips: 有些情况下用–tables不能列出数据库中表名来比如:
参数: --common-columns
作用: 暴力破解列名
参数: -a --all
作用: 返回所有的检索信息
python sqlmap.py -u "http://127.0.0.1/sqli/Less-8/?id=1" --technique T --dbs
targer.txt文件中是当前网址的请求,加上发送的参数 ↓
python sqlmap.py -r target.txt -p passwd --technique E
练习靶场: https://www.mozhe.cn/bug/d1hJazFDeGRHV05DVjI3YXpHREZGUT09bW96aGUmozhe