Sqlmap是一个开源的渗透工具,它可以自动化检测和利用SQL注入缺陷以及接管数据库服务器的过程。他有一个强大的检测引擎,许多适合于终极渗透测试的小众特性和广泛的开关,从数据库指纹、从数据库获取数据到访问底层文件系统和通过带外连接在操作系统上执行命令
官方网址:http://sqlmap.org/
http://sqlmap.org/
我们下载来的是一个压缩文件包,将其解压成文件夹后即可使用
通过cd 进入到sqlmap解压后的文件夹,再通过相关命令运行即可
所谓SQL注入,就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串, 最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将SQL命令注入到后台数据库引擎执行的能力,它可以通过在web表单中输入SQL语句得到一个存在安全漏洞 的网站上的数据库,而不是按照设计者意图去执行SQL语句
SQL注入发生未知HTTP数据包中任意位置
参数:-v
Sqlmap的输出信息按从简到繁共分为7个级别依次为0、1、2、3、4、5和6。使用参数-v 来 指定某个等级,如使用参数-v 6来指定输出级别为6。默认输出级别为1。
sqlmap可以通过3个方式获取目标的相关信息
python sqlmap.py -d "mysql://用户名:密码@地址:端口/数据库名字" -f --banner --dbs --users
其中
-f 指纹判别数据库类型
–banner 表示检索数据库管理系统的标识
–dbs可以利用的数据库
–users 枚举数据库管理系统用户
但是该种用法有点鸡肋,因为既然我们已经知道了数据库的账号密码,那么也没有必要通过sqlmap来进行操作
sqlmap直接对单一URL探测,参数使用 -u 或者 --url
URL格式:http(s)://targetur\[:port\]/
我们会碰到类似这种要确实是否这样操作的情况,像这条的意思为检查到这里使用的数据库应该时MySql,还要不要进行别的数据库的测试。
当不确定选什么时我们直接翘回车即可。
注意输入目标url时后面跟上的?id=1(或id=其他)不可少,这个相当于执行了sql语句,where id = ,与数据库进行了交互,若未与数据库进行交互,该操作的执行是不会成功的。
1.为便于搜索引擎收录,许多网站专门为搜索引擎生成了xml格式的站点地图 参数是 -x
2.从多行文本格式文件读取多个目标,对多个目标进行探测 参数是 -m
如图我们创建一个有两个目标的文件
通过命令行执行操作
这时会出现第一个url,询问我们是否要开始对第一个url目标的获取
然后会出现第二个url,询问我们是否要开始对第二个url目标的获取
3.可以将一个HTTP请求保存在文件中,然后使用参数 -r
请求头的参数从下图位置获取(注意需点击view parsed)
以及空两行后加上from data的内容
4.从配置文件sqlmap.conf中读取目标探测 参数是 -c
当我们直接使用时会发现有一句话是 missing a mandatory option in the configuration file (direct, url, logFile, bulkFile, googleDork, requestFile, sitemapUrl or wizard)
意思是配置文件中缺少强制选项(direct、url、logFile、bulkFile、googleDork、requestFile、sitemapUrl或wizard)
我们可以看见sqlmap.conf文件中direct、url、logFile等后面都是空的,这时比如我们在url处加入目标url
这时我们在执行那条命令,便ok了
HTTP请求有很多种方法(method),可以在不同位置(GET、POST、cookie和User-Agent等)携带 不同参数。往往只有在特定位置携带了特定参数以特定方法发起的请求才是合法有效的请求。 Sqlmap运行时除了需要指定目标,有时还需要指定HTTP请求的一些细节。
一般来说,Sqlmap能自动判断出是使用GET方法还是POST方法,但在某些情况下需要的可能是PUT等很少见的方法,此时就需要用参数–method来指定方法。
python sqlmap.py -u "url" --method='put'
参数 --data= “”
默认情况下,用于执行HTTP请求的HTTP方法是GET,但是可以通过提供在POST请求中发送的数据隐式的将其改为POST。这些数据作为参数,被用于SQL注入检测
如添加这里的data内容(注意需点击view parsed)
–cookie
–cookie-del
–load-cookies
–drop-set-cookie
使用场景:
登录状态用 cookie识别:
利用cookie值上的SQL注入漏洞,想要检测是否存在cookie注入:
这个uname = admin即是我们需要的cookie值
默认情况下,sqlmap使用以下用户代理执行HTTP请求:
sqlmap/1.0-dev-xxxx(http://sqlmap.org)
使用参数 --user-agent = '指定的user-agent'
使用参数 --random-agent
python sqlmap.py -u 'url地址' --level 2 --banner --random-agent
level执行测试的等级(1-5,默认为1)
level 2:测试cookie,进行自动破解
level3:测试HTTP User-Agent,Referer等头部信息
sqlmap中设置代理的参数
–proxy
设置HTTP代理服务器位置 格式:–proxy http(s): //ip[端口]
–proxy-cred
设置HTTP代理服务器认证信息 格式:–proxy-cred user:pwd
–proxy-file
设置多条代理在文件中
–ignore-proxy
当希望通过忽略系统范围内的HTTP(S)代理服务器设置来针对本地网络的目标
参数 --delay 0.5
sqlmap探测过程中会发送大量探测Payload到目标,如果默认情况过快的发包速度会导致目标预警。 为了避免这样的情况发生,可以在探测设置sqlmap发包延迟。默认情况下,不设置延迟
参数 --timeout 10.5
在考虑超时HTTP请求之前,可以指定等待的秒数。有效值是一个浮点数,比如10.5秒。默认是30秒
参数 --retries count
设置对应重试次数,默认情况下重试3次
参数 --randomize 参数名称
sqlmap可以指定要在每次请求期间随机更改其值得参数名称。长度和类型根据提供的原始值保持 一致
如果测试偶尔返回HTTP错误401的站点,而你想忽略它并在不提供适当凭证的情况下继续测试,可以 使用–ignore-401
–ignore-401 参数用来忽略未验证错误
有时服务器检测到某个客户端错误请求过多会对其进行屏蔽,而Sqlmap的测试往往会产生大量错 误请求,为避免被屏蔽,可以时不时的产生几个正常请求以迷惑服务器。
参数: