ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Sqlmap的使用

2019-04-11 12:38:02  阅读:304  来源: 互联网

标签:Sqlmap sqlmap HTTP 参数 测试 使用 id 注入


一、Sqlmap简介 

  sqlmap是一种开源的渗透测试工具,可以自动检测和利用SQL注入漏洞并接管数据库服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令。

 

1.2 支持的数据库:

  

  • MySQL
  • Oracle
  • PostgreSQL
  • Microsoft SQL Server,
  • Microsoft
  • Access,
  • IBM DB2
  • SQLite,
  • Firebird
  • Sybase and SAP MAXDB

1.3支持5种SQL注入技术

1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。

2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。

3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

4、联合查询注入,可以使用union的情况下的注入。

5、堆查询注入,可以同时执行多条语句的执行时的注入。

 

二、Sqlmap的指令

2.1设置目标URL

1.  -u /--url

格式:http(s)://targeturl[:port]/[…]

例如:python sqlmap.py -u "http://www.target.com/vuln.php?id=1" -f --banner --dbs --users

从Burp或者WebScarab代理中获取日志

2.  -m

从文本中获取多个目标扫描,但是每一行只能有一个url. 

sqlmap -m urllist.txt

3.  -r

从文件中加载HTTP请求,这样的话 就不需要在去设定cookie,POST数据......等等

比如文本文件内如下:

POST /vuln.php HTTP/1.1
Host: www.target.com
User-Agent: Mozilla/4.0

id=1

当请求是HTTPS的时候你需要配合这个--force-ssl参数来使用,或者你可以在Host头后门加上:443
处理Google的搜索结果

2.2设置回显等级(7个)

参数:-v 默认为1:

0、只显示python错误以及严重的信息。
1、同时显示基本信息和警告信息。(默认等级)
2、同时显示debug信息。
3、同时显示注入的payload。
4、同时显示HTTP请求。
5、同时显示HTTP响应头。
6、同时显示HTTP响应页面。

 

2.3设置HTTP数据包相关参数

参数:--data

此参数是把data后面的数据以POST方式提交,sqlmap会像检测GET参数一样检测POST提交过去的参数。
例子:
python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1"

HTTP cookie头
参数:--cookie,--load-cookies,--drop-set-cookie

这个参数在以下两个方面很有用:

1、web应用需要登陆的时候。

2、你想要在这些头参数中测试SQL注入时。

可以通过抓包把cookie获取到,复制出来,然后加到--cookie参数里。

在HTTP请求中,遇到Set-Cookie的话,sqlmap会自动获取并且在以后的请求中加入,并且会尝试SQL注入。

如果你不想接受Set-Cookie可以使用--drop-set-cookie参数来拒接。

当你使用--cookie参数时,当返回一个Set-Cookie头的时候,sqlmap会询问你用哪个cookie来继续接下来的请求。当--level的参数设定为2或者2以上的时候,sqlmap会尝试注入Cookie参数。(当web需要登录的时候,需要我们抓包获取cookie参数,然后复制出来,加到-- cookie参数中)


--cookie=”Cookie: Hm_lvt6910067,1546929561,1547001094,1547024662;
PHPSESSID=o64fbvo316lg59njufl2gfutm4; ”

 

2.4设置HTTP数据包相关参数

HTTP User-Agent头

参数:--user-agent,--random-agent

默认情况下sqlmap的HTTP请求头中User-Agent值是:sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)

可以使用--user-anget参数来修改,同时也可以使用--random-agnet参数来随机的从./txt/user-agents.txt中获取。当--level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入。

HTTP Referer头

参数:--referer

sqlmap可以在请求中伪造HTTP中的referer,当--level参数设定为3或者3以上的时候会尝试对referer注入。
额外的HTTP头

参数:--headers

可以通过--headers参数来增加额外的http头

HTTP请求延迟

参数:--delay

可以设定两个HTTP(S)请求间的延迟,设定为0.5的时候是半秒,默认是没有延迟的。
设定超时时间

参数:--timeout

可以设定一个HTTP(S)请求超过多久判定为超时,10.5表示10.5秒,默认是30秒。
设定重试超时

参数:--retries

当HTTP(S)超时时,可以设定重新尝试连接次数,默认是3次。
设定随机改变的参数值

参数:--randomize

可以设定某一个参数值在每一次请求中随机的变化,长度和类型会与提供的初始值一样。
利用正则过滤目标网址

参数:--scope

例如:

python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"

避免过多的错误请求被屏蔽

参数:--safe-url,--safe-freq

有的web应用程序会在你多次访问错误的请求时屏蔽掉你以后的所有请求,这样在sqlmap进行探测或者注入的时候可能造成错误请求而触发这个策略,导致以后无法进行。

2.5指定测试参数

