百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

分享一个有意思的渗透测试工具——sqlmap

liebian365 2024-10-28 17:16 4 浏览 0 评论

概述

最近官网被攻击了,渗透测试的同事反馈是存在sql注入方面的漏洞,所以用sqlmap工具也测了一下,仅供参考。

官方网站:http://sqlmap.org/

下载地址:https://github.com/sqlmapproject/sqlmap/zipball/master


1、sqlmap简介

sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。

sqlmap支持MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等数据库的各种安全漏洞检测。

sqlmap支持五种不同的注入模式:

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

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

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

l 联合查询注入,可以使用union的情况下的注入;

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



2、下载及安装

2.1、linux下git直接安装

gitclone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

2.2、windows下安装

windows下下载sqlmap的压缩包,解压后即可使用。但需要一些组件包的支持,需要有python3.x环境支持。


3、SQL使用参数详解

用法: sqlmap.py [选项]

3.1 选项

 -h,--help  显示基本帮助信息并退出
 -hh    显示高级帮助信息并退出
 --version  显示程序版本信息并退出
-vVERBOSE信息级别: 0-6 (缺省1),其值具体含义:“0”只显示python错误以及严重的信息;1同时显示基本信息和警告信息(默认);“2”同时显示debug信息;“3”同时显示注入的payload;“4”同时显示HTTP请求;“5”同时显示HTTP响应头;“6”同时显示HTTP响应页面;如果想看到sqlmap发送的测试payload最好的等级就是3。

3.2、目标

在这些选项中必须提供至少有一个确定目标

 -d DIRECT    直接连接数据库的连接字符串
-u URL, --url=URL   目标URL (e.g."http://www.site.com/vuln.php?id=1"),使用-u或者--url
-l LOGFILE     从Burp或者WebScarab代理日志文件中分析目标
-x SITEMAPURL  从远程网站地图(sitemap.xml)文件来解析目标
-m BULKFILE      将目标地址保存在文件中,一行为一个URL地址进行批量检测。
-r REQUESTFILE   从文件加载HTTP请求,sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等),请求是HTTPS的时需要配合这个--force-ssl参数来使用,或者可以在Host头后门加上:443
-g GOOGLEDORK     从谷歌中加载结果目标URL(只获取前100个结果,需要挂代理)
-c CONFIGFILE       从配置ini文件中加载选项

3.3 、请求

这些选项可以用来指定如何连接到目标URL

