目录
一、sqlmap介绍
二、常用命令
二、进阶命令
--technique=BEUST
--prefix与 --suffix
--level
三、注入https网站
四、进行POST注入
相对于手工注入,sqlmap的高效注入大大提高了我们渗透效率。Sqlmap采用了以下5种独特的SQL注入技术:
注入小技巧:有回显可以用联合查询,有报错可以用报错注入。都没有再看有没有布尔类型的状态(显示或者不显示)。若以上都没有,试试用延时注入。或者我们直接测试延时注入
当发现sql注入的时候,根据我们注入的不同,对sqlmap使用的参数也不同
1. 目的是获取网站后台管理的账号密码
2. 目的是获取mysql的管理账号、密码进行远程连接
--users
--passwords
sqlmap -u URL 检查注入点 sqlmap -u URL --dbs 列出数据库中所有数据库的名字 sqlmap -u URL --is-dba 当前用户是否是数据库管理员 sqlmap -u URL --current-db 显示当前数据库的名字
-D 指定数据库 --tables 列出所有表名 qlmap -u URL -D "xx" --tables 列出xx数据库中的所有表 -T 指定一个表 --columns 列出所有的字段名 qlmap -u URL -D "xx" -T "cc" --columns 列出表中所有的字段名 -C 指定一个字段名 --dump 列出字段内容 qlmap -u URL -D "xx" -T "cc" -C "x,x,.." --dump 列出字段内容(-T ,-C之类的要用大写不然有时候会读不出来) sqlmap -r a.txt -p username 倒入txt文档的post数据包,并指定参数username进行注入
--dbms mysql 指定注入的数据类型为mysql数据库
--os-shell 尝试写入shell sqlmap -u url --batch --smart 自动聪明的选择,即执行的时候不需要我们再手动的进行选择yes或者no(但是由于机器自动进行选择,所以有时候结果会不一样比如没有结果,所以建议少使用) --force-ssl 测https的时候 --cookie "cookie值" 有些网站要登录才行,所以需设置cookie --threads=10 开启多线程,默认是单线程为1,最大10。线程越大检测速度越快 --users 获取mysql数据库管理用户,mysql安装时会默认有一个root用户,除了这个用户可能还会创建有其他用户,这个参数可以将这些用户列出了 --passwords 获取mysql数据库管理用户的hash值
--dbms:指定注入的数据库类型,如Microsoft Access, Microsoft SQL Server, MimerSQL, MonetDB, MySQL, Oracle, Percona, PostgreSQ
-v 3
如果你想观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的,可以使用-v参数。
共有七个等级,默认为1:
如果你想看到sqlmap发送的测试payload最好的等级就是-v 3。
有时候我们手工探测出来注入是某种类型,为了节省时间,我们可以直接指定sqlmap注入的类型
BEUST的值可以是"BEUST"中的一种。
sqlmap.py -r x.txt -v3 --technique=B #指定进行布尔盲注
我们在注入的时候经会碰到需要在payload前加上指定的字符要构造闭合,如下这种情况,我们找到了注入点为' ,但是还得在后面加上 or ' 才行,与原来的sql语句构成闭合
所以我们就指定sqlmap在每个payload前面加上 ' ,每个payload后面加上 or '
sqlmap.py -r x.txt --prefix "'" --suffix " or '" -v3
有时候注入的时候,我们发现了注入点但是使用sqlmap确注入不出来,发现sqlmap只发出了十几个包就说漏洞不存在然后停止运行了。那很有可能是你没有加此参数进行注入。
--level有五个等级(1-5),默认使用等级1进行注入。级别越高sqlmap发送的探测payload就越多,越有可能发现注入漏洞。为了尽可能发现漏洞,我们应该使用更高的级别,如 --level 5
sqlmap.py -r r.txt -dbms mysql --technique=T -v3 --level 5
sqlmap跑https站点会报错,传送门目录
--force-ssl
通过本地代理端口进行访问
使用sqlmap注入https的网站时,如果没有进行任何处理则会报错如下,连接不了目标。就是因为ssl证书的原因,而且sqlmap它是不能自动伪造ssl证书的
可以使用sqlmap直接加上--force- ssl参数,告诉sqlmap这是https服务。或者可以在Host头后门加上:443(默认不是443)。如果还是不行,我们就设置一个代理
这里通过代理本地的burp进行访问,如下
1. burp开启代理监听端口
监听的ip为现在使用的网卡的ip,端口输入如8081
2. 使用--proxy参数
如下进行代理,成功解决ssl报错的问题
不管是POST还是GET型注入,我们都可以在想要注入的参数后加,代表对此参数进行注入,如对id参数进行注入,sqlmap -u "https://xx.xx.com?id=23 "
——>我们都知道在web中进行数据传参用的最多的就是GET型或者POST型方法,所以根据此我们也可以把注入分为GET型注入和POST型注入
post型注入例子
有两种方法,一种是-r的方式,另一种是--data
1. sqlmap -r
如下获取到post的数据,在我们可能认为存在注入的参数后面加上号,号代表优先级,sqlmap会识别优先注入这个参数。然后将HTTP请求包保存为txt文件,接着sqlmap -r xx.txt就行。
或者我们不在参数后面加*,sqlmap会依次询问你是否对所有参数进行注入
2. --data
这种不需要将数据进行保存,我们只需要将post数据复制下来
sqlmap -u --data="key=value"
(1)复制所有post数据下来
sqlmap会逐个的检测每一个参数是否存在注入
或者我们也可以在参数后面加*,sqlmap会优先检测这个参数
(2)只复制我们想测试的部分post参数
如下,sqlmap虽然也会检测,但是一直显示不存在漏洞
所以我们使用 --data参数时需要将所有的post数据都复制下来进行测试
sqlmap -r和--data两种方式都可以,看自己方便
★
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读