参数:-p ,
sqlmap 默认会测试所有的GET和POST参数,当--level的值大于等于2的时候也
会测试HTTP Cookie头的值,当大于等于3的时候也会测试User- Agent和HTTP
Referer头的值。
例如:-p “id,user-angent”
参数:--skip
在使用--level时,级别很大的时候,但是有些参数不能去测试,那么可以使用-- skip参数跳过。
例如:--skip=”user-agent,referer”

2.6指定数据库服务器系统

参数:--os

默认情况下sqlmap会自动的探测数据库服务器系统,支持的系统有:Linux、Windows。
指定无效的大数字

参数:--invalid-bignum

当你想指定一个报错的数值时,可以使用这个参数,例如默认情况系id=13,sqlmap会变成id=-13来报错,你可以指定比如id=9999999来报错。
只定无效的逻辑

参数:--invalid-logical

原因同上,可以指定id=13把原来的id=-13的报错改成id=13 AND 18=19。
注入payload

参数:--prefix,--suffix

在有些环境中,需要在注入的payload的前面或者后面加一些字符,来保证payload的正常执行。

例如,代码中是这样调用数据库的:

$query = "SELECT * FROM users WHERE id=(’" . $_GET[’id’] . "’) LIMIT 0, 1"; 

这时你就需要--prefix和--suffix参数了:

python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "’)" --suffix "AND (’abc’=’abc"

这样执行的SQL语句变成:

$query = "SELECT * FROM users WHERE id=(’1’) <PAYLOAD> AND (’abc’=’abc’) LIMIT 0, 1"; 

2.7修改注入的数据

参数:--tamper

sqlmap除了使用CHAR()函数来防止出现单引号之外没有对注入的数据修改,你可以使用--tamper参数对数据做修改来绕过WAF等设备。

 

三:探测

3.1设定探测等级

参数:--level (sqlmap -r 情况下)共有五个等级,默认为1,sqlmap使用的payload可以在xml/payloads.xml中看到,自己也可以根据相应的格式添加自己的payload。

level>=2的时候就会测试HTTP Cookie。

level>=3的时候就会测试HTTP User-Agent/Referer头。

level=5 的时候会测试HTTP Host

这个参数不仅影响使用哪些payload同时也会影响测试的注入点,GET和POST的数据都会测试,HTTP Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试。
总之在你不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值

3.2设定探测风险等级

 

参数: --risk
共有四个风险等级,0-4,
默认是1会测试大部分的测试语句,
2会增加基于时间的测试语句,
3会增加OR语句的SQL注入测试。
在有些时候,例如在UPDATE,DELETE的语句中,注入一个OR的测试语句,
可能导致更新的整个表,可能造成很大的风险

在有些时候,例如在UPDATE的语句中,注入一个OR的测试语句,可能导致更新的整个表,可能造成很大的风险。
测试的语句同样可以在xml/payloads.xml中找到,你也可以自行添加payload。

四:常用参数

以上的我就不说了,我再说几个

测试是否是注入  参数:--technique

这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式

支持的探测方式如下:
B: Boolean-based blind SQL injection(布尔型注入)
E: Error-based SQL injection(报错型注入)
U: UNION query SQL injection(可联合查询注入)
S: Stacked queries SQL injection(可多语句查询注入)
T: Time-based blind SQL injection(基于时间延迟注入)

设定延迟注入的时间  参数:--time-sec

当使用继续时间的盲注时,时刻使用--time-sec参数设定延时时间,默认是5秒。


设定UNION查询字段数  参数:--union-cols

 默认情况下sqlmap测试UNION查询注入会测试1-10个字段数,当--level为5的时候他会增加测试到50个字段数。设定--union-cols的值应该是一段整数,如:12-16,是测试12-16个字段数。

设定UNION查询使用的字符  参数:--union-char


默认情况下sqlmap针对UNION查询的注入会使用NULL字符,但是有些情况下会造成页面返回失败,而一个随机整数是成功的,这是你可以用--union-char只定UNION查询的字符

列数据

参数:-b,--banner

大多数的数据库系统都有一个函数可以返回数据库的版本号,通常这个函数是version()或者变量@@version这主要取决与是什么数据库。
用户

参数:-current-user

在大多数据库中可以获取到管理数据的用户。
当前数据库

参数:--current-db

返还当前连接的数据库。
当前用户是否为管理用

参数:--is-dba

判断当前的用户是否为管理,是的话会返回True。
列数据库管理用户

参数:--users

当前用户有权限读取包含所有用户的表的权限时,就可以列出所有管理用户。
列出并破解数据库用户的hash

参数:--passwords

当前用户有权限读取包含用户密码的彪的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。

 

标签:Sqlmap,sqlmap,HTTP,参数,测试,使用,id,注入
来源: https://www.cnblogs.com/qiantan/p/10688890.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有