--method=METHOD  强制使用给定的HTTP方法(例如put)
    --data=DATA   通过POST发送数据参数,sqlmap会像检测GET参数一样检测POST的参数。--data="id=1" -f --banner --dbs --users
   --param-del=PARA..  当GET或POST的数据需要用其他字符分割测试参数的时候需要用到此参数。
   --cookie=COOKIE     HTTP Cookieheader 值
   --cookie-del=COO..  用来分隔cookie的字符串值
   --load-cookies=L..  Filecontaining cookies in Netscape/wget format
   --drop-set-cookie   IgnoreSet-Cookie header from response
   --user-agent=AGENT  默认情况下sqlmap的HTTP请求头中User-Agent值是:sqlmap/1.0-dev-xxxxxxx(http://sqlmap.org)可以使用--user-agent参数来修改,同时也可以使用--random-agent参数来随机的从./txt/user-agents.txt中获取。当--level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入
   --random-agent     使用random-agent作为HTTP User-Agent头值
   --host=HOST         HTTP Hostheader value
   --referer=REFERER   sqlmap可以在请求中伪造HTTP中的referer,当--level参数设定为3或者3以上的时候会尝试对referer注入
   -H HEADER, --hea..  额外的http头(e.g."X-Forwarded-For: 127.0.0.1")
   --headers=HEADERS  可以通过--headers参数来增加额外的http头(e.g."Accept-Language: fr\nETag: 123")
   --auth-type=AUTH.. HTTP的认证类型 (Basic, Digest, NTLM or PKI)
   --auth-cred=AUTH..  HTTP 认证凭证(name:password)
   --auth-file=AUTH..  HTTP 认证PEM证书/私钥文件;当Web服务器需要客户端证书进行身份验证时,需要提供两个文件:key_file,cert_file,key_file是格式为PEM文件,包含着你的私钥,cert_file是格式为PEM的连接文件。
   --ignore-401        Ignore HTTPError 401 (Unauthorized)忽略HTTP 401错误(未授权的)
   --ignore-proxy      忽略系统的默认代理设置
   --ignore-redirects忽略重定向的尝试
   --ignore-timeouts   忽略连接超时
   --proxy=PROXY       使用代理服务器连接到目标URL
   --proxy-cred=PRO..  代理认证凭证(name:password)
   --proxy-file=PRO..  从文件加载代理列表
   --tor               使用Tor匿名网络
   --tor-port=TORPORT  设置Tor代理端口
   --tor-type=TORTYPE  设置Tor代理类型 (HTTP,SOCKS4 or SOCKS5 (缺省))
   --check-tor       检查Tor的是否正确使用
   --delay=DELAY   可以设定两个HTTP(S)请求间的延迟,设定为0.5的时候是半秒,默认是没有延迟的。
   --timeout=TIMEOUT   可以设定一个HTTP(S)请求超过多久判定为超时,10表示10秒,默认是30秒。
   --retries=RETRIES   当HTTP(S)超时时,可以设定重新尝试连接次数,默认是3次。
   --randomize=RPARAM可以设定某一个参数值在每一次请求中随机的变化,长度和类型会与提供的初始值一样
   --safe-url=SAFEURL  提供一个安全不错误的连接,每隔一段时间都会去访问一下
   --safe-post=SAFE..  提供一个安全不错误的连接,每次测试请求之后都会再访问一遍安全连接。
   --safe-req=SAFER..  从文件中加载安全HTTP请求
   --safe-freq=SAFE..  测试一个给定安全网址的两个访问请求
   --skip-urlencode    跳过URL的有效载荷数据编码
   --csrf-token=CSR..  Parameter usedto hold anti-CSRF token参数用来保存反CSRF令牌
   --csrf-url=CSRFURL  URL地址访问提取anti-CSRF令牌
   --force-ssl         强制使用SSL/HTTPS
   --hpp               使用HTTP参数污染的方法
   --eval=EVALCODE     在有些时候,需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用--eval参数在每次请求时根据所写python代码做完修改后请求。(e.g "import hashlib;id2=hashlib.md5(id).hexdigest()")
 sqlmap.py -u"http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b"--eval="import hashlib;hash=hashlib.md5(id).hexdigest()"

3.4、注入

这些选项可用于指定要测试的参数、提供自定义注入有效载荷和可选的篡改脚本。

-p TESTPARAMETER    可测试的参数
   --skip=SKIP         跳过对给定参数的测试
   --skip-static       跳过测试不显示为动态的参数
   --param-exclude=..  使用正则表达式排除参数进行测试(e.g. "ses")
   --dbms=DBMS         强制后端的DBMS为此值
   --dbms-cred=DBMS..  DBMS认证凭证(user:password)
   --os=OS            强制后端的DBMS操作系统为这个值
   --invalid-bignum    使用大数字使值无效
   --invalid-logical   使用逻辑操作使值无效
   --invalid-string    使用随机字符串使值无效
   --no-cast          关闭有效载荷铸造机制
   --no-escape         关闭字符串逃逸机制
   --prefix=PREFIX     注入payload字符串前缀
   --suffix=SUFFIX     注入payload字符串后缀
   --tamper=TAMPER   使用给定的脚本篡改注入数据

3.5、检测

这些选项可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容

   --level=LEVEL     执行测试的等级(1-5,默认为1)
   --risk=RISK       执行测试的风险(0-3,默认为1)
   --string=STRING    查询时有效时在页面匹配字符串
   --not-string=NOT..  当查询求值为无效时匹配的字符串
   --regexp=REGEXP     查询时有效时在页面匹配正则表达式
   --code=CODE       当查询求值为True时匹配的HTTP代码
   --text-only        仅基于在文本内容比较网页
   --titles           仅根据他们的标题进行比较


3.6、枚举

这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行自定义的SQL语句。

   -a, --all           获取所有信息
   -b, --banner        获取数据库管理系统的标识
   --current-user      获取数据库管理系统当前用户
   --current-db        获取数据库管理系统当前数据库
    --hostname         获取数据库服务器的主机名称
   --is-dba            检测DBMS当前用户是否DBA
   --users             枚举数据库管理系统用户
   --passwords         枚举数据库管理系统用户密码哈希
   --privileges        枚举数据库管理系统用户的权限
   --roles            枚举数据库管理系统用户的角色
   --dbs             枚举数据库管理系统数据库
   --tables            枚举的DBMS数据库中的表
   --columns          枚举DBMS数据库表列
   --schema            枚举数据库架构
   --count             检索表的项目数,有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数:sqlmap.py -u url --count -D testdb
   --dump            转储数据库表项
    --dump-all          转储数据库所有表项
   --search           搜索列(S),表(S)和/或数据库名称(S)
   --comments          获取DBMS注释
   -D DB               要进行枚举的指定数据库名
   -T TBL              DBMS数据库表枚举
   -C COL             DBMS数据库表列枚举
   -X EXCLUDECOL     DBMS数据库表不进行枚举
   -U USER           用来进行枚举的数据库用户
   --exclude-sysdbs    枚举表时排除系统数据库
   --pivot-column=P..  Pivot columnname
   --where=DUMPWHERE   Use WHEREcondition while table dumping
   --start=LIMITSTART  获取第一个查询输出数据位置
   --stop=LIMITSTOP   获取最后查询的输出数据
   --first=FIRSTCHAR   第一个查询输出字的字符获取
   --last=LASTCHAR    最后查询的输出字字符获取
   --sql-query=QUERY   要执行的SQL语句
   --sql-shell         提示交互式SQL的shell
   --sql-file=SQLFILE  要执行的SQL文件

3.7、一般选项

这些选项可以用来设置一些一般的工作参数

  -s SESSIONFILE     保存和恢复检索会话文件的所有数据
   -t TRAFFICFILE      记录所有HTTP流量到一个文本文件中
   --batch            从不询问用户输入,使用所有默认配置。
   --binary-fields=..  结果字段具有二进制值(e.g."digest")
   --charset=CHARSET   强制字符编码
   --crawl=CRAWLDEPTH  从目标URL爬行网站
   --crawl-exclude=..  正则表达式从爬行页中排除
   --csv-del=CSVDEL    限定使用CSV输出 (default",")
   --dump-format=DU..  转储数据格式(CSV(default), HTML or SQLITE)
   --eta              显示每个输出的预计到达时间
   --flush-session     刷新当前目标的会话文件
   --forms           解析和测试目标URL表单
    --fresh-queries     忽略在会话文件中存储的查询结果
   --hex             使用DBMS Hex函数数据检索
   --output-dir=OUT..  自定义输出目录路径
   --parse-errors      解析和显示响应数据库错误信息
   --save=SAVECONFIG   保存选项到INI配置文件
   --scope=SCOPE    从提供的代理日志中使用正则表达式过滤目标
   --test-filter=TE..  选择测试的有效载荷和/或标题(e.g. ROW)
   --test-skip=TEST..  跳过试验载荷和/或标题(e.g.BENCHMARK)
   --update            更新sqlmap

4、sqlmap测试官网

由于官网是比较老的系统了,查看地址发现链接是以cid为结尾的,手工检测页面(例如增加 and 1=1)可以发现返回不正常,明显是带入数据库查询了,基于用sqlmap检测如下

4.1、查看数据库中的表

python sqlmap.py -u "http://xxx/prohuman.aspx?cid=1xxx001" --dbs --tables



4.2、查看某个库下的表

python sqlmap.py -u "xxxx" -D database_name  --tables 


4.3、查看某个表的具体字段

python sqlmap.py -u "xxxx" -D  database_name  -T 表名 --columns


4.4、查看表里面的数据

python sqlmap.py -u "xxxx" -D database_name -T 表名 -C ID,Orders,SiteID,Salary,Title,Email --dump



不过外网是访问不了的,怎么绕过这防火墙就不知道了..

后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下~

相关推荐

快递查询教程,批量查询物流,一键管理快递

作为商家,每天需要查询许许多多的快递单号,面对不同的快递公司,有没有简单一点的物流查询方法呢?小编的回答当然是有的,下面随小编一起来试试这个新技巧。需要哪些工具?安装一个快递批量查询高手快递单号怎么快...

一键自动查询所有快递的物流信息 支持圆通、韵达等多家快递

对于各位商家来说拥有一个好的快递软件,能够有效的提高自己的工作效率,在管理快递单号的时候都需要对单号进行表格整理,那怎么样能够快速的查询所有单号信息,并自动生成表格呢?1、其实方法很简单,我们不需要一...

快递查询单号查询,怎么查物流到哪了

输入单号怎么查快递到哪里去了呢?今天小编给大家分享一个新的技巧,它支持多家快递,一次能查询多个单号物流,还可对查询到的物流进行分析、筛选以及导出,下面一起来试试。需要哪些工具?安装一个快递批量查询高手...

3分钟查询物流,教你一键批量查询全部物流信息

很多朋友在问,如何在短时间内把单号的物流信息查询出来,查询完成后筛选已签收件、筛选未签收件,今天小编就分享一款物流查询神器,感兴趣的朋友接着往下看。第一步,运行【快递批量查询高手】在主界面中点击【添...

快递单号查询,一次性查询全部物流信息

现在各种快递的查询方式,各有各的好,各有各的劣,总的来说,还是有比较方便的。今天小编就给大家分享一个新的技巧,支持多家快递,一次能查询多个单号的物流,还能对查询到的物流进行分析、筛选以及导出,下面一起...

快递查询工具,批量查询多个快递快递单号的物流状态、签收时间

最近有朋友在问,怎么快速查询单号的物流信息呢?除了官网,还有没有更简单的方法呢?小编的回答当然是有的,下面一起来看看。需要哪些工具?安装一个快递批量查询高手多个京东的快递单号怎么快速查询?进入快递批量...

快递查询软件,自动识别查询快递单号查询方法

当你拥有多个快递单号的时候,该如何快速查询物流信息?比如单号没有快递公司时,又该如何自动识别再去查询呢?不知道如何操作的宝贝们,下面随小编一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号若干...

教你怎样查询快递查询单号并保存物流信息

商家发货,快递揽收后,一般会直接手动复制到官网上一个个查询物流,那么久而久之,就会觉得查询变得特别繁琐,今天小编给大家分享一个新的技巧,下面一起来试试。教程之前,我们来预览一下用快递批量查询高手...

简单几步骤查询所有快递物流信息

在高峰期订单量大的时候,可能需要一双手当十双手去查询快递物流,但是由于逐一去查询,效率极低,追踪困难。那么今天小编给大家分享一个新的技巧,一次能查询多个快递单号的物流,下面一起来学习一下,希望能给大家...

物流单号查询,如何查询快递信息,按最后更新时间搜索需要的单号

最近有很多朋友在问,如何通过快递单号查询物流信息,并按最后更新时间搜索出需要的单号呢?下面随小编一起来试试吧。需要哪些工具?安装一个快递批量查询高手快递单号若干怎么快速查询?运行【快递批量查询高手】...

连续保存新单号功能解析,导入单号查询并自动识别批量查快递信息

快递查询已经成为我们日常生活中不可或缺的一部分。然而,面对海量的快递单号,如何高效、准确地查询每一个快递的物流信息,成为了许多人头疼的问题。幸运的是,随着科技的进步,一款名为“快递批量查询高手”的软件...

快递查询教程,快递单号查询,筛选更新量为1的单号

最近有很多朋友在问,怎么快速查询快递单号的物流,并筛选出更新量为1的单号呢?今天小编给大家分享一个新方法,一起来试试吧。需要哪些工具?安装一个快递批量查询高手多个快递单号怎么快速查询?运行【快递批量查...

掌握批量查询快递动态的技巧,一键查找无信息记录的两种方法解析

在快节奏的商业环境中,高效的物流查询是确保业务顺畅运行的关键。作为快递查询达人,我深知时间的宝贵,因此,今天我将向大家介绍一款强大的工具——快递批量查询高手软件。这款软件能够帮助你批量查询快递动态,一...

从复杂到简单的单号查询,一键清除单号中的符号并批量查快递信息

在繁忙的商务与日常生活中,快递查询已成为不可或缺的一环。然而,面对海量的单号,逐一查询不仅耗时费力,还容易出错。现在,有了快递批量查询高手软件,一切变得简单明了。只需一键,即可搞定单号查询,一键处理单...

物流单号查询,在哪里查询快递

如果在快递单号多的情况,你还在一个个复制粘贴到官网上手动查询,是一件非常麻烦的事情。于是乎今天小编给大家分享一个新的技巧,下面一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号怎么快速查询?...

取消回复欢迎 发表评论: